李宏毅老师Transformer课程笔记 [Attention is all your need]

Transformer

李宏毅老师Transformer课程笔记 [Attention is all your need]_第1张图片

会议:NIPS 2017

论文:https://arxiv.org/pdf/1706.03762.pdf

李宏毅老师Transformer课程笔记 [Attention is all your need]_第2张图片

input是 x 1 ~ x 4 x_1~x_4 x1x4,经过embending之后得到 a 1 ~ a 4 a_1~a_4 a1a4,输入到self-attention中。对于每一个input,都乘上三个不同的权值矩阵,得到三个不同的向量 q , k , v q,k,v q,k,v

q q q:query (to match others) q i = W q a i q^i=W^qa^i qi=Wqai

k k k:key (to be matched) k i = W k a i k^i=W^ka^i ki=Wkai

v v v:value (information to be extracted) v i = W v a i v^i=W^va^i vi=Wvai

下面,用每个query q去对每个key k做attention:

李宏毅老师Transformer课程笔记 [Attention is all your need]_第3张图片

α 1 , i = q 1 ⋅ k i / d \alpha_{1,i}=q^1·k^i/\sqrt d α1,i=q1ki/d ,点积算出来可以代表向量的相似度,可以参照向量的夹角来理解,点积越大,越相似。 d d d q q q k k k 的维度,这一步除法的作用是做归一化(维度越高,上面的相乘项就越多),使梯度稳定。接着对得到的每一个 α 1 , i \alpha_{1,i} α1,i做softmax得到 α ^ 1 , i \hat\alpha_{1,i} α^1,i

李宏毅老师Transformer课程笔记 [Attention is all your need]_第4张图片

用得到的 α ^ 1 , i \hat\alpha_{1,i} α^1,i乘以value v v v,得到加权的每个输入向量的评分,相加之后得到最终结果,即 b 1 = ∑ i α ^ 1 , i v i b^1=\sum_i \hat\alpha_{1,i}v^i b1=iα^1,ivi。这样得到的结果,考虑到了每一个input,关注的是全局信息。

上述的几步运算可以用矩阵来实现并行计算,首先向量 q q q的计算:

李宏毅老师Transformer课程笔记 [Attention is all your need]_第5张图片

其次 α ^ 1 , i \hat\alpha_{1,i} α^1,i的计算:

李宏毅老师Transformer课程笔记 [Attention is all your need]_第6张图片

更进一步,任意 α ^ i , j \hat\alpha_{i,j} α^i,j的计算:

李宏毅老师Transformer课程笔记 [Attention is all your need]_第7张图片

最后得到output b b b

李宏毅老师Transformer课程笔记 [Attention is all your need]_第8张图片

综合来看,运算过程其实是这样的:

李宏毅老师Transformer课程笔记 [Attention is all your need]_第9张图片

Self-attention layer里面均为矩阵的乘法,可以轻易地使用GPU加速。

Multi-head self- attention是一种变形,以双头的为例,通过乘不同的权值矩阵可以得到不同的向量 q , k , v q,k,v q,k,v,得到 b i , 1 b^{i,1} bi,1 b i , 2 b^{i,2} bi,2之后,做一个cat,经过降维得到最终的结果。不同的head关注点可能不一样,比如有的head会关注全局的信息,有的head就会关注局部的信息,还有长期/短期。

在transformer中,需要加入一个位置信息一并作为输入,这样才能实现并行运算而结果不变,原作者提到用正余弦来表示相对位置,李宏毅老师从另外一个角度来理解,将位置信息作了一个one-hot的编码,然后cat到输入后面,共同乘上扩展后的权值矩阵,也能得到相加的结果。

李宏毅老师Transformer课程笔记 [Attention is all your need]_第10张图片

上面分析的是self-attention的计算过程,下面看transformer的架构:

李宏毅老师Transformer课程笔记 [Attention is all your need]_第11张图片

Input会通过一个embedding layer变成一个vector,这个vector会加上positional encoding进入encode block,这个block会重复n次。

Encoder里面的第一层是multi-head attention,这个attention layer就会经过上面的一大堆计算得到另外一个sequence。然后经过一个add & norm,add的意思是把multi-head attention的input和output加起来,norm的意思是把这个相加的结果做一个layer normalization,batch normalization是对一个batch里面不同data的同一个dimension做normalization,layer normalization不需要考虑batch,它是对一组数据的所有dimension做normalization。

李宏毅老师Transformer课程笔记 [Attention is all your need]_第12张图片

Decoder的input是前一个attention产生的output,同样经过embedding和加上positional encoding之后进入block,重复n次。第一层是masked multi-head attention,masked的意思是在做self-attention的时候,这个decoder之后attend到它已经产生出来的sequence。

你可能感兴趣的:(目标检测,人工智能,机器学习)