【Transformer】注意力机制+Transformer详解(模型,训练和预测)

前置知识:transform机制/注意力机制

注意力是将一个查询和键值对映射到输出的方法,Q、K、V均为向量,输出通过对V进行加权求和得到,权重就是Q、K相似度。其实就是一个加权求和模块 :神经网络中的一个组件,可以单独使用,但更多地用作 网络中的一部分。

作用:等权处理 → 加权处理 →提升任务效果

优点:

  • 根据不同场景动态选择不同的关注对象

  • 不考虑词之间的距离直接计算依赖关系,提升任务性能

原理:

步骤1:计算 f ( Q , K i ) f ( Q ,K_i ) f(Q,Ki)

步骤2: s o f t m a x ( f ( Q , K i ) ) softmax(f ( Q ,K_i )) softmaxf(Q,Ki)(计算对于Q 各个 K i K_i Ki 的权重)

步骤3:计算输出(各 K i K_i Ki乘以自己的权重,然后求和 )

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Transformer 结构

Transfomer 模型特点:

• 全部采用Attention机制

• 克服了RNN无法并行计算的缺点, 可以高度并行,训练速度快;

• 具有捕捉long distance dependency 的能力,有较高的建模能力

transformer结构如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入部分

Transformer输入是一个序列数据,可以是任意形式的词向量,如word2vec,GloVe,one-hot编码。输入inputs embedding后需要给每个word的词向量添加位置编码positional encoding

Transformer 的是完全基于self-Attention地,而self-attention是不能获取词语位置信息的,就算打乱一句话中词语的位置,每个词还是能与其他词之间计算attention值,就相当于是一个功能强大的词袋模型,对结果没有任何影响。(一会儿在介绍Encoder的时候再详细说明)所以在输入的时候需要给每一个词向量添加位置编码,以添加词语位置信息到输入向量中。

positional encoding的获取方式:

  • 数据训练学习得到positional encoding,类似于训练学习词向量,goole在之后的bert中的positional encoding便是由训练得到地。

  • 位置编码通过使用不同频率的正弦、余弦函数生成()

pos表示单词在句子中的绝对位置,pos=0,1,2…,例如:Jerry在"Tom chase Jerry"中的pos=2;dmodel表示词向量的维度,在这里dmodel=512;2i和2i+1表示奇偶性,i表示词向量中的第几维,例如这里dmodel=512,故i=0,1,2…255。

Transformer 的 Decoder的输入与Encoder的输出处理方法步骤是一样地,一个接受source数据,一个接受target数据,对应到上面例子里面就是:Encoder接受英文"Tom chase Jerry",Decoder接受中文"汤姆追逐杰瑞"。只是在有target数据时也就是在进行有监督训练时才会接受Outputs Embedding,进行预测时则不会接收。

Encoder

Encoder block是由6个encoder堆叠而成,Nx=6。一个encoder由Multi-Head Attention 和 全连接神经网络Feed Forward Network构成

Multi-Head Attention:

词向量通过三个权值矩阵 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV ,转变成为计算Attention值所需的Query,Keys,Values向量

通过缩放点积模型(可见于前置知识上部分)的到结果Z,这里就是一个注意力机制。而multi-head attetion 就是在self-attention的基础上,对于输入的embedding矩阵,self-attention只使用了一组 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV 来进行变换得到Query,Keys,Values。而Multi-Head Attention使用多组 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV 得到多组Query,Keys,Values,然后每组分别计算得到一个Z矩阵,最后将得到的多个Z矩阵进行拼接。Transformer里面是使用了8组不同的 W Q , W K , W V W^Q,W^K,W^V WQ,WK,WV

需要注意,multi-head attetion 使用了一个残差连接(Add&Normalize:),将X矩阵与Z矩阵相加(即add),Normalize使用Layer Normalization(LN)而不使用Batch Normalization(BN)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LN是在同一个样本中不同神经元之间进行归一化,而BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。
BN是对于相同的维度进行归一化,但是NLP中输入的都是词向量,一个300维的词向量,单独去分析它的每一维是没有意义地,在每一维上进行归一化也是适合地,因此选用的是LN

Feed-Forward Networks

全连接层是一个两层的神经网络,先线性变换,然后ReLU非线性,再线性变换。

全连接层公式如下:
F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x)=max(0,xW_1+b_1)W_2+b_2 FFN(x)=max(0,xW1+b1)W2+b2

