图解Attention

    技术2022-07-12  119

    关于Attention的公式推导,我在这篇文章讲过了,本篇文章主要以图示的方式进行讲解

    下图是一个Encoder架构, s 0 s_0 s0​从值上来说与 h m h_m hm​是相等的,只不过这里换了个名字

    首先我们需要将 s 0 s_0 s0​和所有的 h i   ( i = 1 , . . . , m ) h_i\ (i=1,...,m) hi​ (i=1,...,m)计算一个"相关性",比方说计算 s 0 s_0 s0​和 h 1 h_1 h1​之间的相关性计算得 α 1 = a l i g n ( h 1 , s 0 ) \alpha_1=align(h_1, s_0) α1​=align(h1​,s0​)

    计算得到m个相关性 α i \alpha_i αi​之后,将这些值与 h i h_i hi​进行加权平均,即 c 0 = ∑ i = 1 m α i h i = α 1 h 1 + ⋅ ⋅ ⋅ α m h m c_0=\sum_{i=1}^m \alpha_i h_i=\alpha_1h_1+···\alpha_mh_m c0​=i=1∑m​αi​hi​=α1​h1​+⋅⋅⋅αm​hm​ 我们可以直观的感受一下这样做有什么作用,对于那些值比较大的 α k \alpha_k αk​,最终 c 0 c_0 c0​中也会有一大部分来自于 h k h_k hk​。 c 0 c_0 c0​实际上考虑到了所有时刻的 h h h,只不过对于某些时刻可能关注的更多,而某些时刻关注的更少,这就是注意力机制

    之后将 s 0 , c 0 , x 1 ′ s_0,c_0,x'_1 s0​,c0​,x1′​作为 t = 0 t=0 t=0时刻Decoder 的输入,计算得到 s 1 s_1 s1​,然后再计算 s 1 s_1 s1​与所有 h i   ( i = 1 , . . . , m ) h_i\ (i=1,...,m) hi​ (i=1,...,m)之间新的相关性 α i \alpha_i αi​

    同样的,将新计算得到的 α i \alpha_i αi​与 h i h_i hi​做加权平均,得到新的context vector c 1 c_1 c1​

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kXBKjnuD-1593652073210)(https://i.loli.net/2020/07/01/yqm7WM4tKQpVc6B.png#shadow)]

    到这里实际上整个Seq2Seq(with Attention)就讲完了,但是其中还有一些细节,比方说,align()函数怎么设计? c i c_i ci​如何应用到Decoder中?下面一一解释

    align()函数如何设计?

    有两种方法,在最初的论文,即Bahdanau的论文中,他的设计方式如下图所示

    现在比较主流的,同时也是Transformer结构使用的方法如下所示

    c i c_i ci​如何应用到Decoder中?

    废话不多说,直接见下图

    Processed: 0.009, SQL: 9