首页 > 编程笔记 > 通用技能 阅读:1

Transformer编码器详解(新手必看)

一般的序列到序列模型可以分解成编码器和解码器,如下图所示。


图 1 序列到序列模型的结构

编码器负责处理输入序列,再把处理好的结果输入解码器,由解码器决定输出序列。


图 2 Transformer 编码器的功能

如上图所示,为编码器输入一排向量,编码器将输出另一排向量。自注意力、循环神经网络、卷积神经网络都能输入一排向量,输出另一排向量。Transformer 编码器使用的是自注意力,输入一组向量,输出另一组数量相同的向量。


图 3 Transformer 编码器的结构

如上图所示,编码器内部有很多的块(block),每一个块都能输入一组向量,输出另一组向量。输入一组向量到第一个块,第一个块输出另一组向量,以此类推,最后一个块输出最终的向量序列。

Transformer 编码器的每个块并不是神经网络的一层。块的结构如下图所示:


图 4 Transformer 编码器中块的结构

在每个块里面,输入一组向量后做自注意力,考虑整个序列的信息,输出另一组向量。接下来这组向量会被输入全连接网络,输出另一组向量,这一组向量就是块的输出。

Transformer 加入了残差连接(residual connection)的设计,如下图所示:


图 5 Transformer 中的残差连接

将最左边的向量 b 输入自注意力层,得到向量 α,再将输出向量 α 加上输入向量 b(残差连接),然后进行层归一化(layer normalization)。层归一化不需要考虑批量的信息,而批量归一化需要考虑批量的信息。层归一化能输入一个向量,输出另一个向量。层归一化会计算输入向量的均值和标准差。

批量归一化是对不同样本、不同特征的同一个维度计算均值和标准差,而层归一化是对同一个特征、同一个样本里面不同的维度计算均值和标准差,接着做归一化。将输入向量 x 里面的每一个维度减掉均值 m,再除以标准差 σ,得到的就是层归一化的输出,如下式所示:


得到层归一化的输出以后,将其作为全连接网络的输入。输入全连接网络的还有一个残差连接,把全连接网络的输入和输出加起来,得到新的输出。对残差的结果再做一次层归一化,得到的输出才是 Transformer 编码器里面一个块的输出。


图 7 Transformer 编码器的详细结构

上图给出了 Transformer 编码器的详细结构,其中的“N×”表示共执行 N 次。首先,在输入的地方需要加上位置编码。因为只用自注意力,没有位置信息,所以需要加上位置编码。多头自注意力就是自注意力的块。经过自注意力后,还要加上残差连接和层归一化。接下来经过全连接前馈神经网络,并做一次残差连接和层归一化,才能得到一个块的输出,这个块会重复 N 次。

相关文章