Transformer各个核心模块的理解1

1、Transformer总体结构

transformer的简洁结构图
其中,左边代表Encoder(编码器)的执行流程,右边代表Decoder(解码器)的执行流程。

2、Encoder部分

2.1 编码

在Encoder中,原始Transformer的输入(上图中的Inputs)为单词序列(句子)。首先要对单词序列进行Embedding,将其变为对应的词向量;其次加入Positional Encodings(位置编码)。位置编码用PE来表示,可以通过训练得到,也可以通过公式计算得到。

2.1.1 位置编码(Positional Embedding)

Transformer原文使用计算公式得到位置编码PE,计算表达式如下:
位置编码计算

其中,pos代表单词在句子中的位置(0到句子的最大长度),以句子“C我是一个打工人C”为例,“我”的pos值为1,“是”的pos值为2,以此类推,“人”的pos值为7。
PE是一个矩阵,d表示PE的列的维度(等于单词的Embedding维度),i 是0到dmodel/2-1之间的整数值(当PE的维度dmodel为512时,i为255),因此可推出2i表示向量中的偶数维,2i+1表示向量中的奇数维。PE(pos,2i)是PE矩阵中第pos行,第2i列的数值,是一个标量;同理,PE(pos,2i+1)是PE矩阵中第pos行,第2i+1列的数值,也是一个标量。
还以dmodel=512为例,对于“我是一个打工人”中的“我”,计算如下:

  • i = 0时:
    • PE(1, 0) = sin(1/10000^(2*0/512)) = sin(1/1) ≈ 0.8414
    • PE(1, 1) = cos(1/10000^(2*0/512)) = cos(1/1) ≈ 0.5403
  • i = 1时:
    • PE(1, 2) = sin(1/10000^(2*1/512)) = sin(1/1.036) ≈ 0.8218
    • PE(1, 3) = cos(1/10000^(2*1/512)) = cos(1/1.036) ≈ 0.5696
  • i = 2时:
    • PE(1, 4) = sin(1/10000^(2*1/512)) = sin(1/1.036) ≈ 0.8019
    • PE(1, 5) = cos(1/10000^(2*1/512)) = cos(1/1.036) ≈ 0.5973
  • i = 255时:
    • PE(1, 510) = sin(1/10000^(2*1/512)) = sin(1/1.036) ≈ 0.0001
    • PE(1, 511) = cos(1/10000^(2*1/512)) = cos(1/1.036) ≈ 0.9999

所以:“我”的位置向量表示为[0.8414, 0.5403, 0.8218, …, 0.0001, 0.9999],同理根据以上过程可以将所有词的位置向量计算出来。

2.1.2 词编码(Token Embedding)

做词编码的时候可以提前使用word2vec等算法训练得到Embedding矩阵,也可以在Transformer训练时获得。

2.2 Multi-Head Attention

多头注意力及self-attention结构
由上图可看出,Multi-Head Attention模块由多个Scaled Dot-Product Attention机制构成。在做运算时,Scaled Dot-Product Attention以Q,K,V作为输入,其中,Q表示查询,K表示键,V表示值。

2.2.1 Q,K和V的计算

原始数据X(词编码+位置编码)分别与三个线性变换矩阵相乘,得到Scaled Dot-Product Attention的输入Q、K和V,过程如下图所示:
在这里插入图片描述
其中,WQ、WK、WV都是训练得到的,上图Q、K、V的计算过程用公式可表示为:X· W Q W_Q WQ=Q、X· W K W_K WK=K、X· W V W_V WV=V,而X、Q,K和V的每一行都表示一个单词。

2.2.2 Self-Attention(Scaled Dot-Product Attention)的计算及输出

计算完Q、K和V之后,就得到了Self-Attention模块的所有输出,即可完成注意力的计算:
self-Attention公式
其中,dk代表Q,K矩阵的列数(表征每个词的向量的维度),因要计算Q和K矩阵中每个向量之间的内积,为了防止内积过大导致softmax分布过于陡峭,影响梯度计算的稳定性,所以每个元素都除以 d k 2 \sqrt[2]{d_k} 2dk 进行缩放,以在训练过程中使梯度得以稳定。
具体操作示意如下图所示:
在这里插入图片描述

其中,Q的每一行, K T K^T KT的每一列都代表一个单词,执行Q· K T K^T KT并通过softmax得到每个单词对其他单词的attention系数(每一行和都变为1)。
最后,将得到的矩阵和V相乘,来获得Self-Attention最终的输出。

2.2.3 整合多个Self-Attention

为了让模型在不同的表示空间里学习到相关的信息,Transformer在Encoder中使用了多个Scaled Dot-Product Attention模块(后续以8个Scaled Dot-Product Attention为例),组合成Multi-Head Attention。具体如下:
在这里插入图片描述
在这里插入图片描述
输入X首先分别经过8个Scaled Dot-Product Attention模块,得到8个输出矩阵 S 1 S_1 S1 S 1 S_1 S1,…, S 8 S_8 S8;然后,将这8矩阵进行Concat拼接;最后,将拼接后的矩阵传入一个Linear层,得到最终的Multi-Head Attention输出。

2.3 Feed Forward Network(FFN)+ 残差结构

得到Multi-Head Attention的输出之后,Transformer的Encoder将Multi-Head Attention的输出作为输入送入一个包含前馈神经网络模块(FFN)的残差结构中。
在这里插入图片描述FFN比较简单,就是从输入–>全连接层1–>ReLu激活函数–>Dropout–>全连接层2的执行过程,公式可表示如上图。使用FFN能够增强模型的非线性表达能力。
FFN之后,再进行add和Layer Normalization操作,提高模型拟合程度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值