小白总结Transformer模型要点(一)(下)

本文涉及的产品
模型训练 PAI-DLC,5000CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。

3.多头注意力机制

2345_image_file_copy_164.jpg

Q、K、V是相对矩阵,softmax得到了相似度,是一个向量,最后乘V得到加权和向量。

2345_image_file_copy_165.jpg

2345_image_file_copy_166.jpg

获取Q、K、V的方法:

2345_image_file_copy_167.jpg

在使用W参数时,每一个Head有一套W参数,所有的输入都是用这套参数,多个Head就有多套W参数,一般就是8套不同的W参数;多头使得建模能力更强,表征空间更丰富;多头可以类比于CNN中的多通道卷积,来探索不同空间中的信息

2345_image_file_copy_168.jpg之所以在Q*K时要除以dk的平方根,是为了防止Q*K很大时,softmax反向传播时梯度很小,容易造成梯度消失的情况,之所以除的值是dk的平方根,是为了保证方差为1。

计算相似度有3种方式:

  • 点乘
    得到的是一个向量在另一个向量上的长度,是一个标量,反映两个向量之间的相似度,两个向量越相似,点乘的结果也越大
  • MLP(多层网络)
  • cosine相似性

实际操作中通过矩阵(多个单词的embedding)来实现并行:

2345_image_file_copy_169.jpg

同时,在编码器端,Q、K、V是相同的,都是输入经过Embedding和位置编码得到的输出,即都是在EncoderLayer的输入;会使用线性Linear模型做映射,得到参数矩阵Wq、Wk、Wv。

在实际计算Q*K时,是相当于计算了一个句子中各个词之间的关联度,如下:

2345_image_file_copy_170.jpg

实际上,Q和K是两个相同的矩阵,左边极为Q与K的转置相乘的结果,可以看到,在计算一个词与句子中其他词的关联度时,也将Pad考虑了进来,但是实际上在进行softmax时不应该考虑Pad,此时就可以将Pad位置置为1,其他正常位置为0,以后在计算时就可以排除值为1的位置,消除pad带来的影响,具体就是使用了masked_fill_(mask, value)方法来实现用value填充tensor中与mask中值为1的位置相对应的元素,具体是将mask中为1的位置全部置为负无穷小、消除softmax时对其他词的影响。

2345_image_file_copy_172.jpg

这样效果好的原因是相当于将原始信息达到了多个空间,保证了Transformer可以注意到不同子空间的信息,捕捉到更多的特征信息。同时,不同的Head使用不同的参数,但是输入(Q、K、V)都是Embedding和PE的和,最终每个Head单独计算得到一个Attention。

最后合并多个Head的输出(attention向量),并进入一个FNN得到最终的向量:

2345_image_file_copy_174.jpg

4.残差连接

2345_image_file_copy_175.jpg残差示意图如下:

2345_image_file_copy_176.jpg

链式求导如下:

2345_image_file_copy_177.jpg

梯度消失的原因一般是连乘造成的,但是从图中可以看到,因为前面加了1,即使连乘的数量再多、变为趋近于0,确保了红框中的值≥1,从而保证了梯度不会变为0,缓解了梯度消失的出发生,这也是在NLP任务中用到残差的网络可以使得网络很深的原因。

再想到RNN,一般很少有多个RNN叠在一起,一般就是单层RNN,或者双向LSTM,再复杂的就是ELMO(双层双向LSTM),训练已经很慢了,如果单纯用RNN想把模型做深难度很大。GNMT(谷歌神经机器翻译)更深,用了很多技巧加速训练。此时就可以用到残差,因为其可以缓解梯度消失,可以将模型做得更深。

阿里的RE2文本匹配模型使用了N-block的循环,用到了残差网络,因为block越多、模型越深,残差可以缓解梯度消失、保证模型可以做得更深,避免出现模型难以训练的情况。

相关文章
|
机器学习/深度学习 编解码 算法
DL之DeepLabv2:DeepLab v2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之DeepLabv2:DeepLab v2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之DeepLabv2:DeepLab v2算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
|
机器学习/深度学习 自然语言处理 计算机视觉
图解BERT:通俗的解释BERT是如何工作的
图解BERT:通俗的解释BERT是如何工作的
507 0
图解BERT:通俗的解释BERT是如何工作的
|
机器学习/深度学习 自然语言处理 并行计算
小白总结Transformer模型要点(一)(上)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(一)(上)
|
机器学习/深度学习 自然语言处理 语音技术
小白总结Transformer模型要点(二)(下)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(二)(下)
|
机器学习/深度学习 自然语言处理
小白总结Transformer模型要点(二)(上)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(二)(上)
|
机器学习/深度学习 人工智能 并行计算
深度学习模型训练推理——基础环境搭建推荐博文查阅顺序【❤️基础安装—认真帮大家整理了❤️】
博主这里梳理了自己过去两年,认真撰写的一些基础知识方面的干货博文,希望能够有效帮助到更多刚刚投身于ML、DL 领域不久的小伙伴们
382 0
深度学习模型训练推理——基础环境搭建推荐博文查阅顺序【❤️基础安装—认真帮大家整理了❤️】
|
算法 数据挖掘 C++
DL之GCN:GCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之GCN:GCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之GCN:GCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
|
机器学习/深度学习 算法 数据挖掘
DL之ShuffleNet:ShuffleNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之ShuffleNet:ShuffleNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之ShuffleNet:ShuffleNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
|
机器学习/深度学习 算法 数据可视化
DL之FCN:FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之FCN:FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之FCN:FCN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
|
机器学习/深度学习 算法 数据挖掘
DL之ResNet:ResNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之ResNet:ResNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之ResNet:ResNet算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

热门文章

最新文章