1. 简介
Transformer模型由Google提出,发表在NIPS 2017会议上。是一种完全基于注意力机制的模型,摒弃了RNN和CNN结构。并且很容易并行,训练速度较快,在WMT14 英语- 德语、英语 - 法语翻译任务上获得了SOTA的效果。
- RNN缺点: 很难并行化,每一个时刻的输出,需要依赖上一个时刻的结果;
- CNN优缺点: 很容易实现并行化;想要获取更多的上下文信息,需要叠多层卷积网络;
2. 模型结构
- Transformer模型由 Encoder 和 Decoder 组成,并且分别堆叠了N层;注意:输入经过N层 Encoder 之后输入到每一层 Decoder 计算Attention;
- Encoder 包括两个子层:(1)Self-Attention子层;(2)FNN子层;
- Decoder 包括三个子层:(1)Mask Self-Attention子层;(2)Self-Attention子层;(3)FNN子层;
- 每个子层后面,都加上了 残差连接(residual connection) 和 层正则化(layer normalization),则最终的输出为:
LayerNorm(x + Sublayer(x))
2.1 Self Attention
-
Transformer在RNN模型的基础上进行改进,使得计算每一个输出,可以并行;
使用Self-Attention优势.png
2.1.1 Scaled dot-product attention
- Attention机制的本质是:给定一个
query
,和一系列<key, value>
对,需要计算得到一个输出得分;注意:query, key, value
都是向量;query, key
维数为,value
的维数为; - Scaled dot-product attention计算公式如下:
上式中是矩阵;
注意:除以,是为了防止变化很大的时候,最终的计算结果变化较大;
例子:计算和其他词的Attention,得到输出
1. 每个输入,计算得到
image.png2. 做内积
image.png3. 计算softmax值,得到注意力权重
image.png4. 注意力权重和,加权平均得到Attention输出
image.png
得到输出,可并行计算:
2.1.2 Mask说明
- Decoder第一个子层使用了Mask self-attention子层:主要是为了防止标签泄露,即在 时刻不能看到 时刻之后的信息;因为在infer阶段,只能看到已经生成的序列;
- 一般使用一个上三角矩阵实现:即在计算softmax之前,将的计算结果赋值为,这样经过softmax之后计算得到的注意力权重趋于0;
image.png
image.png
2.2 Multi-Head Attention
- 每一个头都是一个Scaled dot-product attention的计算;
- 最终多个头的输出concat在一起,再经过一个linear层得到 Multi-Head Attention 输出;
2.3 Positional Encoding
- transformer模型完全基于注意力机制,没有考虑序列顺序信息,因此引入的positional encoding;
- 在得到每个词的Embedding之后,与位置编码向量相加;并且每个词的位置编码向量是固定的;
- 位置编码向量,具体计算公式如下:
上式中,代表词向量维度;代表单词的位置,代表第几维;
参考资料
- Transformer 原始论文《Attention is all you need》
https://arxiv.org/abs/1706.03762 - Transformer,台湾大学 - 李宏毅
视频:https://www.youtube.com/watch?v=ugWDIIOHtPA&list=PLJV_el3uVTsOK_ZK5L0Iv_EQoL1JefRL4&index=58
PPT:http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2019/Lecture/Transformer%20(v5).pdf - NLP中的Mask全解
https://mp.weixin.qq.com/s/0hUNG6tC-hlfyTJtuzwU5w - The Illustrated Transformer
http://jalammar.github.io/illustrated-transformer/ - 代码实现:https://github.com/harvardnlp/annotated-transformer
网友评论