关于Attention的公式推导,我在这篇文章讲过了,本篇文章主要以图示的方式进行讲解
下图是一个Encoder架构,从值上来说与是相等的,只不过这里换了个名字
首先我们需要将和所有的计算一个"相关性",比方说计算和之间的相关性计算得
计算得到m个相关性之后,将这些值与进行加权平均,即
我们可以直观的感受一下这样做有什么作用,对于那些值比较大的,最终中也会有一大部分来自于。实际上考虑到了所有时刻的,只不过对于某些时刻可能关注的更多,而某些时刻关注的更少,这就是注意力机制
之后将作为时刻Decoder 的输入,计算得到,然后再计算与所有之间新的相关性
同样的,将新计算得到的与做加权平均,得到新的context vector
重复上述步骤,直到Decoder结束
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kXBKjnuD-1593652073210)(https://i.loli.net/2020/07/01/yqm7WM4tKQpVc6B.png#shadow)]
到这里实际上整个Seq2Seq(with Attention)就讲完了,但是其中还有一些细节,比方说,align()函数怎么设计?如何应用到Decoder中?下面一一解释
align()函数如何设计?
有两种方法,在最初的论文,即Bahdanau的论文中,他的设计方式如下图所示
现在比较主流的,同时也是Transformer结构使用的方法如下所示
如何应用到Decoder中?
废话不多说,直接见下图