文章目录
attention机制介绍(基于encoder-decoder框架)
直观对比
- 分心模型
此处公式不是很严谨,每个f进行的操作应该是各不相同的。或者可以理解为重载函数,因为输入的参数个数本就不同。例如当decoder为RNN时,若y1=f(C),则y2=f(g(C,y1)),其中g(C,y1)是当前时刻的隐藏层的值。
- 注意力模型
关键点:每一个输出的语义编码C都是不同的,每个输入对不同C的影响不同(i.e. 每个输入对不同的C有不同的权重)。
改进的依据(为什么能够做到改进)
以机器翻译为例,翻译’Tom chase Jerry’时,如果是分心模型,decoder使用的是同一个C,那么同一个输入对所有输出产生的影响是相同的。但是,输入’Tom’对输出’汤姆’的影响应该远大于其他输入,输入’Jerry’对输出’杰瑞’的影响应该远大于其他输入。因此,对不同输出,C应当不同。
具体解释(soft attention)
如何获得每个语义编码C
C1、C2和C3的运算方式也有多种,一种可能的方式是根据源语句子单词的注意力分配概率分布(权重)进行计算。
其中f2是encoder对输入单词进行的某种变换,例如使用RNN模型的得到的结果就是隐藏层的值。g就是为获得不同的向量C而对参数进行的某种计算,一般方式就是求和。
图形表示每个C的计算过程
如何获得每个输入的权重
以encoder和decoder都为RNN的模型为例。
注意:要么在encoder的最后有个结束,要么在decoder的开头有个开始。一定有个过渡的过程。
-
分心模型
-
加入注意力机制
(1)我自己的理解(前一个输出和前一个隐藏层共同决定当前隐藏层,当前隐藏层再和attention value产生中间向量,最后得到当前输出结果)
下图方式是使用Ht和hi计算得ati,原始方式是使用Ht-1和hi计算得ati。
F是进行的某种运算(某种函数),得到的是该输入在当前时刻对应的注意力分数。
第一步(输出Y1)
后续是相同操作
(2)另一种理解(前一个输出、前一个隐藏层和attention value共同决定当前隐藏层,并由隐藏层直接获得当前输出结果)
如何计算相似度
1)点乘:最简单的方法, s ( q , k ) = q T k s(q, k) = q^Tk s(q,k)=qTk
2)矩阵相乘: s ( q , k ) = q T W k s(q, k) = q^TWk s(q,k)=