《Attention is All You need》是NLP的经典论文之一。网上对其科普的文章很多了(参考本文reference),本文对其中对一些细节及其Tensorflow代码实现进行了讨论。
问题
Masked self-attention 什么意思?
Masked的意思就是只能在做self-attention的时候看不到这个词以后的单词。因为要用当前的输出来预测未来的词,如果能看到未来的词相当于系统作弊。
为什么使用Multi-Head?
不同的head可以学到不同的特征,
为什么使用残差?
使用残差以后,公式变成了:
这样在反向传播中,对x求偏导数对时候,就多了一个常数。解决了梯度消失的问题。
Layer normalization?
Positional Encoding有什么作用?
在单独做self-attention的时候,由于attention的计算公式没有考虑句子中的单词顺序,所以需要在单词的向量中加入位置信息的编码。本文采用位置编码和embedding相加的方式进行运算。
具体的思路就是使用以下公式:
其中pos表示在句子中的位置,i表示在词向量中的位置,是词向量的维度。
举个例子(出自Link):
假设我们的embedding是,那么我们获得的结果就是:
Self-attention计算为什么要除以?
self-attention计算公式如下:
除以的原因是防止在QK计算乘积的时候数值过大造成上溢出。我们都知道softmax函数在x越大的时候越接近与1。不同数之间计算的结果差异就会变小。除以可以帮助解决这个问题。
Self-attention和Context-attention的区别?
Attention和Self-attention 的区别?
- Attention计算的是输出序列隐藏状态和每个输入隐藏状态之间的关系
- Self-attention计算的是每个输入和输入序列之间的关系
Transormer 并行计算, 哪些步骤是可以并行的?
Encoder和Decoder的连接方式
Transormer优势?
- 传统的RNN每一步的输出都依赖前面的输出,难以并行;并且预处理的时候需要处理成相同长度的句子。虽然LSTM中引入了forget gate的概念,但是只能记住最近的几个输入,对于长句子效果不好。解决了LSTM和RNN的长距离依赖的问题。
- CNN可以并行计算,但是不能处理变长的句子问题。
- Transformer在计算self-attention的时候就是矩阵的相乘,可以进行并行。并且计算了单词之间的关系,更容易学习到句子中的依赖关系。
Transformer 缺点:
Transformer非常强大,但是还是有很多的缺点。
作者:l1n3x
链接:https://www.jianshu.com/p/bccb409a146f
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Reference:
-
最佳解释:
-[GIF 动画展示]
(http://jalammar.github.io/illustrated-transformer/)
网友评论