Transformer简略了解

2024-01-07 18:10:05

Transformer出自论文:《Attention Is All You Need
该论文的提出,对RNN循环神经网络产生了冲击,席卷了自然语言处理(NLP)领域,后续的GPT4.0版本也是根据其进行训练优化的

一、Transformer主体架构

在这里插入图片描述
可以简化分为Encoders和Decoders,之所以是复数,其主要是由于N个所决定的,论文N的取值为6,每个Encoder结构都是一样的;同理每个Decoder也是相同的结构。但Encoder和Decoder结构大相径庭了

简化流程:输入 —> Encoders(6个Encoder) —> Decoders(6个Decoder) —> 输出
在这里插入图片描述

Ⅰ、Encoders

在这里插入图片描述
Encoders由N个Encoder所组成,其中N在论文中取值为6

Ⅱ、Decoders

在这里插入图片描述
Decoders由N个Decoder所组成,其中N在论文中取值为6

二、Encoder

单挑出一个Encoder进行分析,其主要可分为三部分:
①输入部分、②注意力机制、③前馈神经网络

在这里插入图片描述
在这里插入图片描述

Ⅰ,输入部分

在这里插入图片描述
输入部分主要包括:EmbeddingPositional Encoding位置编码
在这里插入图片描述

RNN中翻译:家驹
RNN结构中,是需要接收前面的数据之后再进行学习,先传入的学习是依据为基准进行的,需要考虑到前面的数据
而在Transformer中,多头注意力机制是可以并行处理数据的,是一并输入的,并不需要考虑之前的汉字之间的前后关系,故需要Positional Encoding位置编码告诉模型哪个字在前哪个字在后

例如:创建一个维度为512的词向量

1.Embedding

以翻译为例:把每个对应的字对应生成不同维度的向量,从而生成一个向量表,方便后续学习,共计512维度

2.Positional Encoding位置编码

论文中给出的位置编码公式:在这里插入图片描述
其中pos表示单词或字的位置;2i代表偶数,2i+1代表奇数
在偶数的位置使用sin,在奇数位置使用cos
在这里插入图片描述

将Embedding得到的512维度和Positional Encoding得到的512维度信息进行相加,得到一个最终的512维度信息,作为整个Transformer的输入
在这里插入图片描述
问:为什么位置嵌入是有用的?
答:正余弦函数,对于同一个Position,不同的函数可以得到一个绝对的位置信息

在这里插入图片描述
但,这种相对位置信息会在注意力机制那里消失

Ⅱ、注意力机制

在这里插入图片描述

1.基本的注意力机制

i)注意力机制的本质

带着问题看图片:婴儿在干嘛?
在这里插入图片描述
颜色深的地方为人们的主要关注的地方
那么如何将关注的区域和这句话进行相互关联,这就是注意力机制所要解决的问题

论文中给出的注意力机制公式:在这里插入图片描述
其中Q,K,V为三个矩阵,通过softmax进行归一化,得到一个相似度向量,然后再乘以V矩阵,最终得到一个加权的和

首先拿到一张图片,将图片进行上下左右四分割,并生成四个Key
在这里插入图片描述在这里插入图片描述
公式中的Q:Query这里传入的是婴儿
K为这里对应生成的Key1Key2Key3Key4
V为Key1-Key4所对应的某种值向量,Value1Value2Value3Value4

点乘:一个向量在另一个向量上投影的长度,是一个标量,可以反应两个向量的相似度。即两个向量点乘结果越大,两个向量越相似

Transformer中原理过程:
婴儿分别与Key1-Key4进行点乘操作,看哪个结果最大,表明越关注哪块区域
例如:婴儿Key3点乘结果最大,表明更关注右上区域
之后在与V矩阵相乘,得到最终的加权和(Attention Value)

ii)获取Q、K、V矩阵

在这里插入图片描述
以X1为例,X2也类似:在这里插入图片描述
得到Q、K、V之后带入公式即可
实际代码使用的是矩阵,方便并行运算
在这里插入图片描述
多头注意力机制主要是因为参数有多套,得到的Q、K、V也有多套
多头相当于把原始数据信息映射到不同的空间
在这里插入图片描述
例如将原始信息进行映射到两个空间,左右两个不同的多头注意力机制,从而映射到两个不同的空间
多头注意力机制,我的理解是:多个头注意力机制,例如下图中有俩头注意力机制(#0和#1)
在这里插入图片描述
将映射到不同空间最终的输出信息进行合并,乘以一个矩阵即得到一个多头注意力机制的输出
在这里插入图片描述

2.残差和LayNorm

i)残差

