本文为转载,原文链接: https://wmathor.com/index.php/archives/1450/
关于Attention的公式推导,我在这篇文章讲过了,本篇文章主要以图示的方式进行讲解
首先我们需要将和所有的
计算一个"相关性",比方说计算
和
之间的相关性计算得

计算得到m个相关性之后,将这些值与
进行加权平均,即
我们可以直观的感受一下这样做有什么作用,对于那些值比较大的 ,最终
中也会有一大部分来自于
。
实际上考虑到了所有时刻的
,只不过对于某些时刻可能关注的更多,而某些时刻关注的更少,这就是注意力机制。

之后将作为
时刻Decoder的输入,计算得到
,然后再计算
与所有
之间新的相关性
。

同样的,将新计算得到的 与
做加权平均,得到新的 context vector
。

重复上述步骤,直到 Decoder 结束

到这里实际上整个 Seq2Seq (with Attention) 就讲完了,但是其中还有一些细节,比方说,align()
函数怎么设计?如何应用到Decoder中?下面一一解释
(1) align()
函数如何设计?
有两种方法。
- 在最初的论文,即 Bahdanau 的论文中,
的计算公式为:
其中、
、
和编码器与解码其两个循环网络中的各个权重与偏移项以及嵌入层参数等都是需要同时学习的模型参数。
如下图所示

-
现在比较主流的,同时也是 Transformer 结构使用的方法(构造Q、K,利用点积)如下所示:
(2)
如何应用到Decoder中?
见下图:

That is :
网友评论