admin 管理员组文章数量: 1086948
[NIPS2017]Attention is all you need
原理源码讲解:
.html
这篇文章是火遍全宇宙,关于网上的解读也非常多,将自己看完后的一点小想法也总结一下。
看完一遍之后,有很多疑问,我是针对每个疑问都了解清楚后才算明白了这篇文章,可能写的不到位,只是总结下,下次忘记了便于翻查。
一:Q,K, V 到底是什么?
在传统的seq2seq框架下:
query: seq2seq模型中decode时隐层向量S t − 1 _{t-1} t−1, 记作q t − 1 _{t-1} t−1, Q就是多个query组成的矩阵Q
value: seq2seq模型中encode时的隐层向量h i _i i,记作v i _i i, V是输入序列中n个词的embedding矩阵
key: 对h i _i i做了一次先行映射得到的向量, 记作k i _i i,K同上
在本文的transformer下,结合文字和图:
(1) encoder self-attention
Q 就是input sequence( w 1 w_1 w1, w 2 w_2 w2, …, w i w_i wi, …, w n w_n wn)将其映射为word embedding后 ( x 1 x_1 x1, x 2 x_2 x2, …, x i x_i xi, …, x n x_n xn),Q= ( x 1 x_1 x1, x 2 x_2 x2, …, x i x_i xi, …, x n x_n xn),并且 K=V=Q
(2) decoder self-attention
当t=0时,decoder self-attention的Q是<bos>的embedding, 当t=j时,Q=(E < b o s > _{<bos>} <bos>, E y 1 _{y1} y1, …, E y j − 1 _{y_{j-1}} yj−1), 其中y j − 1 _{j-1} j−1是t=j-1时刻decoder的输出. K=V=Q
(3) encoder-decoder self-attention
K=V是encoder的输出,将encoder的输出传给decoder, 这一操作使得decoder可以获取输入 X X X序列的信息, 类似于传统seq2seq中的decoder端的attention. Q是decoder self-attention的输出.
二: 怎么理解self-attention, 怎么做self-attention,为什么用self-attention?
(1) 在传统的 seq2seq 中的 encoder 阶段,针对输入 X X X = ( x 1 x_1 x1, x 2 x_2 x2, …, x i x_i xi, …, x n x_n xn),经过RNN或LSTM变换后得到序列的隐层状态 H H H = ( h 1 h_1 h1, h 2 h_2 h2, …, h i h_i hi, …, h n h_n hn),但是此篇文章抛弃了 RNN,encoder 过程就没了 hidden states,那拿什么做 self-attention 呢?input 的 sequence 共有 n 个 word,将每一个 word 映射成 embedding, 就得到 n 个 embedding,可以用 embedding 代替 hidden state 做 self-attention 。所以 Q 就是一个n行 d k d_k dk列的矩阵,这个矩阵就是n个词的embedding,并且Q=K=V。那么为什么管Q 就是query呢?就是每次用一个词的embedding,去计算其与剩下的(n-1)个词的 embedding 的 match 程度(也就是 attention 的大小,这就是self-attention的意思了。
针对n个词,一共要做n轮这样的操作:
(2)首先将query 和每个key进行相似度计算得到权重,常用的相似度函数有点积拼接,感知机等
然后使用一个softmax函数对这些权重归一化,最后权重与相应的键值value进行加权求和得到attention后的context
(3) 句子中的每个词都要和该句子中的所有词进行attention计算,目的是学习句子内部的词以来关系,捕获句子的内部结构。
三:怎么理解 decoder self-attention中的Masked Multi-Head Attention
四:如何理解公式(1), 怎么理解缩放因子 1 d k \frac{1}{\sqrt{d_k}} dk 1?
公式(1)中的softmax( Q K T d k \frac{QK^T}{\sqrt{d_k}} dk QKT) 就是类似 a i j a_{ij} aij和 c i c_i ci的计算,Q和K就相当于 e i j e_{ij} eij计算中的 S i − 1 S_{i-1} Si−1和 h j h_j hj:
上图中的Q换成q, K换成k
参考文献:
源码解读:
=blogxgwz0
本文标签: NIPS2017Attention is all you need
版权声明:本文标题:[NIPS2017]Attention is all you need 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1687299593a86754.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论