当前位置:首页> AI教程> Transformer是什么

Transformer是什么

释放双眼,带上耳机,听听看~!
了解Transformer与RNN的区别,以及Transformer在深度学习中的作用。讨论了Transformer的工作原理和结构,并分析了其在神经序列转导模型中的应用。

Transformer是什么

transformer是目前最流行的特征抽取器,在大部分的场景中已经取代了RNN。

Transformer vs RNN

RNN: 首先,RNN不能并行;RNN是依赖前一时刻输出的隐层状态,这就导致RNN必须一步一步走完,而不能并行,结果就会很慢; 其次,RNN词间距过长。词间距是两个词相隔的距离,当距离过长可能会导致梯度消失或梯度爆炸等问题。

Transformer: transformer很好的弥补了这两个缺点:transformer并行速度极快,而且transformer每个词之间的词间距都是1。因此奠定了transformer是目前最流行的特征抽取器。

(来自zhuanlan.zhihu.com/p/445856100)

Transformer理解

从整个深度学习流程来描述Transformer所处的工作位置,我们可以简单的把Transformer看成一个盒子:

graph LR
A[输入:机器学习] --> B[模型:Transformer:包含Encoder与Decoder两部分]-->  C[输出:machine learning]

style A fill:#e2efd9,stroke:#333,stroke-width:1px,fill-opacity:0.5
style B fill:#e2efd9,stroke:#333,stroke-width:1px,fill-opacity:0.5
style C fill:#e2efd9,stroke:#333,stroke-width:1px,fill-opacity:0.5

例: 输入中文, 输出英语

graph LR
A[我爱购物] --> B[Transformer模型] -->  C[I love shopping]
style A fill:#e2efd9,stroke:#333,stroke-width:1px,fill-opacity:0.5
style B fill:#e2efd9,stroke:#333,stroke-width:1px,fill-opacity:0.5
style C fill:#e2efd9,stroke:#333,stroke-width:1px,fill-opacity:0.5

将上述的盒子展开后会发觉transformer是由encoder与decoder构成,而每个encoder与decoder又由6个相同的层组成,如此盒子变成如下形式:

Transformer是什么

后续,我们陆续展开transformer内部的结构加以分析与阐述

总架构图

Transformer是什么

大部分神经序列转导模型都有一个编码器-解码器结构。 编码器输入序列用x(x1,…,xn)表示,输出用z(z1,…,zn)有示。 根据z解码器生成符号的一个输出序列有用y(y1,…,ym)表示 ,一次一个元素。 在每一步中,模型都是自回归的,当生成下一个时,使用先前生成的符号作为附加输入。

transformer也遵循了encoder-decoder架构,encoder和decoder都使用self-attention和Feed Forward。论文《Attention Is All You Need》中给出transformer的模型架构图如上所示,其中EncoderDecoder都包含6个block,这6个block除了参数各自随机初始化外结构相同基本相同。

Encoder:每一层都有两个子层。

  • 第一层是一个Multi-Head Attention(多头注意机制)
  • 第二层是简单的、位置完全连接的Feed Forward(Feed Forward Neural Network 前馈神经网络),由两个线性变换组成,之间有一个ReLU激活。
  • 每个子层会叠加一个Add&Norm, 即采用残差连接,接着进行特征归一化(标准化),每个子层的输出都是LayerNorm(x +Sublayer(x)),其中Sublayer(x) 是由子层本身实现的函数。

Decoder: 除了每个编码器层中的两个子层之外,解码器还插入第三个子层:

  • 第一层是一个Masked Multi-Head Attention,妈注意力加入了masked 以防止位置关注到后面的位置。这种掩码结合将输出嵌入偏移一个位置,确保对位置的预测 i 只能依赖小于i的已知输出
  • 第二层是 (Cross) Multi-Head Attention,该层对编码器堆栈的输出执行multi-head attention
  • 与编码器类似,在每个子层都叠加一个Add&Norm, 即采用残差连接,接着进行特征归一化(标准化)。

为了方便残差连接,Transformer模型中的所有子层以及嵌入层产生的输出维度都为dmodel=512d_{model} = 512

输入

transformer的输入用到了的嵌入(Embedding)将输入词符和输出词符转换为维度为dmodeld_{model}的向量。

encoder的输入层和decoder的输入层是一样的结构,都是token embedding(词向量)+ positional embedding(位置向量) , 得到最终的输入向量

其中Word Embedding(词嵌入) 负责将自然语言转化为与其对应的独一无二的词向量表达, 而Position Embedding(位置嵌入) 表示单词出现在句子中的位置。理由是Transformer是使用全局信息,无法捕捉到序列顺序信息的,需要使用Position Embeddin表示句子位置。关于位置编码transform采用了正弦和余弦函数,公式如下:

