文章目录
- 1.动物的视觉注意力
- 二、快速理解Attention思想
- 三、从Encoder-Decoder在框架中理解为什么Attention机制
- 四、Attention思想步骤
- 五、Self-Attention
-
- 5.1 Self-Attention的计算步骤
- 5.2 进一步了解代码Q、K、V
- 5.3 再举一个理解的例子
- 六、为什么缩放点积除以根号dk
-
- 6.1 为什么更大的输入会使softmax梯度变小了?
- 6.2 维度与点积大小的关系是什么,为什么要用维度的根号来缩小?
- 七、Multi-Head Attention
- 八、Attention手稿
- References
1.动物的视觉注意力
- 在复杂的环境中,动物需要有效地注意值得注意的点。
- 心理学框架:人类根据随机线索
(主观)
和不随意(客观)
线索选择注意点。
例如,在下面的例子中,我们第一眼就会看到一个红色的杯子,它比其他物品颜色更鲜艳,属于不随意的线索。假设拿起杯子喝酒,然后想读书,这是随机的线索(跟随意志,有意识:有意识地关注你想要的)
。
也就是说,人类视野开阔,但焦点只有一个小范围或一个点,这就是所谓的注意力Attention
,然而,人眼不可能一次全面地看待一切。他们总是通过一些刻意或不刻意的线索,然后通过注意力接受视野。另一个例子是,当你看到这句话时,你的注意力在这里,而不是在其他地方。
二、快速理解Attention思想
深度学习中的注意力和人类的注意力机制有关,上学的时候可能会经常听到老师说:”低着头干嘛,看黑板,听讲“,老师会什么要这么强调听讲呢?由于人类的注意力资源有限,我们在目标区域投入更多的注意力资源,以获得更多的信息,抑制其他无用的信息。这种机制可以让我们从大量信息中快速筛选出有价值的信息,而课堂上老师讲的做题技巧和考点对我们来说是更有价值的信息,如果我们把注意力资源全都投入在课本上,就会忽略掉老师讲的重点。
另一个例子是,当面对食物时,我们会首先识别它的形状和颜色,然后我们可能会闻到它,然后品尝它,然后确认它是一盘小酥肉。所以在认出小酥肉的过程中,我们在每个阶段都关注不同的内容。在令Attention在崛起的机器翻译场景中也是如此。例如,当翻译我爱你中国时,我们会特别注意一些人,比如China”。我们希望机器也能学会这种处理信息的方式,所以有一个注意机制Attention
,可以生动地理解,注意力可以从复杂的输入信息中找到当前输出最重要的部分。
- 因此,注意力的核心目标是
- 本质思想是从大量信息中选择选择性筛选少量重要信息和关注这些重要信息,忽略大多数不重要的信息。关注的过程反映在权重系数的计算上,权重越大,就越关注相应的信息值。即权重代表信息。 ,和它对应的信息。
三、从Encoder-Decoder在框架中理解为什么Attention机制
上图中的框架没有反映注意力机制,因此可以将其视为分心模型。为什么它不集中注意力?Decoder每个单词的生成过程的一部分: Y 1 = f ( c ) Y 2 = f ( c , Y 1 ) Y 3 = f ( c , Y 1 , Y 2 ) Y_1 = f(c) \\ Y_2 = f(c, Y_1) \\ Y_3 = f(c, Y_1, Y_2) Y1=f(c)Y2=/span>f(c,Y1)Y3=f(c,Y1,Y2) 其中f是解码器的非线性变换函数,从这里我们可以看出,在生成目标句子的单词时,无论生成那个单词,它们使用的输入句子的语义编码c都是一样的,没有任何区别。
而语义编码c是由句子的每个单词经过Encoder编码产生的,这意味着不论是生成哪个单词,句子中任意单词对某个目标单词y的影响力都是相同的,就像是人类的眼中没有注意力焦点是一样的。
比如在机器翻译场景中,输入的英文句子为:Tom chase Jerry,Encoder-Decoder框架逐步生成中文单词:”汤姆“、”追逐“、”杰瑞“。在翻译”杰瑞“这个单词的时候,分心模型里面每个英文单词对于翻译目标单词”杰瑞“的,这很显然是不合道理的。显然”Jerry“对于翻译成”杰瑞“更为重要。
那么它会存在什么问题呢?类似RNN无法捕捉长序列的道理,没有引入Attention机制在输入句子较短时影响不大,但是如果输入句子比较长,此时所有语义通过一个中间语义向量表示,单词自身的信息避免不了会消失,也就是会丢失很多细节信息,这也是为何引入Attention机制的原因。
例如上面的例子,如果引入Attention的话,在翻译”杰瑞“的时候,会体现出英文单词对于翻译当前中文单词的不同程度影响,比如给出类似下面的概率分布: ( T o m , 0.3 ) ( C h a s e , 0.2 ) ( J e r r y , 0.5 ) (Tom, 0.3) \\ (Chase, 0.2) \\ (Jerry, 0.5) (Tom,0.3)(Chase,0.2)(Jerry,0.5) 每个英文单词的概率代表了翻译当前单词”杰瑞“时,注意力分配给不同英文单词的,这对于正确翻译目标单词是有着积极作用的。
目标句子中的每个单词都应该学会其对应的源语句子中单词的注意力分配概率信息。这意味着在生成每个单词yi的时候,原先都是相同的中间语义表示C会被替换成根据当前生成单词而不断变化的Ci。理解Attention模型的关键就是这里,即由。增加了注意力模型的Encoder-Decoder框架理解起来如下图所示:
即生成目标句子单词的过程成了下面的形式: Y 1 = f ( C 1 ) Y 2 = f ( C 2 , Y 1 ) Y 3 = f ( C 3 , Y 1 , Y 2 ) Y_1 = f(C_1) \\ Y_2 = f(C_2, Y_1) \\ Y_3 = f(C_3, Y_1, Y_2) Y1=f(C1)Y2=f(C2,Y1)Y3=f(C3,Y1,Y2) 而每个Ci可能对应着不同的源语句子单词的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下: C 汤 姆 = g ( 0.6 ∗ f 2 ( T o m ) , 0.2 ∗ f 2 ( C h a s e ) , 0.2 ∗ f 2 ( J e r r y ) ) C 追 逐 = g ( 0.2 ∗ f 2 ( T o m ) , 0.7 ∗ f 2 ( C h a s e ) , 0.1 ∗ f 2 ( J e r r y ) ) C 杰 瑞 = g ( 0.3 ∗ f 2 ( T o m ) , 0.2 ∗ f 2 ( C h a s e ) , 0.5 ∗ f 2 ( J e r r y ) ) C_{汤姆} = g(0.6 * f_2(Tom), 0.2*f_2(Chase), 0.2*f_2(Jerry)) \\ C_{追逐} = g(0.2 * f_2(Tom), 0.7*f_2(Chase), 0.1*f_2(Jerry)) \\ C_{杰瑞} = g(0.3 * f_2(Tom), 0.2*f_2(Chase), 0.5*f_2(Jerry)) C汤姆=g(0.6∗f2(Tom),0.2∗f2(Chase),0.2∗f2(Jerry))C追逐=g(0.2∗f2(Tom),0.7∗f2(Chase),0.1∗f2(Jerry))C杰瑞=g(0.3∗f2(Tom),0.2∗f2(Chase),0.5∗f2(Jerry)) 其中,f2函数代表Encoder对输入英文单词的某种变换函数,比如如果Encoder是用的RNN模型的话,这个f2函数的结果往往是某个时刻输入xi后隐层节点的状态值;g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般的做法中,g函数就是对构成元素,即下列公式: C i = ∑ j = 1 L x a i j h j C_i = \sum_{j=1}^{L_x} a_{ij} h_j Ci=j=1∑Lxaijhj 其中,Lx代表输入句子Source的长度,aij代表在Target输出第i个单词时Source输入句子中第j个单词的注意力分配系数,而hj则是Source输入句子中第j个单词的语义编码。假设下标i就是上面例子所说的“ 汤姆” ,那么Lx就是3,h1=f(“Tom”),h2=f(“Chase”),h3=f(“Jerry”)分别是输入句子每个单词的语义编码,对应的注意力模型权值则分别是0.6,0.2,0.2,所以g函数本质上就是个加权求和函数。如果形象表示的话,翻译中文单词“汤姆”的时候,公式对应的中间语义表示Ci的形成过程类似下图。
四、Attention思想步骤
一个典型的Attention思想包括三部分:Qquery
、Kkey
、Vvalue
。
- Q是query,是输入的信息;key和value成组出现,通常是原始文本等已有的信息;
- 通过计算Q与K之间的相关性a,得出不同的K对输出的重要程度;
- 再与对应的v进行相乘求和,就得到了Q的输出;
来看下面更详细一点的图:
- step1,计算Q对每个K的相关性
相似性
,即函数 F ( Q , K ) F(Q,K) F(Q,K);- 这里计算相关性的方式有很多种,常见方法比如有:
- 求两者的【向量点击】, S i m i l a r i t y ( Q , K i ) = Q ⋅ K i Similarity(Q,K_i) = Q \cdot K_i Similarity(Q,Ki)=Q⋅Ki。
- 求两者的向量【余弦相似度】, S i m i l a r i t y ( Q , K i ) = Q ⋅ K i ∣ ∣ Q ∣ ∣ ⋅ ∣ ∣ K i ∣ ∣ Similarity(Q,K_i) = \frac{Q \cdot K_i}{||Q|| \cdot ||K_i||} Similarity(Q,Ki)=∣∣Q∣∣⋅∣∣Ki∣∣Q⋅Ki。
- 引入一个额外的神经网络来求值, S i m i l a r i t y ( Q , K i ) = M L P ( Q , K i ) Similarity(Q,K_i) = MLP(Q, K_i) Similarity(Q,Ki)=MLP(Q,Ki)。
- step2,对step1的注意力的分进行归一化;
- softmax的好处首先可以将原始计算分值整理成所有元素权重之和为1的概率分布;
- 其次是可以通过softmax的内在机制更加突出重要元素的权重;
- a i a_i ai即为value_i对应的权重系数;
- step3,根据权重系数对V进行加权求和,即可求出针对Query的Attention数值。
- A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 L x a i ⋅ V a l u e i Attention(Query, Source) = \sum_{i=1}^{L_x} a_i \cdot Value_i Attention(Query,Source)=∑i=1Lxai⋅Valuei
值得强调的一点是:K和V等价,它俩是一个东西。
五、Self-Attention
self-attention,顾名思义它只,比如在一般任务的Encoder-Decoder框架中,输入Source和输出Target内容是不一样的,比如对于英-中机器翻译来说,Source是英文句子,Target是对应的翻译出的中文句子,Attention机制发生在Target的元素Query和Source中的所有元素之间。而Self Attention指的不是Target和Source之间的Attention机制,而是,也可以理解为Target=Source这种特殊情况下的注意力计算机制。
5.1 Self-Attention的计算步骤
根据attention is all you need
原文给出的缩放点击注意力公式来看self-attention的计算过程:
在self-attention中,每个单词有3个不同的向量,即Q、K、V。它们是通过X乘以三个不同的权值矩阵 W Q 、 W K 、 W V W^Q、W^K、W^V WQ、WK、WV得到的