NLP——图解Transformer

结构图解

为了更有层次的掌握Transformer结构,下面通过由高到低,由外到里的形式来一步步展开Transformer。 首先把Transformer看成一个翻译工具,一个黑匣子,它的结构如下图:输入原文(绿色) 通过Transformer得到输出译文(紫色)。
在这里插入图片描述

打开Transformer这个黑匣子,得到下图。此时可以看到Transformer由Encoder和Decoder两大块组成。
在这里插入图片描述
进一步展开Transformer的Encoder和Decoder可以得到下图。此时可以看到Transformer里面的Encoder和Decoder分别是由6层Encoder和Decoder堆叠而成的。
在这里插入图片描述
进一步展开Transformer的单层Encoder和Decoder可以得到下图。每层Encoder又包括Self-Attention子层和Feed Forward子层,每层Decoder层又包括Self-Attention子层(Mask)、Encoder- Decoder Attention子层和Feed Forward子层。
在这里插入图片描述
把Self-Attention子层也展开就得到了Transformer论文中给出的Transformer的结构图(左下图) 了。其中Multi-Head Attention展开如中下图,Multi-Head Attention中的Scaled Dot-Product Attention进一步展开如右下图。
在这里插入图片描述

过程图解

下面通过图解的方式来尽可能地讲清楚Transformer的完整过程。

1. Word embedding + Position encoding

• Inputs首先根据该语言词汇表的大小转成V维的one-hot向量v1;
• 根据one-hot向量和词嵌入模型(预训练好或者随机初始化)查找相应词向 量v2;
• v2添加位置编码向量信息(训练或用规则)得到带有位置信息的向量v3。
在这里插入图片描述
在这里插入图片描述

2. Encoder

上一步得到的v3向量作为Encoder1的输入,经过Self-Attention层得到Attention 的输出,再经过Feed Forward自动生成Encoder1的输出,Encoder1的输出作为 Encoder2的输入,以此类推,一直进入到顶层Encoder,输出矢量组成的列表 ,然后将其转化为一组attention的集合(K,V)。至于attention的计算以及其他细节请参照上一节内容。
在这里插入图片描述
在这里插入图片描述

3. Decoder

上一步Encoder输出的attention的集合(K,V)将被送入到每个Decoder的 Encoder-Decoder attention模块作为K,V的输入(Q取Decoder中Self-Attention的 输出)。至于Decoder中的Self-Attention实现过程同Encoder的Self-Attention,重复6层,最后顶层Decoder输出浮点数向量列表。
在这里插入图片描述
在这里插入图片描述

4. Final Linear + Softmax

顶层Decoder也是一个隐层,输出是2048或1024(这里只是打个比方)的隐层。 那么这些隐层节点怎样对应到输出的词呢? 首先,我们对每种语言会有一个固定的词表,比如这个语言到底有多少个词, 比如中文里有2万词、3万词、5万词。对网络隐层会先过一个线性的投射层,去把它投射到一个词表大小的向量维度,形成一个词表大小向量,我们在这个向量基础上做softmax,把它转成概率。比如是3万的词,去选取里面概率最大的那个词作为我们实际的输出,这里面第五位是最大的,它会输出一个am,这样就 达到了通过Encoder输出隐层来去实际生成一个词翻译的效果。
在这里插入图片描述
在这里插入图片描述

5. loss function

Transformer的训练优化目标是概率的交叉熵cross entropy,以cross entropy作为梯度更新的优化目标。下图(左)是优化目标的loss随着训练的轮数的变化情况,因为是entropy,所以是稳定下降的过程。相应的,翻译的评价目标Bleu值是匹配度加权的分数,Bleu值越高越好,它随着训练过程的进行会有一个逐步向上升的过程。训练的优化目标就是这样的,通过交叉熵的优化来提升Bleu,就能实现翻译效果优化的过程。
在这里插入图片描述
最后贴上Multi-Head Self Attention的计算流程图。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章