为什么我的注意力模型比非注意力模型差
Why is my attention model worse than non-attention model
我的任务是将英语句子转换为德语句子。我首先使用普通的编码器-解码器网络进行了此操作,并获得了相当不错的结果。然后,我尝试使用与之前完全相同的模型解决相同的任务,但其中包含 Bahdanau Attention。并且,没有注意的模型优于有注意的模型。
模型在没有注意的情况下的损失在 5 个时期内从大约 8.0 下降到 1.4,在 10 个时期内下降到 1.0,损失仍在减少,但速度较慢。
模型的注意力损失在 5 个时期内从大约 8.0 下降到 2.6,并且没有学到更多。
None 个模型过度拟合,因为两个模型的验证损失也在减少。
每个英语句子有 47 个单词(填充后),每个德语句子有 54 个单词(填充后)。我在训练集中有 7000 个英语和 7000 个德语句子,在验证集中有 3000 个。
我几乎尝试了所有方法,例如:不同的学习率、不同的优化器、不同的批量大小、我在模型中使用的不同激活函数、尝试应用批量和层归一化,以及编码器和解码器的不同数量的 LSTM 单元,但是没有什么区别,除了标准化和增加数据,其中损失下降到大约 1.5 但随后再次停止学习!
为什么会这样?为什么有 Bahdanau 注意力的模型会失败,而没有任何注意力的模型表现良好?
编辑 1 - 我尝试在注意力之前、注意力之后以及注意力之前和之后应用 LayerNormalization。每种情况下的结果大致相同。但是,这一次,损失在 5 个时期内从大约 8.0 增加到 2.1,并且再次没有学到太多东西。但是大部分学习是在 1 个时期内完成的,因为在 1 个时期结束时它达到了大约 2.6 的损失,然后在下一个时期达到了 2.1,然后又没有学到太多东西。
仍然,没有任何注意力的模型优于同时具有注意力和 LayerNormzalization 的模型。这可能是什么原因?我得到的结果甚至 可能 吗?一个没有任何规范化、没有任何 dropout 层的普通编码器-解码器网络如何比同时具有注意力和 LayerNormalization 的模型表现更好?
编辑 2 - 我尝试增加数据(我比之前增加了 7 倍),这一次,两个模型的性能都提高了很多。但是,没有注意力的模型仍然比有注意力的模型表现得更好。为什么会这样?
编辑 3 - 我试图通过首先从整个训练数据集中传递一个样本来调试模型。损失从大约 9.0 开始,然后减少并收敛于 0。然后,我尝试传递 2 个样本,损失再次从大约 9.0 开始,但是,这一次,前 400 个时期它只是在 1.5 和 2.0 之间徘徊,并且然后慢慢减少。这是我只用 2 个样本训练时损失如何减少的图表:
这是我用 1 个样本训练时损失如何减少的图表:
谢谢大家的帮助....这是一个实施问题...解决这个问题,使注意力模型比普通 encoder-decoder 模型表现得更好!
我的任务是将英语句子转换为德语句子。我首先使用普通的编码器-解码器网络进行了此操作,并获得了相当不错的结果。然后,我尝试使用与之前完全相同的模型解决相同的任务,但其中包含 Bahdanau Attention。并且,没有注意的模型优于有注意的模型。
模型在没有注意的情况下的损失在 5 个时期内从大约 8.0 下降到 1.4,在 10 个时期内下降到 1.0,损失仍在减少,但速度较慢。
模型的注意力损失在 5 个时期内从大约 8.0 下降到 2.6,并且没有学到更多。
None 个模型过度拟合,因为两个模型的验证损失也在减少。
每个英语句子有 47 个单词(填充后),每个德语句子有 54 个单词(填充后)。我在训练集中有 7000 个英语和 7000 个德语句子,在验证集中有 3000 个。
我几乎尝试了所有方法,例如:不同的学习率、不同的优化器、不同的批量大小、我在模型中使用的不同激活函数、尝试应用批量和层归一化,以及编码器和解码器的不同数量的 LSTM 单元,但是没有什么区别,除了标准化和增加数据,其中损失下降到大约 1.5 但随后再次停止学习!
为什么会这样?为什么有 Bahdanau 注意力的模型会失败,而没有任何注意力的模型表现良好?
编辑 1 - 我尝试在注意力之前、注意力之后以及注意力之前和之后应用 LayerNormalization。每种情况下的结果大致相同。但是,这一次,损失在 5 个时期内从大约 8.0 增加到 2.1,并且再次没有学到太多东西。但是大部分学习是在 1 个时期内完成的,因为在 1 个时期结束时它达到了大约 2.6 的损失,然后在下一个时期达到了 2.1,然后又没有学到太多东西。
仍然,没有任何注意力的模型优于同时具有注意力和 LayerNormzalization 的模型。这可能是什么原因?我得到的结果甚至 可能 吗?一个没有任何规范化、没有任何 dropout 层的普通编码器-解码器网络如何比同时具有注意力和 LayerNormalization 的模型表现更好?
编辑 2 - 我尝试增加数据(我比之前增加了 7 倍),这一次,两个模型的性能都提高了很多。但是,没有注意力的模型仍然比有注意力的模型表现得更好。为什么会这样?
编辑 3 - 我试图通过首先从整个训练数据集中传递一个样本来调试模型。损失从大约 9.0 开始,然后减少并收敛于 0。然后,我尝试传递 2 个样本,损失再次从大约 9.0 开始,但是,这一次,前 400 个时期它只是在 1.5 和 2.0 之间徘徊,并且然后慢慢减少。这是我只用 2 个样本训练时损失如何减少的图表:
这是我用 1 个样本训练时损失如何减少的图表:
谢谢大家的帮助....这是一个实施问题...解决这个问题,使注意力模型比普通 encoder-decoder 模型表现得更好!