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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 本文主要总结了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越多、模型越深,残差可以缓解梯度消失、保证模型可以做得更深,避免出现模型难以训练的情况。

相关文章
|
30天前
|
机器学习/深度学习 存储 自然语言处理
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
深度学习入门:循环神经网络------RNN概述,词嵌入层,循环网络层及案例实践!(万字详解!)
|
6月前
|
机器学习/深度学习 数据采集 算法
【深度学习基础】反向传播BP算法原理详解及实战演示(附源码)
【深度学习基础】反向传播BP算法原理详解及实战演示(附源码)
177 0
|
6月前
|
自然语言处理 Python
BERT模型基本理念、工作原理、配置讲解(图文解释)
BERT模型基本理念、工作原理、配置讲解(图文解释)
749 0
|
机器学习/深度学习 Web App开发 数据挖掘
经典神经网络论文超详细解读(七)——SENet(注意力机制)学习笔记(翻译+精读+代码复现)
经典神经网络论文超详细解读(七)——SENet(注意力机制)学习笔记(翻译+精读+代码复现)
2411 1
经典神经网络论文超详细解读(七)——SENet(注意力机制)学习笔记(翻译+精读+代码复现)
|
机器学习/深度学习 自然语言处理 计算机视觉
图解BERT:通俗的解释BERT是如何工作的
图解BERT:通俗的解释BERT是如何工作的
488 0
图解BERT:通俗的解释BERT是如何工作的
|
机器学习/深度学习 自然语言处理 并行计算
小白总结Transformer模型要点(一)(上)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(一)(上)
|
机器学习/深度学习 自然语言处理
小白总结Transformer模型要点(二)(上)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(二)(上)
|
机器学习/深度学习 自然语言处理 语音技术
小白总结Transformer模型要点(二)(下)
本文主要总结了Transformer模型的要点,包含模型架构各部分组成和原理、常见问题汇总、模型具体实现和相关拓展学习。
小白总结Transformer模型要点(二)(下)
|
自然语言处理
关于为什么有了通用BERT,却还需要特定领域BERT?-对此问题做出回答的相关理论和文章(如有)(持续更新ing...)
关于为什么有了通用BERT,却还需要特定领域BERT?-对此问题做出回答的相关理论和文章(如有)(持续更新ing...)
|
机器学习/深度学习 数据挖掘
无监督学习-自编码器-补充|深度学习(李宏毅)(二十)
无监督学习-自编码器-补充|深度学习(李宏毅)(二十)
324 0
无监督学习-自编码器-补充|深度学习(李宏毅)(二十)