Transformer
是什么:仍是机器翻译模型,基本构成是Seq2Seq模型,但在各个方面都取得很好的效果。
传统RNN网络问题:
1. 当前X1需要用到前一个X0的隐藏特征,经过有限的1、2、3层网络得到X1的输出和隐藏特征,而X2只有得到X1的隐藏特征才能计算,所以过程是线性的,不能并行计算。
2. 在RNN中每个词是同等重要的,不能学到哪些词的重要性,需要利用Self Attension机制学习哪些词的重要性。
3. 传统词向量如Word2Vec学习完成后已经固定,就是固定场景,若场景发生变化,相同词表达不同的意思,固定的词向量已不适合。
整体架构:
1. Attension: 关注输入数据有价值的东西。
词It将上下文信息整体地加入到It的编码中,It不是考虑之前的Because而是整体都要考虑进去。从下面热力图中可以看出the animal, too相关性比较大。
2. Self Attension如何计算:
如何知道与其他词的相关程度?需要计算与当前词的权重,比如Animal权重肯定大,was权重小。
1)第一步先将每个词向量化(embedding)X1向量代表Thinking, X2代表Machines
2)构建三个权重矩阵、和,通过X矩阵分别与、、内积,得到Q、K和V矩阵:Q是包含我们得到的X1的q1、X2的q2辅助查询向量、K是包含我们得到的X1的k1、X2的k2辅助被查询向量、V是包含我们得到的X1的v1、X2的v2辅助实际特征信息。通过q1与k1内积考察q1与k1的匹配能力、通过q1与k2内积q1与k2的匹配能力。
3)通过softmax得到各个q向量与k向量内积的归一化值,因为维度相同,所以乘以V矩阵后,得到X1、X2的Self Attension值。
3. Multi-Head Attension多头注意力机制:
在上述Self Attension中只是得到X1("Thinking")的一个注意力 z1=0.88v1 + 0.12v2,那么能不能如CNN中,可以有多个卷积核,得到对应的多个特征图,从而可以得到图像的不同特征表达,Multi-Head Attension可以实现类似的功能,得到自然语言的多种特征表达:多种QKV就可以得到多种注意力 z1,z2,...。
接着拼接特征表达z1, z2,..。
最后接一个全连接层实现降维。
4. 堆叠多层:
X通过一个Multi-Head Attension得到一个向量,只有一个这样的过程是远远不够的,可以重复多次这样的过程,以此达到最好的performance。
5. 词的位置编码:每个词Self Attension关注的是整个序列的加权,所以词出现在什么位置并不会对结果产生影响,相当于放在哪里都无所谓,但是语句是有前后顺序的,可以额外加一个位置编码(例如余弦或正弦的周期信号),这样模型对位置有额外的认识。
6. Lay Normalization: BN:按照Batch维度(不同样本,特征相同),均值为0,标准差为1的Normalization; 而LN: 样本维度,让自己均值为0,标准差为1的Normalization。目的:更快更稳定。
7. Add残差连接:LN(X+Z), 做一个同等映射identity mapping, 让机器学得:F(x)?=H(x)? - x,原因:堆叠多层,不能保证效果就好,两条路,加一个同等映射保证至少不比原来差。
8. Decoder:?
与Encoder比较,Attension计算不同,加入了Mask.
Encoder-Decoder Attension:
Decoder不是仅仅利用自己的Self Attension机制预测下一个,还需要考虑编码器出来的信息。输入:Encoder的K, V和Decoder的Q。
9. Mask机制:
Decoder在计算Self Attension的时候,不能像Encoder一样整条句子都知道,所有词的关联度。而是需要盖住余下的词,只有之前预测过的词参与QKV矩阵相乘.
10. 最后使用softmax和cross-entropy损失函数得到输出分类结果。