NLP从入门到放弃的transformer 的笔记总结
目录
encoders包括输入部分、多头注意力机制、残差和LN、前馈神经网络
必看:整个流程训练和测试是有什么不同?
机器翻译上
我爱你作为输入,经过transformer模型,输出l love you
左半部分是encoders(里面有N个小encoder) 右半部分是decoders (里面有N个小encoder)
输入:我爱你 经过encoders 将输出的结果作为decoders输入 ,经过decoders得到输出l love you
1、位置编码
2、多头注意力机制
3、残差和layerNorm
4、前馈神经网络
5、TRM面试讲解
encoders包括输入部分、多头注意力机制、残差和LN、前馈神经网络
1)输入部分包括Embedding和位置编码
Embedding:随机初始化或者word2vec
对于【爱】->embedding->512维的向量【0.1,0.1,0.2,.....0.02】
对于【爱】->位置编码->512维的向量【sin,cos,sin.....cos】
两者相加得到新的512维的向量
(1)embedding我的其他文章讲过
(2)位置编码:公式
2)注意力机制
(1)公式:QKV矩阵
Attention(Q,K,V)=softmax
Q:查询的部分(例如:爱)
K:被查询的部分(K1,K2,K3,K4)(例如:我不爱你)
V:表示K对应的权重
Q点乘表示Q、K的相似度 。将Q和K1,K2,K3,K4点乘就分别表示Q和K1,K2,K3,K4的相似度 ,哪个结果大,哪个相似度高,哪个就越关注(例如点乘结果:0.1,0.1,0.7,0.1)
单纯相乘值很大,当进入softmax后,会趋向两端,不容易做梯度下降
所以要除法运算,选择除以根号d,为了控制方差为一。再将相似度点乘V权重。
(2)transformer中的注意力
经过 得到
input :我 爱 <embedding> 词向量:x1,x2
q1=x1* q2=x2*
k1=x1* k2=x2*
v1=x1* v2=x2*
W权重只有这三个且已知
(3)多头注意力 transformer中是8个头
8个头用8个
3)残差和LayerNorm
(1)残差 (下图 右侧):避免梯度消失
(2)LN
BN 对不同样本的同一特征维度处理
优点:可以解决内部协变量偏移
缓解了梯度饱和问题(如果使用sigmoid激活函数的话),加快收敛
缺点:batch_size比较小的时候, 小样本去模拟全部效果差
rnn中效果差,rnn是动态的,有时不能求样本中的均值方差
LN对一个样本的所i有维度做处理
左侧是BN 右侧是LN
4)前馈神经网络
两个全连接层
必看:整个流程训练和测试是有什么不同?
Decoder
为什么 Decoder 需要做 Mask
-
训练阶段:我们知道 “je suis etudiant” 的翻译结果为 “I am a student”,我们把 “I am a student” 的 Embedding 输入到 Decoders 里面,翻译第一个词 “I” 时
- 如果对 “I am a student” attention 计算不做 mask,“am,a,student” 对 “I” 的翻译将会有一定的贡献
- 如果对 “I am a student” attention 计算做 mask,“am,a,student” 对 “I” 的翻译将没有贡献
-
测试阶段:我们不知道 “我爱中国” 的翻译结果为 “I love China”,我们只能随机初始化一个 Embedding 输入到 Decoders 里面,翻译第一个词 “I” 时:
- 无论是否做 mask,“love,China” 对 “I” 的翻译都不会产生贡献
- 但是翻译了第一个词 “I” 后,随机初始化的 Embedding 有了 “I” 的 Embedding,也就是说在翻译第二词 “love” 的时候,“I” 的 Embedding 将有一定的贡献,但是 “China” 对 “love” 的翻译毫无贡献,随之翻译的进行,已经翻译的结果将会对下一个要翻译的词都会有一定的贡献,这就和做了 mask 的训练阶段做到了一种匹配
总结下就是:Decoder 做 Mask,是为了让训练阶段和测试阶段行为一致,不会出现间隙,避免过拟合。
假设训练模型的某一个阶段,我们来结合 Transformer 的完整框架描述下这个动态的流程图:
- 输入 “je suis etudiant” 到 Encoders,然后得到一个 KeKe、VeVe 矩阵;
- 输入 “I am a student” 到 Decoders ,首先通过 Masked Multi-head Attention 层得到 “I am a student” 的 attention 值 QdQd,然后用 attention 值 QdQd 和 Encoders 的输出 KeKe、VeVe 矩阵进行 attention 计算,得到第 1 个输出 “I”;
- 输入 “I am a student” 到 Decoders ,首先通过 Masked Multi-head Attention 层得到 “I am a student” 的 attention 值 QdQd,然后用 attention 值 QdQd 和 Encoders 的输出 KeKe、VeVe 矩阵进行 attention 计算,得到第 2 个输出 “am”;
- ……
- 参考预训练语言模型的前世今生 - 从Word Embedding到BERT - 二十三岁的有德