我一直在看tfjs的例子,并试图学习seq2seq模型,在这个过程中,我偶然发现了date-conversion-attention的例子。
这是一个很好的例子,但是在这个例子中使用了什么样的注意力机制呢?Readme
文件中没有任何信息。有人能告诉我描述这里使用的注意力的论文吗?
链接到关注部分:https://github.com/tensorflow/tfjs-examples/blob/908ee32750ba750a14d15caeb53115e2d3dda2b3/date-conversion-attention/model.js#L102-L119
2条答案
按热度按时间jum4pzuy1#
我相信我找到了答案。
date-conversion-attention
中使用的注意力模型使用了点积对齐得分,它在Effective Approaches to Attention-based Neural Machine Translation
中进行了描述。链接:https://arxiv.org/pdf/1508.04025.pdfxwbd5t1u2#
我对这个样本已经研究了几个小时,到目前为止我得出的结论是:
编码器查看完整的输入,每个lstm步骤嵌入一个字符。解码器需要输出的时移副本作为其输入-从一个特殊字符开始。输出(目标字符串)在训练期间按原样提供给解码器。在评估期间,一个字符在当时被预测,预测将传递回解码器以用于下一个字符。
解码器看不到输入,但它接收编码器的最后一步输出作为其初始状态,这个状态初始化告诉解码器如何产生它的输出,类似于要处理的日期格式的编码描述(我假设)。
LSTM的输出,每个步骤一个(=输入或输出字符),然后用softmax进行点积和归一化。该点积是注意力矩阵-基本上是编码器和解码器激活的亮点。对于给定下一个字符的注意力热图,解码器的输出必须与编码器的输出“匹配”。注意力矩阵不是学习的权重或偏差,它只是编码器和解码器输出的乘积。
最后,这个注意力矩阵与完整的编码器输入进行点积,并与解码器输出连接,以允许最终的密集层解码注意力Map,并从编码器输出中“读取”正确的值。
在预测过程中,只读取预测的最后一个字符。可能是因为前面的预测可能不稳定?
我读了一本优秀的书:Deep Learning with JavaScript Neural networks in TensorFlow.js这本书逐一解释了这些示例,并添加了大量额外的文档,但我认为它们并没有很好地解释这个示例的总体架构--只是解释了细节。