如果我通过滑动窗口方法训练它,我会过度拟合我的 LSTM 吗?为什么人们似乎不将它用于 LSTM?
举一个简化的例子,假设我们必须预测字符序列:
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
如果我继续使用以下 minibatch 训练我的 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
与其移动一个,不如将窗口滑动 2 个条目,等等?这意味着什么(就精度/过度拟合而言)?
另外,如果我在前馈网络中使用滑动窗口方法,会导致过度拟合吗?我会假设是的,因为网络长时间暴露于相同的信息区域。例如,它暴露在E F G H I J K
很长时间。
编辑:
请记住,细胞状态在训练批次之间会被擦除,因此 LSTM 在这些时候会有“一锤定音”。它无法记住OPQRSTUVWXYZ 之前的内容。这意味着 LSTM 永远无法知道“O”跟随“M”。
所以,我想(因此我的整个问题),为什么不给它中间(重叠)批次......在这种情况下,为什么不使用多个重叠的小批量 - 对我来说,这将提供更顺畅的培训?最终,这将意味着 LSTM 的滑动窗口。
我在回答被接受后发现了一些有用的信息:
英文翻译的第一个词可能与源句的第一个词高度相关。但这意味着解码器必须考虑 50 步前的信息,并且这些信息需要以某种方式编码在向量中。众所周知,递归神经网络在处理这种长期依赖关系方面存在问题。理论上,像 LSTM 这样的架构应该能够处理这个问题,但在实践中,远程依赖仍然存在问题。
例如,研究人员发现,反转源序列(将其向后馈送到编码器)会产生明显更好的结果,因为它缩短了从解码器到编码器相关部分的路径。同样,输入两次输入序列似乎也有助于网络更好地记忆事物。例如,如果一个训练示例是“约翰回家”,您可以将“约翰回家约翰回家”作为一个输入提供给网络。
接受答案后编辑:
几个月后,我更倾向于使用滑动窗口方法,因为它更好地使用了数据。但在这种情况下,您可能不想在 ABCDEFGHIJKLMNO 之后立即训练 BCDEFGHIJKLMNO。相反,打乱你的例子,逐渐和统一地将所有信息“刷入”到你的 LSTM 中。在 ABCDEFGHIJKLMNO 等之后给它 HIJKLMNOPQRSTU。这与灾难性遗忘直接相关。与往常一样,密切监视验证和测试集,并在看到它们的错误稳步增加时立即停止
此外,可以通过使用合成渐变来改善“锤击头”问题。在这里查看它的好处:(链接的答案讨论了长序列的好处)https://datascience.stackexchange.com/a/32425/43077