1、整体结构
在Transformer之前,主要采用 RNN (循环神经网络)来处理文本序列数据,当RNN将序列作为输入时,它会逐字处理句子。采用的是一种顺序化的处理,无法并行执行。另外,当此类序列太长时,模型容易忘记序列中远处位置的内容或将其与后续位置的内容混合在一起。
Transformer 提出了一种新方法。它建议对每个位置进行编码并应用注意力机制,以关联两个遥远的单词,然后可以并行化,从而加速训练。
Multi-Head Attention:多头注意力是由多个 Self-Attention 组成的;
Add & Norm 层:残差连接和归一化层;
Feed Forward前馈神经网络层,也称为前馈全连接层;
2、词嵌入
Input Embedding:首先,编码器会将输入的文本转换成一系列的词向量,将每个单词映射到一个固定维度的向量空间中,使得语义上相似的单词在向量空间中的位置也相近。(Word2Vec算法)
3、位置编码
Positional Encoding:由于文本中的单词顺序对于语义的理解非常重要,编码器需要能够捕捉单词的顺序信息。为此编码器会添加位置编码,将单词在句子中的位置信息编码到词向量中。
原因:因为 Transformer 不采用 RNN 的结构,而是使用全局信息,不能利用单词的顺序信息,所以需要计算补充位置编码
4、编码器
通过自注意力机制和前馈神经网络等步骤将输入表示转换成编码向量。这些编码向量捕捉了输入文本中的信息和模式,为解码器提供了必要的输入信息
1)自注意力机制
主要是捕捉数据或特征内部的相关性,它允许模型在处理序列时考虑序列中每个元素与其他所有元素的关系(从全局上下文中捕获单词之间的依赖关系)
2)前馈神经网络
自注意力机制的输出会输入到一个前馈神经网络中,这个前馈神经网络对上下文向量进行进一步的变换和提取,以捕捉更复杂的模式和关系。(通过激活函数,进行非线性化,可以满足更加复杂的关系处理)
3)层次化处理
编码器层可以堆叠多个,形成层次化的处理结构。每个编码器层都会以前一个编码器层的输出作为输入,并对其进行进一步的转换和提取。(残差连接+归一化)
4)输出编码向量
经过所有编码器层的处理后,输入的文本被转换成了一系列的编码向量,包含了输入文本中所有单词和他们之间的关系。这些编码向量会作为输入传递给解码器。
5、解码器
通过自注意力机制和编码器-解码器注意力机制来将编码向量转换成输出内容。这个过程可以看作是一个逐步生成的过程,在每个时间步,解码器都会根据当前的上下文信息来预测下一个单词,然后将这个单词加入到输出序列中,直到生成完整的输出序列。
1)解码器注意力机制
在解码器处理的每个时间步,模型首先会使用编码器-解码器注意力机制。这个机制允许解码器关注编码器生成的编码向量,以便从中提取与当前输入单词相关的信息。通过计算注意力权重,解码器会生成一个上下文向量,该向量包含了与当前输入单词最相关的信息。
2)自注意力机制
接下来,解码器会使用自注意力机制,以关注其自身的输出。这意味着解码器不仅关注输入数据,还关注之前生成的输出数据。通过自注意力机制,解码器能够捕捉输出序列中的依赖关系和模式。
3)融合信息
将编码器-解码器注意力机制和自注意力机制的输出合并,得到一个综合的上下文向量。这个上下文向量同时包含了输入数据和之前输出数据的信息。
4)前馈神经网络
然后,解码器会将这个上下文向量输入到一个前馈神经网络中。这个前馈神经网络对上下文向量进行进一步的变换和提取,以捕捉更复杂的模式和关系。
5)生成输出
最后,解码器会使用一个全连接层将前馈神经网络的输出转换为一个概率分布,表示下一个单词的可能性。这个概率分布是通过将前馈神经网络的输出与一个词汇表进行比较得到的,词汇表中包含了所有可能的单词。模型会根据这个概率分布选择最可能的单词作为当前位置的输出。
6、自注意力机制
编码器的自注意力机制是其核心部分,它允许模型在不同的位置对输入数据的不同部分给予不同的关注。通过计算输入数据的“查询”(Query)、“键”(Key)和“值”(Value),自注意力机制生成一个注意力权重矩阵,用于衡量输入序列中各个单词之间的关联程度。这个注意力权重矩阵会被用于加权求和所有的值向量,从而得到一个上下文向量,它包含了当前单词与其他单词之间的关联信息
假设输入序列是Dx*N的矩阵(Dx表示输入向量维度,N表示样本数),那么分别经过Wq、Wk和Wv三个线性变换后,可以得到Q、K、V矩阵(注意这里Q和K的维度要相同,但是并不一定要和V相同)。Q和K可以进一步通过缩放点积来进行打分,并经过Softmax归一化得到V矩阵的权重,从而计算得到最终的输出向量序列H:
1)生成Q、K和V
对于输入序列中的每个词向量,自注意力机制首先通过乘以不同的权重矩阵(这些权重矩阵在模型训练过程中学习得到)来得到查询(Query)、键(Key)和值(Value)三个向量。
2)计算注意力分数
接下来,自注意力机制会计算Q和K之间的相似性,这通常通过点积或缩放点积来实现。这个相似性得分反映了序列中不同位置之间的关联程度。
3)加权求和
然后,使用Softmax函数对注意力分数进行归一化,得到每个位置的注意力权重。这些权重随后用于对V进行加权求和,从而得到一个加权的输出向量。这个输出向量是对输入序列中所有位置的信息进行加权汇总的结果
4)输出结果
最后,输出所有输入词向量经过上述步骤处理后得到的加权输出向量的集合。这些输出向量包含了输入序列中每个位置基于全局上下文信息的综合表
7、多头注意力
Multi-Head Attention 是由多个 Self-Attention 组合形成的。多头注意力的结构如下所示
假设我们一共应用h组线性变换,那就可以得到h个结果矩阵,将它们拼接起来再做一次线性变换,即可得到最后的结果:
得到 8 个输出矩阵 Z1 到 Z8 之后,Multi-Head Attention 将它们拼接在一起 (Concat),然后传入一个Linear层,得到 Multi-Head Attention 最终的输出Z
8、前馈神经网络
Feed Forward层、前馈神经网络层Feedforward Neural Network,FFN,也称为前馈全连接层;由输入层、一个或多个隐藏层和输出层组成;
用来对注意力权重进行非线性转换或对特征进行映射,通过对序列中每个位置的信息进行非线性转换,从而增强模型的表征能力;FFN结构:
线性变换层(全连接层):这些层执行输入向量和权重矩阵之间的线性变换。
激活函数:通常在线性变换之后应用非线性激活函数,例如ReLU(Rectified Linear Unit)。
1)输入层
网络的第一层,负责接收原始数据。输入层的神经元数量通常对应于输入数据的维度(如果输入数据是一个10维的向量,那么输入层将有10个神经元)
2)隐藏层
隐藏层位于输入层和输出层之间,可以有一个或多个。每个隐藏层包含若干神经元,这些神经元通过激活函数对输入数据进行非线性变换。隐藏层的作用是提取数据的高级特征,使得网络能够学习复杂的数据表示。
3)输出层
网络的最后一层,它的神经元数量对应于任务的输出维度。对于分类任务,输出层的神经元数量通常等于类别的数量,每个神经元输出对应类别的概率。
9、残差连接&归一化层
Add & Norm层,残差连接和归一化是在层次化处理阶段完成的
其中 X表示 Multi-Head Attention 或者 Feed Forward 的输入,MultiHeadAttention(X) 和 FeedForward(X) 表示输出 (输出与输入 X 维度是一样的,所以可以相加)。
1)Add:残差连接 (指的是:X+MultiHeadAttention(X))
残差连接是一种设计策略,残差连接的目的是让模型能够学习到恒等映射,从而解决深层网络训练过程中可能出现的梯度消失问题。(当网络层数增加,梯度在反向传播过程中可能会逐渐减小,导致网络前端层的权重几乎无法更新,这是因为这些权重对应的梯度值变得非常小。这种现象被称为梯度消失,它阻碍了网络的有效学习)
2)Norm:层归一化(指 Layer Normalization)
归一化是对残差连接的输出进行归一化处理,使得每一层的输入都具有相似的分布,这有助于加速模型的训练过程并提高模型的泛化能力,同时加速网络的收敛速度,更快地找到最优解。(使得输出数据的均值接近于0,方差接近于)
a.加速训练过程:通过归一化处理,可以加速梯度下降的收敛速度,因为归一化后的数据有助于避免因输入数据规模不一致而导致的优化器更新步长不均衡的问题。
b.提高模型稳定性:归一化可以减少内部协变量偏移,即深层网络中每一层输入分布的变化,这有助于保持网络的稳定性,特别是在使用较高学习率时。
c.增强模型泛化能力:归一化有助于模型学习到更加鲁棒的特征表示,因为它减少了对输入数据规模的依赖,使得模型能够更好地适应不同的数据分布。
探索未知,分享所知;点击关注,码路同行,寻道人生!
标签:输出,Transformer,AI,模型,解码器,向量,归一化,注意力,输入 From: https://blog.csdn.net/xiaobing259/article/details/137435686