目录
1. Seq2seq
2. encoder
Transformer 中的 Block 结构
3. Decoder
4.Encoder和Decoder间的信息传递
5.Training
6.Tips
1. Seq2seq
Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列,输出也是一个序列,输出的长度是由机器自己的来决定的。
Seq2seq应用举例:
- 1.语音识别:将一段声音讯号转换为文字
- 2.机器翻译:将一种文字转换为另一种文字
- 3.语音翻译:将声音讯号转换为文字(相当于1+2)
模型架构
2. encoder
目标:将一组向量序列经过处理转化为另一组向量序列。
任务:(特征提取+信息转换+支持下游任务)从输入数据中提取有意义的特征表示,并将这些信息转换为一个上下文向量或一组隐藏状态,供后续的 Decoder 使用。
模型:Encoder 模型可以使用 RNN 或者 CNN,在 transformer 里使用的是 Self-attention 。
下图左半部分为encoder结构:
- 一组向量作为输入进入第一个 block
- 在每个 block 内,输入向量被转换为一组新的向量
- 这组新向量再作为输入传递给下一个 block。
- 按照上述流程循环进行,直到所有 block 处理完毕。
下图右半部分为Block 的结构:
- Self-Attention 层:输入向量组首先通过 self-attention 层处理,产生一组新的向量。
- 全连接(FC)层:新产生的向量组经过 FC 层的进一步处理后,最终将向量组输出。
Transformer 中的 Block 结构
概述: Transformer 中的每个 Block 结构较为复杂,不仅包括 self-attention 层和全连接(FC)层,还结合了 residual connections 和 layer normalization 技术,以提高模型性能和训练稳定性。
流程:
-
Self-Attention 层:输入向量序列首先通过多头自注意力(Multi-Head Self-Attention, MHSA)层处理。MHSA 使得模型可以关注输入序列中的所有位置,从而产生一组新的向量表示。
-
Residual Connection:将通过 self-attention 层处理后的新向量与原始输入向量相加,形成残差连接(residual connection)。这有助于缓解深层网络中的梯度消失问题,并促进信息流动
-
Layer Normalization:对相加后的向量进行层归一化(Layer Normalization),确保每一层的输入具有相同的尺度,从而加速训练过程并提高模型的泛化能力
-
全连接(FC)层
-
再次 Residual Connection
-
再次 Layer Normalization
再整个看一下transformer里的encoder,注意结合上述讲解理解结构。
PS.为什么要使用 residual connection (残差连接)呢?
Residual connection(残差连接)是深度学习中的一种技术,主要用于解决深层神经网络训练过程中的梯度消失问题和性能退化问题。这种连接方式首次在2015年由何凯明等人提出的ResNet(残差网络)架构中被广泛应用。 在传统的深层神经网络中,随着网络层数的增加,训练误差可能会出现饱和甚至上升的情况,这与直观上认为更深的网络应该有更好的表现相矛盾。为了解决这个问题,残差连接被引入到网络结构中。 残差连接的基本思想是在网络层之间添加直接的连接,使得信息能够绕过一个或多个层直接传递到后面的层。具体来说,在两个层之间加入一个跳跃连接(skip connection),这样可以将输入直接加到几层之后的输出上。数学上,如果F ( x )表示几个层的变换结果,则残差块的输出可以表示为 x + F ( x ) ,其中 x 是残差块的输入。 这种设计允许梯度在反向传播过程中可以直接通过残差连接流回更早的层,从而减轻了梯度消失的问题,并且使得网络更容易优化。此外,残差连接也使得模型能够在不损害性能的情况下增加更多的层,从而提高了模型的表达能力。
3. Decoder
目标:从Encoder传递过来的上下文表示中生成目标序列。
流程:以声音序列为例,经过 encoder 之后会产生一组新的向量,这组新的向量会输入到 decoder 之中,此时会再往 decoder 里输入一个 BEGIN 向量,代表着任务的开始。这个 BEGIN 向量是使用 one-hat 编码的。
Transformer的Decoder结构有两种主要类型:Autoregressive Decoder (AT)和非自回归性Decoder (NAT),本文主要讲AT。
BEGIN 向量输入之后,decoder 会输出一个通过softmax函数的向量,这个向量的行数于中文字符数相等,每行还有一个代表概率的数值,数值最大的字符就是识别出来的汉字。
经过 decoder 输出的向量会在下一轮成为 decoder 的输入,decoder 同时考虑 encoder 传来的向量组、BEGIN 向量和上一次 decoder 产生的输出来产生一个新的向量,这个流程将以此循环往复。
我们对Encoder和Decoder的架构进行一个比较,可以看出:
-
二者大体结构是相似的
-
Decoder有一个特殊的Masked Self-attention,而不是普通的Self-attention
4.Encoder和Decoder间的信息传递
红圈圈起来的叫做 Cross attention,它是连接 encoder 和 decoder 的桥梁,其中有两个输入来自 encoder,一个输入来自 decoder。
Cross attention 内部的结构如上图所示,输入向量 BEGIN 经过了 Masked Self-attention 之后产生的向量需要乘上一个矩阵进行变换之后生成 query 向量,再把这个向量 q 和 encoder 产生的各个 key 向量进行计算,最后才会生成最终的结果