确实,将梯度传播限制为 30 个时间步将阻止它学习数据集中所有可能的内容。但是,这在很大程度上取决于您的数据集,这是否会阻止它学习有关模型中特征的重要信息!
在训练期间限制梯度更像是限制模型可以高置信度吸收输入特征和隐藏状态的窗口。因为在测试时您将模型应用于整个输入序列,它仍然能够将有关所有输入特征的信息合并到其隐藏状态中。在对句子做出最终预测之前,它可能不确切知道如何保存该信息,但它可能仍然能够建立一些(诚然较弱的)连接。
首先考虑一个人为的例子。假设您的网络将在其输入中的任何位置生成 1,否则生成 0。假设您在长度为 20 的序列上训练网络,然后将梯度限制为 10 步。如果训练数据集在输入的最后 10 步中从未包含 1,那么网络将在任何配置的测试输入中出现问题。但是,如果训练集有一些像 [1 0 0 ... 0 0 0] 和其他像 [0 0 0 ... 1 0 0] 的例子,那么网络将能够接受“存在输入中任何位置的 1" 特征。
然后回到情绪分析。假设在训练过程中,您的模型遇到了一个很长的否定句,例如“我讨厌这个,因为......周围和周围”,省略号中有 50 个单词。通过将梯度传播限制为 30 个时间步,模型不会将“我讨厌这个因为”连接到输出标签,因此它不会从这次训练中获取“我”、“讨厌”或“这个”例子. 但它会从句子末尾开始 30 个时间步内提取单词。如果您的训练集包含其他包含这些相同单词的示例,可能还有“仇恨”,那么它就有机会发现“仇恨”和负面情绪标签之间的联系。此外,如果您有较短的训练示例,请说:“我们讨厌这个,因为它太糟糕了!” 那么您的模型将能够将“仇恨”和“这个”特征连接到目标标签。如果你有足够多的这些训练示例,那么模型应该能够有效地学习连接。
在测试时,假设您向模型展示另一个长句,例如“我讨厌这个,因为......在壁虎上!” 模型的输入将以“我讨厌这个”开头,它将以某种形式传递到模型的隐藏状态。这种隐藏状态用于影响模型的未来隐藏状态,因此即使在句子结束之前可能有 50 个单词,这些初始单词的隐藏状态在理论上也有可能影响输出,即使它从来没有在“我讨厌这个”和句子结尾之间包含如此大距离的样本上进行训练。