为啥我的注意力模型比非注意力模型差

Posted

技术标签:

【中文标题】为啥我的注意力模型比非注意力模型差【英文标题】:Why is my attention model worse than non-attention model为什么我的注意力模型比非注意力模型差 【发布时间】:2021-02-07 19:17:40 【问题描述】:

我的任务是将英语句子转换为德语句子。我首先使用普通的编码器-解码器网络进行此操作,在该网络上我得到了相当不错的结果。然后,我尝试使用与以前相同的模型来解决相同的任务,但其中包含 Bahdanau Attention。而且,没有注意力的模型优于有注意力的模型。

模型在没有注意力的情况下的损失在 5 个 epoch 内从大约 8.0 下降到 1.4,在 10 个 epoch 内下降到 1.0,并且损失仍在减少,但速度较慢。

模型的注意力损失在 5 个 epoch 内从大约 8.0 下降到 2.6,并且没有学到更多东西。

没有一个模型过度拟合,因为这两个模型的验证损失也在减少。

每个英文句子有 47 个单词(填充后),每个德语句子有 54 个单词(填充后)。我在训练集中有 7000 个英语和 7000 个德语句子,在验证集中有 3000 个。

我尝试了几乎所有方法,例如:不同的学习率、不同的优化器、不同的批量大小、我在模型中使用的不同激活函数、尝试应用批量和层归一化,以及编码器和解码器的 LSTM 单元数量不同,但没有有很大的不同,除了归一化和增加数据,其中损失下降到大约 1.5,然后再次停止学习!

为什么会这样?为什么有 Bahdanau 注意力的模型失败了,而没有任何注意力的模型表现良好?

编辑 1 - 我尝试在注意力之前、注意力之后以及注意力之前和之后应用 LayerNormalization。每种情况下的结果大致相同。但是,这一次,损失在 5 个 epoch 内从大约 8.0 变为 2.1,并且再次没有学到太多东西。但是大部分学习是在 1 个 epoch 中完成的,因为在 1 个 epoch 结束时它达到了大约 2.6 的损失,然后在下一个 epoch 达到 2.1,然后又没有学到太多东西。

不过,没有任何注意力的模型优于同时具有注意力和 LayerNormzalization 的模型。这可能是什么原因?我得到的结果是否可能可能?没有任何类型的归一化、没有任何 dropout 层的普通编码器-解码器网络如何比具有注意力和 LayerNormalization 的模型表现得更好?

编辑 2 - 我尝试增加数据(我做了 7 倍以上的数据),这一次,两个模型的性能都提高了很多。但是,没有注意力的模型仍然比有注意力的模型表现得更好。为什么会这样?

编辑 3 - 我尝试通过首先从整个训练数据集中传递一个样本来调试模型。损失从大约 9.0 开始,并在 0 处减少并收敛。然后,我尝试通过 2 个样本,损失再次从大约 9.0 开始,但是这一次,它只是在前 400 个时期的 1.5 和 2.0 之间徘徊,并且然后慢慢减少。这是我只用 2 个样本训练它时损失如何减少的图:

这是我只用 1 个样本训练它时损失如何减少的图:

【问题讨论】:

您似乎遇到了规范化问题。您是否在模型中应用了任何类型的标准化?如果不是,请尝试在注意力层之后(或之前,测试两者)应用 LayerNormalization,然后比较两种方式。 @Ghanem 我试过你说的,我在编辑中添加了LayerNormalization的结果。 Are the results that I got even possible? 为什么不呢!添加注意力或任何辅助层并不意味着更好的性能。你使用词嵌入吗?哪一个? @Ghanem 是的,我使用词嵌入。但是,我不使用任何预训练的词嵌入。我使用我自己的嵌入使用tf.keras.layers.Embedding 好的,所以你训练他们。尝试使用预训练的嵌入,值得。 【参考方案1】:

谢谢大家的帮助....这是一个实现问题...修复这个问题,使注意力模型比普通的编码器-解码器模型表现更好!

【讨论】:

实施问题是什么?您能否用您的答案更新此查询,因为与基于 LSTM 的基本编码器解码器模型相比,注意力模型表现不佳?

以上是关于为啥我的注意力模型比非注意力模型差的主要内容,如果未能解决你的问题,请参考以下文章

为啥整数上的 in_array 严格模式比非严格模式慢?

为啥我执行 PCA 后图像文件的大小会增加?

为啥即使模型名称在 Laravel 上是复数,它也能工作?

关于《注意力模型--Attention注意力机制》的学习

论文写作分析之一 《基于混合注意力Seq2seq模型的选项多标签分类》

了解RNN模型LSTM模型GRU模型,及掌握注意力机制