如果我通过滑动窗口方法训练LSTM,我会过拟合吗?为什么人们似乎并没有使用它LSTMs?
为了简化示例,假设我们必须预测字符序列:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
如果我继续用以下迷你批次训练LSTM是不好的(还是更好的?):
A B C D E F G H I J K L M N, backprop, erase the cell
B C D E F G H I J K L M N O, backprop, erase the cell
.... and so on, shifting by 1 every time?
以前,我一直将其训练为:
A B C D E F G H I J K L M N, backprop, erase the cell
O P Q R S T U V W X Y Z, backprop, erase the cell
与其将窗口移动一个,不如将窗口滑动两个条目,等等,会更好吗?这意味着什么(在精度/过度拟合方面)?
另外,如果我要在前馈网络中执行滑动窗口方法,是否会导致过度拟合?我会假设是的,因为网络很长时间以来都暴露于相同的信息区域。例如,它要E F G H I J K
长时间暴露。
编辑:
请记住,在训练批次之间擦除了单元状态,因此LSTM在这些时候会有“锤头”的感觉。它无法记住 OPQRSTUVWXYZ之前的内容。这意味着LSTM无法得知“ O”跟在“ M”之后。
因此,我想(因此是我的整个问题),为什么不给它中间(重叠的)批处理...在这种情况下,为什么不使用多个重叠的迷你批处理-对我来说这将提供更流畅的培训?最终,这将意味着LSTM的滑动窗口。
答案后,一些有用的信息,我发现被接受:
英文翻译的第一个单词可能与源句子的第一个单词高度相关。但这意味着解码器必须考虑50步之前的信息,并且该信息需要以某种方式编码在向量中。众所周知,递归神经网络在处理此类远程依赖性方面存在问题。从理论上讲,像LSTMs这样的体系结构应该能够解决这个问题,但是在实践中,长期依赖仍然是个问题。
例如,研究人员发现,反转源序列(将其反向馈入编码器)会产生明显更好的结果,因为它缩短了从解码器到编码器相关部分的路径。同样,两次输入一个输入序列似乎也有助于网络更好地记忆事物。例如,如果一个培训示例是“约翰回家”,则可以将“约翰回家John回家”作为网络输入之一。
接受答案后进行编辑:
几个月后,我更倾向于使用滑动窗口方法,因为它可以更好地使用数据。但是在那种情况下,您可能不想在ABCDEFGHIJKLMNO之后立即训练BCDEFGHIJKLMNO。取而代之的是,整理示例,以将所有信息逐渐统一地“刷” 入LSTM。在ABCDEFGHIJKLMNO等之后给它HIJKLMNOPQRSTU。这与灾难性遗忘直接相关。与往常一样,密切监视“验证”和“测试”集,并在看到其错误稳定增加后立即停止
此外,通过使用“合成渐变”,可以改善“重击”的问题。在此处查看其好处:(链接的答案讨论了长序列的好处)/datascience//a/32425/43077