Transformer模型梳理

本文是对Transformer模型的梳理文章,主要学习资料为知乎的一篇文章一篇博客。初学transformer,有讲的不对的地方,可以评论区评论告诉我,我会及时改正的。

1 Transformer整体结构

Transformer的整体结构如下图所示:

上图展示的是用于机器翻译的Transformer,Transformer的整体结构分为两部分,分别是Encoder部分和Decoder部分,图中的Encoder和Decoder都包含6个block。Transformer模型的运行流程如下所示:

第一步: 输入部分,获取输入句子的每个单词的表示向量x,表示向量x由单词的Embedding(Embedding就是从原始数据提取出来的特征)和单词位置的Embedding相加得到
Transformer的输入表示
第二步: 将得到的单词表示向量矩阵 (如上图所示,每一行是一个单词的表示 x) 传入 Encoder 中,经过 6 个 Encoder block 后可以得到句子所有单词的编码信息矩阵 C,如下图。单词向量矩阵用 X n × d X_{n \times d} Xn×d 表示, n 是句子中单词个数,d 是表示向量的维度 (论文中 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致

第三步: 将 Encoder 输出的编码信息矩阵 C传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1,如下图所示。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。

上面Decoder接收了Encoder的编码矩阵C,然后结合“<Begin>"预测出I,然后又结合“<Begin>"和"I"预测出have。以此类推。

2 Transformer的输入

Transformer 中单词的输入表示 x由单词 Embedding 和位置 Embedding (Positional Encoding)相加得到。

单词Embedding

有很多种,例如word2vec、Glove等预训练算法。

位置Embedding

因为Transformer不采用RNN结构,只能使用全局信息,不能利用单词的输入顺序,而这部分信息对于NLP来说是十分重要的,所以利用位置Embedding来保存单词的相对位置和绝对位置信息。

位置 Embedding 用 PE表示,PE 的维度与单词 Embedding 是一样的。PE 可以通过训练得到,也可以使用某种公式计算得到。在 Transformer 中采用了后者,计算公式如下:

其中,pos 表示单词在句子中的位置,d 表示 PE的维度 (与词 Embedding 一样),2i 表示偶数的维度,2i+1 表示奇数维度 (即 2i≤d, 2i+1≤d)。使用这种公式计算 PE 有以下的好处:

  • 使 PE 能够适应比训练集里面所有句子更长的句子,假设训练集里面最长的句子是有 20 个单词,突然来了一个长度为 21的句子,则使用公式计算的方法可以计算出第 21 位的 Embedding。
  • 可以让模型容易地计算出相对位置,对于固定长度的间距k,PE(pos+k) 可以用 PE(pos) 计算得到。因为 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B), Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)。 将单词的词 Embedding和位置 Embedding 相加,就可以得到单词的表示向量 x,x 就是 Transformer 的输入。

3 Self-Attentin(自注意力机制)


上图是论文中 Transformer 的内部结构图,左侧为 Encoder block,右侧为 Decoder block。红色圈中的部分为 Multi-Head Attention,是由多个 Self-Attention组成的,可以看到 Encoder block 包含一个 Multi-Head Attention,而 Decoder block 包含两个 Multi-Head Attention (其中有一个用到 Masked)。Multi-Head Attention 上方还包括一个 Add & Norm 层,Add 表示残差连接 (Residual Connection) 用于防止网络退化,Norm 表示 Layer Normalization,用于对每一层的激活值进行归一化。

Self-Attention结构


上图是Self-Attention的结构,在计算的时候需要用到矩阵Q(查询),K(键值),V(值)。在实际中,Self-Attention 接收的是输入(单词的表示向量x组成的矩阵X) 或者上一个 Encoder block 的输出。而Q,K,V正是通过 Self-Attention 的输入进行线性变换得到的,另外需要注意的是Q,K,V的维度需要小于输入向量(即单词的表示向量X)的维度。

Q、K、V的计算

Self-Attention 的输入用矩阵X进行表示,则可以使用线性变阵矩阵WQ,WK,WV计算得到Q,K,V。计算如下图所示,注意 X, Q, K, V 的每一行都表示一个单词。

Self-Attention的输出

得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下:

公式中计算矩阵QK每一行向量的内积,为了防止内积过大,因此除以 d k d_k dk

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值