然后经过Add&Normalize,输入下一个encoder中,经过6个encoder后输入到decoder中

Decoder

Decoder block也是由6个decoder堆叠而成,一个decoder由Masked Multi-Head Attention,Multi-Head Attention 和 全连接神经网络FNN构成。比Encoder多了一个Masked Multi-Head Attention,其他的结构与encoder相同
在这里插入图片描述

Decoder的输入分为两类:
一种是训练时的输入,一种是预测时的输入

训练时的输入就是已经对准备好对应的target数据。例如翻译任务,Encoder输入"Tom chase Jerry",Decoder输入"汤姆追逐杰瑞"。
预测时的输入,一开始输入的是起始符,然后每次输入是上一时刻Transformer的输出。例如,输入"“,输出"汤姆”,输入"汤姆",输出"汤姆追逐",输入"汤姆追逐",输出"汤姆追逐杰瑞",输入"汤姆追逐杰瑞",输出"汤姆追逐杰瑞"结束。

mask

mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。

  • padding mask
    因为每个批次输入序列长度是不一样的也就是说,要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充 0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃。因为这些填充的位置,其实是没什么意义的,所以attention机制不应该把注意力放在这些位置上,所以需要进行一些处理。具体的做法是,把这些位置的值加上一个非常大的负数(负无穷),这样的话,经过 softmax,这些位置的概率就会接近0!Encoder中的Multi-Head Attention也是需要进行padding mask.

  • sequence mask
    sequence mask 是为了使得 decoder 不能看见未来的信息。对于一个序列,在 time_step 为 t 的时刻,解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此需要想一个办法,把 t 之后的信息给隐藏起来。这在训练的时候有效,因为训练的时候每次是将target数据完整输入进decoder中地,预测时不需要,预测的时候我们只能得到前一时刻预测出的输出。
    那么具体怎么做呢?也很简单:产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到目的。

基于Encoder-Decoder 的Multi-Head Attention

Encoder中的Multi-Head Attention是基于Self-Attention地,Decoder中的第二个Multi-Head Attention就只是基于Attention,它的输入Queries来自于Masked Multi-Head Attention的输出,Keys和Values来自于Encoder中最后一层的输出。

Transformer的输出

Output如图中所示,首先经过一次线性变换,然后Softmax得到输出的概率分布,然后通过词典,输出概率最大的对应的单词作为我们的预测输出

在这里插入图片描述

Transformer 训练与预测

训练:并行

预测:编码端并行,解码端串行

训练并行的原因:

Encoder—自注意力机制,规定长度的 token 序列的若干 embeding 转化成矩阵,矩阵操作(生成 Q,K,V 矩阵,softmax(f(Q;K)) , KV 得 Z )

Decoder—Teacher Forcing , 直接将标签在 Decoder 并行输入

在这里插入图片描述

训练:

在这里插入图片描述

预测

注:输入端编码并行进行,预测解码过程中,一个单词一个单词的串行进行输出。

在这里插入图片描述

Transformer 须知(自我感受)

Transformer 是一种自回归模型(自回归语言模型是根据上文或者下文来预测后一个单词。),而基于Transformer 中的 Encoder 的 BERT 是一种自编码模型(把句子中随机一个单词用[mask]替换掉,同时根据该单词的上下文来预测该单词),基于 Transformer 的 Decoder 的 GPT 是一种自回归模型。

训练流程为:

输入部分:

首先输入Token的Embeding,加上位置信息positional encoding。

Encoder X N:

将多个Embeding集合成规定序列长度的矩阵(长则切断,短则padding—padding mask),然后进行多头注意力(多组 W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV)Concat.

在这里插入图片描述

残差连接,加一个Layer Normalization.

全连接层。

残差连接,加一个Layer Normalization.

Decoder X N:

输入部分:

首先输入Token的Embeding,加上位置信息positional encoding。

多头自注意力(使用当前知道的)

残差连接,加一个Layer Normalization.

交叉注意力(使用上一部分的Q以及Encoder输出的z做K,V)

残差连接,加一个Layer Normalization.

全连接层。

残差连接,加一个Layer Normalization

输出部分:

一次线性变换,然后Softmax得到输出的概率分布

训练流程是并行的,因为Encoder的输入为正确标签,可以并行输入

预测过程:

同训练,只不过上一个的输出做Encoder的输入,最终输出一个结束符,结束。

参考

史上最小白之Transformer详解_transformer最小白-CSDN博客

  • 20
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸡不叫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值