X作为输入,经过两层网络,这两层网络统一归为函数F(X)
输入参数X通过两层网络得到输出F(X)
残差:将输入X原封不动的与得到的输出F(X)进行对位相加,得到最终的输出
在这里插入图片描述
梯度消失一般情况下是因为连乘的原因,连乘的过程中出现了较小的数,导致越乘越小,从而产生梯度消失
而在残差网络中,通过反向传播链式法则可以看到,因为1的出现导致无论多小的数,确保梯度不为零,从而有效克服了梯度消失的出现,这也是NLP中使用了残差网络就可以使得网络层数更深的原因
在这里插入图片描述在这里插入图片描述

ii)Layer Normalization

Batch Normalization效果差,所以不用
在NLP中,BN使用的很少,一般都是以LN

①Batch Normalization背景

其核心是Feature Scaling,主要是为了让模型收敛的更快
BN重点在于:针对整个Batch中的样本在统一维度特征下进行处理
BN的过程使用的是:整个batch中的样本的均值和方差来模拟全部数据的均值和方差
在这里插入图片描述

②Batch Normalization的优缺点

优点:
1,可以解决内部协变量偏移
2,可以缓解梯度饱和问题

缺点:
1,当batch_size较小的时候,BN效果较差
因为BN是整个batch中的样本的均值和方差来模拟全部数据的均值和方差;若batch_size较小的情况下,就很难代表全部数据
2,在RNN中效果较差
因为RNN的输入是动态的;若有10个样本,其中9个样本长度为5个单词,1个样本长度为10个单词;在输入的时候,前5个单词可以使用10个样本进行计算均值和方差;但,第6个单词到第10个单词,均值和方差就尴尬了,因为只有1个样本有第6到第10个单词,若只用这一个样板进行计算,又变成了缺点1,batch_size小,不能够得到整个batch_size下的均值和方差
在这里插入图片描述

③为什么使用Layer-norm

为什么LayerNorm单独对一个样本的所有单词做缩放可以起到效果?
在这里插入图片描述
因此BN在NLP中是存在问题的!

BN在处理NLP任务中,会将当成同一个语义信息及性能处理,这边出现了问题
在这里插入图片描述
LN则将整个样本进行处理,每个样本都是在同一个语义信息当中的,所以LN是可以理解的
在这里插入图片描述

Ⅲ、前馈神经网络

在这里插入图片描述

Ⅳ、总结

在这里插入图片描述
首先,Inputs输入,得到一个Input Embedding,然后与Positional Encoding位置嵌入进行对位相加,作为整体的输入
得到多头注意力机制,通过残差结构,与多头注意力机制进行相加,得到残差结构的结果,在进行LN得到最终的注意力机制模块的输出结果
然后进行两层Feed Forward全连接,输出结果保持不变,通过残差结构进行相加,然后通过LN得到最终的输出结果

三、Decoder

Decoder和Encoder类似,均由N个完全相同的大模块堆叠构成,论文中N为6
在这里插入图片描述

Ⅰ,Masked Multi-Head Attention掩膜多头注意力机制

在这里插入图片描述
对输入的单词进行mask掩膜操作

mask的作用

正常情况下的机器翻译
在这里插入图片描述

若Decoder中没有mask,和Encoder一模一样的多头注意力机制话;若到生成find的时,所有的单词都会为生成find进行提供相应的语义信息;但模型在预测的时候,find之后的信息是不知道,没有find someone like you这些信息的,模型是看不见未来的单词的,此时就需要mask掉find someone like you这些信息
模型训练find的时候看到了find someone like you未来信息,但是预测的时候是看不到未来信息的,故需要进行mask操作
在这里插入图片描述
此时需要mask掉find someone like you
在这里插入图片描述

Ⅱ,交互层

在这里插入图片描述
这里是Multi-Head Attention,没有mask

在这里插入图片描述
Encoder生成的是K、V矩阵
Decoder生成的是Q矩阵
多头注意力机制由K、V、Q三个矩阵

在这里插入图片描述
在这里插入图片描述

视频学习来源:Transformer从零详细解读(可能是你见过最通俗易懂的讲解)

文章来源:https://blog.csdn.net/qq_41264055/article/details/135278031
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。