lan*_*lde 9 performance machine-learning recurrent-neural-network
我正在研究NLP序列标记问题.我的数据由(w_1, w_2, ..., w_k)具有相应标签的可变长度序列组成(l_1, l_2, ..., l_k)(在这种情况下,任务被命名为实体提取).
我打算用回归神经网络解决这个问题.由于序列长度可变,我需要填充它们(我希望批量大小> 1).我可以选择预先填零它们,或者将它们填充为零.即要么我让每个序列(0, 0, ..., w_1, w_2, ..., w_k)或(w_1, w_2, ..., w_k, 0, 0, ..., 0)使得每个序列的lenght是一样的.
如何在填充前后填充影响结果?
似乎预填充更常见,但我无法找到解释为什么它会更好.由于RNN的性质,它对我来说是一种随意的选择,因为它们跨时间步长共享权重.
nlm*_*lml 11
通常在 RNN 中,我们获取最终输出或隐藏状态并使用它来进行预测(或执行我们尝试执行的任何任务)。
如果我们在获取最终输出之前向 RNN 发送一堆 0(即您所描述的“后”填充),那么句子中最后一个单词处的网络隐藏状态可能会在某种程度上被“冲掉”通过这个词之后的所有零输入。
如此直观,这可能就是预填充更受欢迎/更有效的原因。
这篇论文(https://arxiv.org/pdf/1903.07288.pdf)研究了padding类型对LSTM和CNN的影响。他们发现,与 LSTM 中的预填充相比,后填充的准确度要低得多(接近一半),尽管 CNN 没有显着差异(后填充只是稍微差一点)。
对 RNN 的一个简单/直观的解释是,后填充似乎会随着时间的推移向从序列中学到的内容添加噪声,并且 RNN 没有更多的时间步长来从该噪声中恢复。然而,通过预填充,RNN 能够随着时间的推移从序列中学习,从而更好地适应开始时添加的零噪声。
我认为社区需要进行更彻底的实验,以更详细地解释填充如何影响性能。
我总是建议使用预填充而不是后填充,即使对于 CNN 也是如此,除非问题特别需要后填充。