PEpos,2i=sin(pos100002i/modal)−PEpos,2i=cos(pos100002i/modal)PE_{pos,2_i} = sin(frac{pos}{10000^{2i/modal}}) \ – \
PE_{pos,2_i} = cos(frac{pos}{10000^{2i/modal}})

注意力机制

Attention函数可以描述为将query和一组key-value对映射到输出,其中query、key、value和输出都是向量。 输出为value的加权和,其中分配给每个value的权重通过query与相应key的兼容函数来计算。

query、key、value 在后面的章节中会描述为 Q、K、V

多头注意力机制

Transformer是什么

图中红色圈中的部分为 Multi-Head Attention,是由多个Self-Attention组成的,可以看到 Encoder 包含一个 Multi-Head Attention,而 Decoder 包含两个 Multi-Head Attention 。

多头注意力机制的内部结构:

Transformer是什么

Scaled Dot-Product Attention

从多头注意力的内部结构我们可以看到其核心是由H个”Scaled Dot-Product Attention”组成的注意力层,该层我们称自注意力层(self-attention)”, 输入由query、dk维的key和dvquery、d_k 维的key和 d_v维的value组成。我们计算query和所有key的点积、用dksqrt{d_k} 相除,然后应用一个softmax函数以获得值的权重。

数学公式如下:

Attention(Q,K,V)=softmax(QKTdk)Attention(Q,K,V) = softmax(frac{QK^T}{sqrt{d_k}})

注意力总结

将query,key,value分别用不同的线性映射h倍到dk,dk和dvd_k, d_k 和 d_v维效果更好而不是用dmodeld_{model}维的query、key和value执行单个attention函数。基于每个映射版本的query、key和value,我们并行执行attention函数,产生dvd_v维输出值。将它们连接并再次映射,产生最终值。公式如下:

Multi−headattention=Concat(head1,…headh)∗WO−其中headi=Attention(Q∗WiQ,K∗WiK,Q∗WiV)Multi-head attention = Concat(head_1,…head_h)*W^O
\ – \
其中head_i=Attention(Q*W_i^Q,K*W_i^K,Q*W_i^V)

在transformer中
h=8,dmodel=512dk =dv =dmodel∕h =512/8=64h=8, d_{model} = 512 \
d_k = d_v = d_{model}∕h = 512/8 = 64

FeedForward(前馈神经网络)

在进行了Attention操作之后,Encoder和Decoder中的每一层都包含了一个完全连接前馈网络,对每个position的向量分别进行相同的操作,由两个线性变换组成,之间有一个ReLU激活。

FEN(x)=max(0,xW1+b1)W2+b2FEN(x) = max(0,xW_1 + b_1)W_2 + b_2

Encoder(编码器)

Transformer是什么

Encoder由2部分组成: 多头注意力前馈神经网络

Decoder(解码器)

Transformer是什么

Decoder结构与Encoder相似,但是存在一些区别。

  • Decoder 包含两个 Multi-Head Attention 层。
    1. 第一个 Multi-Head Attention 层采用了 Masked 操作。
    2. 第二个 Multi-Head Attention 层的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder的输出计算。
  • 最后有一个 Softmax 层计算下一个单词的概率。

Masked Self-Attention

Mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。

Transformer 模型里面涉及两种 mask,分别是 Padding Mask 和 Sequence Mask。其中,Padding Mask 在所有的 scaled dot-product attention里面都需要用到,而 Sequence Mask只有在Decoder的Self-Attention里面用到。

(Cross) Multi-Head Attention

其实这块与上文 Encoder 中 的 Multi-Head Attention 具体实现细节上完全相同,区别在于Encoder的多头注意力里的Q、K、V是初始化多个不同的矩阵得到的。而Decoder的K、V是来自于Encoder的输出,Q是上层Masked Self-Attention的输出。

Linear和softmax

Decoder最后会输出一个实数向量。再通过过一个linear layer将decoder的输出扩展到与vocabulary size一样的维度上。经过softmax 后,选择概率最高的一个word作为预测结果。

总结记录于2023-10-24 修改于2023-11-10

修改原因:

  1. 研读了论文的部分内容,感觉文章有误做了修改
  2. 优化文章结构,便于阅读

[参考]

papers.nips.cc/paper/2017/…

www.yiyibooks.cn/yiyibooks/A…

www.u72.net/chengxu/sho…

zhuanlan.zhihu.com/p/445856100

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

AIGC存储方案对模型训练的重要性及影响分析

2023-11-21 23:09:14

AI教程

ChatGPT: Android 软件开发的利器

2023-11-22 1:29:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索