滑动窗是否导致LSTM过度装配?


15

如果我通过滑动窗口方法训练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

Answers:


9

尽管@Imran先前的回答是正确的,但我认为有必要加一个警告:在一些应用程序中,人们确实向LSTM提供了滑动窗口。例如,在这里,用于将预测框架化为有监督的学习问题。

4ñ+ñ2+ññ

由于LSTM不需要固定大小的输入,因此它们可以自行找到最佳回溯号。但是,如果您已经进行了先前的自回归分析,并且确定例如当前时间步长与上一个第十时间步长最相关,而与过去的第11步或任何其他时间步长都不相关,那么您可以也许通过输入固定长度的序列可以节省一些培训时间。然而,那种失败的LSTM的目的。

如果您的数据不足以用于LSTM,我建议尝试更简单的方法(例如自回归模型),然后逐步提高。

编辑(回复评论):

重叠序列被用作输入,尤其是当序列很长时(当然,“ long”是相对的)。尽管对于长序列,LSTM比普通RNN更好,但是如果序列很长,它们仍然很难记住从序列开头开始的时间步长。这就导致了诸如双向LSTM之类的事情,它可以向前和向后读取序列,从而改善了网络在每个输入序列的开头和结尾处的暴露程度。尽管我认为重叠序列更直观,但原理与重叠序列相同。


谢谢,II仍然不知道是否应该/应该不对LSTM进行非重叠批次的培训。您喜欢的帖子是有价值的,但它仅讨论前馈网络,并没有解决培训期间LSTM重叠小批处理的好处/危险。@Imran也没有讨论针对重叠的小批处理的“反处方”,这是我对他的帖子的第一条评论。
卡里

我已经修改了我的问题,以包括评论
Kari,

很多很棒的信息!
伊兰(Imran)'18

@Kari我已经修改了答案。有帮助吗?
StatsSorceress

5

LSTM不需要输入的滑动窗口。他们可以记住他们过去所看到的内容,如果您一次输入一个培训示例,他们将选择合适的输入窗口大小以供自己记住。

LSTM已经很容易过度拟合,如果您使用滑动窗口输入大量冗余数据,则可以,它们很可能过度拟合。

另一方面,使用前馈神经网络进行时间序列预测需要滑动窗口,因为FNN需要固定大小的输入并且没有内存,因此这是向其提供时间序列数据的最自然的方法。

FNN是否会过拟合取决于它的体系结构和您的数据,但是如果适用,则将应用所有标准正则化技术。例如,您可以尝试选择较小的网络,L2正则化,Dropout等。


谢谢!我认为,在训练批次之间会消除细胞状态,因此LSTM在这些时候将面临“重击”。它无法记住OPQRSTUVWXYZ之前的内容。这意味着LSTM无法得知“ O”跟在“ M”之后。所以我想,为什么不给它一个介于中间(重叠)的批处理……在那种情况下,为什么不使用多个重叠的迷你批处理-对我来说这将提供一个更流畅的训练?
卡里

最终,这将意味着LSTM的滑动窗口
Kari,

尽管当然不可能向后传播,但不必在两次训练之间擦除细胞状态。
Jan van der Vegt

我确实尝试过,并且-即使学习率为0,错误仍会以很小的幅度上下浮动,因为错误的细胞状态在训练过程中被重新用作“旧版”。我用这种方法不能堆叠超过6层-它太混乱了,无法收敛。但是,在每次反向传播后将细胞状态重置为零,使我可以堆叠150层,每层具有64个神经元,并以0.001的学习率和0.9的动量训练它(我使用LayerNormalization,这就是为什么我的学习率如此之大的原因)
卡里

1
这意味着LSTM在“遗留单元状态”下变得不稳定且不可靠-它基于尚未完全校正的(先前小批量的)最后一个单元状态的决定,开始开发新的小批量。因此,擦除细胞状态消除了这一基本缺陷,但使LSTM经历了健忘症
Kari,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.