写点什么

人工智能自然语言处理之 Transformer 阐述

作者:XiaoChao_AI
  • 2022-11-14
    浙江
  • 本文字数:2137 字

    阅读完需:约 7 分钟

人工智能自然语言处理之Transformer阐述

Encoder 输入单词首先编码成词向量 a(Input Embedding),然后直接和该单词在语句中的位置编码向量 b(Positional Encoding)相加得到 c。c 向量输入到一个 Muti-Head Attention + Add & Norm + Feed Forward + Add & Norm 的 Block 中(对应 Figure 1 中 Nx 中包含的组件)得到向量 d,d 再输入到 Nx Block 中。论文中,N 的值为 6,表明重复次数为 6,最终输出向量 e。Muti-Head Attention 准确来说,Transformer 中 Attention 分为 Self Attention 和 Context Attention。在 Encoder 中为 Self Attention,在 Decoder 中为 Self Attention 和 Context Attention。其实 Self Attention 就是 Context Attention 的一种特例,当 Source = Target 时,Context Attention 即变为 Self Attention。在机器翻译中,Encoder 中的 Self Attention 机制使训练句子内单词间产生联系,Decoder 中的 Context Attention 使 Target 单词和所有 Source 单词产生联系。针对 Encoder 中的每一个单词,它都会输出 Encoder 中其他单词对它的 Attention 值,这个 Attention 值是通过迭代学习出来的。Query 向量、Key 向量、Value 向量是通过该单词的词向量分别和 WQ 矩阵、WK 矩阵、WV 矩阵相乘得来的。便于理解可以认为这些矩阵类似于卷积核的作用,它们的权重随机初始,它们的最终权重是通过不断迭代学习出来的。那么在推理的时候,一个单词的词向量分别与 WQ 矩阵、WK 矩阵、WV 矩阵相乘,得到 Query 向量、Key 向量、Value 向量,就可以得到出其他词对该词的 Attention 值。在翻译的时候,对该词 Attention 值最大的词就是它对应的译文。所谓 Muti-Head Attention 其实类比 CNN 中的卷积核的个数就很好理解了。我们知道 CNN 中卷积核的个数决定通道数,每层通道数代表了不同的特征。那么 Muti-Head Attention 中每一个 Head 类似于一个卷积核,可以从不同角度提取特征。然后所有 Head 提取的特征拼接在一起输出。代码实现也很非常容易,针对每一个词向量,给它分配 WQ、...,WQN,WK、...,WKN,WV、...,WVN 权重矩阵,然后就可以得到相对应的 Query 向量、Key 向量、Value 向量,代入 Attention 计算公式即可以得到多头 Attention 向量。


Add & Norm    Add代表了Residual Connection,是为了解决多层神经网络训练困难的问题。Norm则代表了Layer Normalization,通过对层的激活值的归一化,可以加速模型的训练过程,使其更快的收敛。
Feed Forward 全连接前向网络,包括两个线性变换和一个ReLU激活输出
Positional Encoding 在偶数位置使用正弦编码,在奇数位置使用余弦编码,然后直接和Embedding相加,作用是提供了时序信息。
复制代码


Decoder 主要区别是两个不同的 Muti-Head Attention。Masked Muti-Head Attention 是带了 Mask 的 Self Attention。Mask 的作用是让 Decoder 在 t 时刻看不见 t 时刻之后的信息。在神经网络训练中,训练和推理的前向运算应该要是一样的,训练中的反向主要用于更新权重参数,使训练的前向输出越来越接近真实值。Decorder 中另外一个 Muti-Head Attention,我们称之为 Context Attention,和 Self Attention 中 Query 向量、Key 向量、Value 向量均由相同的源产生(要么都由 Source 产生、要么都由 Target 产生)不同,它的 Query 向量是 Decorder 中产生的(Target),而 Key 向量、Value 向量是 Encoder 的输出产生的(Source)。Decorder 中的 Context Attention 使 decoder 的每一个位置都可以 attend 到输入序列的每一个位置。需要注意的是 Encoder 的最终输出是分为相等的 N 份送到 Decoder 中的 Nx 结构中去的,在论文中,N 取值为 6。


Transformer 总结在训练过程还有一个技巧,就是在训练时给 Decorder 看正确答案,比如在 Decorder 输出"猫"时,不用管 Decorder 前面两个输出的什么,直接将"这"和"只"输入进去,然后期望它输出"猫"。这个技巧叫做 Teacher Forcing,实验证明这种训练方式有较好的效果。Transformer 中的损失函数其实比较简单,使用了常用的交叉熵损失函数。Transformer 使用 Self Attention 机制解决了传统的基于 RNN 的 Seq2Seq 模型难以处理长序列的句子,存在信息丢失情况以及无法并行训练(时序依赖)的问题。Transformer 包含 Encoder 和 Decoder 两部分,其中 Encoder 单元和 Decoder 单元重复了 N 次(N 可以设置,论文中 N 值为 6)。Encoder 单元包括 Multi-Head Attention(多头 Self Attention 结构)、Layer Norm + Residual、Feed Forward(前馈神经网络)。Decoder 单元包括 Masked Multi-Head Attention(带掩膜的多头 Self Attention 结构)、Multi-Head Attention(多头 Cross Attention 结构)、Layer Norm + Residual、Feed Forward(前馈神经网络)。Self Attention 核心是得到是 query 向量、key 向量、v 向量,它们是词向量分别和 Wq 权重矩阵、Wk 权重矩阵、Wv 权重矩阵相乘得到的。这些权重矩阵通过迭代不断更新。Multi-Head Attention 可以理解为多个卷积核(一个 Self Attention 类比为一个卷积核),不同卷积核得到不同特征通道,代表不同维度的特征。Positional Encoding 在偶数位置使用正弦编码,在奇数位置使用余弦编码,然后直接和 Embedding 相加,作用是提供了时序信息。Embedding + Positional Encoding + N(论文中取值为 6) x Encoder 单元构成 Encoder。Embedding + Positional Encoding + N (论文中取值为 6)x Decoder 单元 + Linear + Softmax 构成 Decoder。Decoder 经过 SoftMax 为概率输出,它与真实 one-hot 标签的交叉熵损失构成损失函数。

发布于: 刚刚阅读数: 3
用户头像

XiaoChao_AI

关注

还未添加个人签名 2022-11-10 加入

还未添加个人简介

评论

发布
暂无评论
人工智能自然语言处理之Transformer阐述_人工智能_XiaoChao_AI_InfoQ写作社区