图解Attention

    技术2022-07-12  82

    关于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=1mαihi=α1h1+αmhm 我们可以直观的感受一下这样做有什么作用,对于那些值比较大的 α 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.012, SQL: 9