首页 > 解决方案 > 为什么我的注意力模型比非注意力模型差

问题描述

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

模型在没有注意力的情况下的损失在 5 个时期内从大约 8.0 下降到 1.4,在 10 个时期内下降到 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 个样本训练它时损失如何减少的图:

在此处输入图像描述

标签: machine-learningdeep-learningnlpattention-modelencoder-decoder

解决方案


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


推荐阅读