transformer family(一):from Bahdanau Attention to transformers

流行的深度学习模型,其中的思想以及模型在后面其他任务中也经常使用,所以这里介绍一些常用好用的模型.主要介绍attention和transformer系列.

Attention Is All You Need

abs

主流的序列转换模型基于复杂的递归或卷积神经网络,其中包括一个编码器和一个解码器。性能最好的模型还通过注意力机制将编码器和解码器连接起来。我们提出了一种新的简单网络架构—“transformer”,它完全基于注意力机制,无需递归和卷积

intro

递归神经网络,特别是长短期记忆和门控递归神经网络,已被牢固确立为语言建模和机器翻译等序列建模和转译问题的最先进方法。自此以后,许多人继续努力推动递归语言模型和编码器-解码器架构的发展。

递归模型通常按照输入和输出序列的符号位置进行计算。将位置与计算时间的步长对齐,它们会生成隐藏状态 h~t~ 的序列,作为前一个隐藏状态 h~t-1~ 和位置 t 的输入的函数。这种固有的序列性质排除了训练实例内的并行化,而在序列长度较长时,这一点变得至关重要,因为内存约束限制了跨实例的批处理。最近的研究通过因式分解技巧和条件计算显著提高了计算效率,同时也改善了后者的模型性能。然而,顺序计算的基本限制仍然存在。

在各种任务中,注意力机制已成为引人注目的序列建模和转导模型的一个组成部分,它可以对依赖关系进行建模,而无需考虑其在输入或输出序列中的距离。然而,除了少数情况,这种注意机制都是与递归网络结合使用的。

比如下图,利用一个双向RNN得到每个token的状态,利用一个简单的ffn聚合这些状态作为输出token的上一个状态

Image showing an encoder/decoder model with an additive attention layer

在这项工作中,我们提出了 Transformer 模型架构,它摒弃了递归而是完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。Transformer 可以大大提高并行化程度,在 8 个 P100 GPU 上只需训练 12 个小时,翻译质量就能达到新的水平。

Background

减少顺序计算的目标也是Extended Neural GPU、ByteNet和 ConvS2S的基础,它们都使用卷积神经网络作为基本构建模块,并行计算所有输入和输出位置的隐藏表示。在这些模型中,将两个任意输入或输出位置的信号联系起来所需的运算次数随位置间距离的增加而增加,ConvS2S 是线性增加,ByteNet 是对数增加。这就增加了学习远距离位置之间依赖关系的难度。在 Transformer 中,这将被减少到一个恒定的操作数(O(1)),尽管代价是由于平均注意力加权位置而降低了有效分辨率

自我注意(有时也称为内部注意)是一种注意机制,它将单个序列的不同位置联系起来,以计算序列的表征。自我注意已成功应用于多种任务中,包括阅读理解、抽象概括、文本引申和学习与任务无关的句子表征。

model architecture

大多数转导模型都具有编码器-解码器结构.在这里,编码器将输入的符号表示序列 (x1, …, xn) 映射为连续表示序列 z = (z1, …, zn)。 在给定 z 的情况下,解码器会逐个元素生成一个符号输出序列(y1, …, ym)。在每一步中,模型都是自动回归的,在生成下一步时,会消耗之前生成的符号作为额外输入。

image-20231108115505228

Encoder

编码器由 N = 6 层相同的层堆叠组成。每一层都有两个子层。第一个是多头自注意机制,第二个是简单的位置全连接前馈网络。我们在两个子层的每个周围都采用了残差连接,然后进行层归一化。也就是说,每个子层的输出都是 LayerNorm(x + Sublayer(x)),其中 Sublayer(x) 是子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层都会产生维数为 dmodel = 512 的输出。

Decoder

解码器也由 N = 6 层相同的层堆叠组成。除了每个编码器层中的两个子层外,解码器还插入了第三个子层,对编码器堆栈的输出执行多头关注。

与编码器类似,我们在每个子层周围采用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自我关注子层,以防止位置关注到后续位置。这种屏蔽,再加上输出嵌入偏移一个位置的事实,确保了对位置 i 的预测只能依赖于小于 i 的位置的已知输出。

Attention

注意力函数可以描述为将一个查询和一组键值对映射到一个输出,其中查询、键、值和输出都是向量。输出结果以值的加权和的形式计算其中分配给每个值的权重是通过查询与相应密钥的兼容性函数计算得出的

image-20231108120527812

上图就是一般用的q与k的计算方式,说白了就是矩阵相乘,而其中的mask是为了把其中用不上的token置为-∞,这样后面做softmax权重就是0了. 因为tensor维度都是相同的,q与k,

Scaled Dot-Product Attention

输入包括维度为 d~k~的query和key,以及维度为 d~v~的value。我们计算query与所有keys的点积,将每个点积除以 √dk,然后应用软最大函数获得值的权重。

最常用的两种注意力函数是加法注意力(additive attention)和点积(dot production)注意力。点积注意力与我们的算法相同,只是缩放因子为 1 √dk。

加法注意使用单隐层前馈网络计算相容函数(相当于用一个全连接网络得到一个输出)。虽然两者的理论复杂度相似,但点积注意力在实际应用中速度更快,空间效率更高,因为它可以使用高度优化的矩阵乘法代码来实现。

虽然在 dk 值较小的情况下,这两种机制的表现类似,但在 d~k~ 值较大的情况下,加法注意比点积注意更胜一筹。我们猜测,对于较大的 d~k~ 值,点积的幅度会越来越大,从而将软最大函数推向梯度极小的区域

也就是说除以d~k~原因是使得梯度更大,效果更好

Multi-Head attention

我们发现,将查询、键值和值分别线性投影到 d~k~、d~k~ 和 d~v~ 维度,而不是对 d~model~ 维度的键、值和查询执行单一的注意函数,这样做是有益的。

多头注意力允许模型在不同位置共同关注来自不同表征子空间的信息。而在单注意头的情况下,平均化会抑制这一点。

其中,投影是参数矩阵 W^Q^~i~∈R^dmodel×dk^ , W^K^ ~i~∈R^dmodel×dk^ , W^V^~i~∈R^dmodel×dv^ 和 W O∈R^hdv×dmodel^

Transformer的应用

在 “encoder-decoder 注意 “层中,query来自前一个decoder层,而memory keys和memory values则来自encoder的输出。这使得decoder中的每个位置都能关注输入序列中的所有位置。这模仿了序列到序列模型中典型的encoder-decoder注意机制。

encoder包含自注意层。在自注意层中,所有的键、值和查询都来自同一个地方,在这种情况下,就是encoder中上一层的输出。encoder中的每个位置都可以关注encoder上一层的所有位置。

同样,解码器中的自关注层允许解码器中的每个位置关注解码器中包括该位置在内的所有位置。我们需要防止decoder中的信息向左流动,以保持自动回归特性

通过点乘注意力中的mask实现,也就是在输出序列中,把后面的token得到的value设置为-∞,

Position-wise Feed-Forward Networks

除了注意力子层外,我们的编码器和解码器中的每一层都包含一个全连接的前馈网络,该网络分别对每个位置进行相同的处理。这包括两个线性变换,中间有一个 ReLU 激活。

虽然不同位置的线性变换相同,但各层使用的参数不同。

另一种描述方法是两个内核大小为 1 的卷积(全卷积)。输入和输出的维度为 d~model~ = 512,内层的维度为 d~ff~= 2048。

Embedding and Softmax

与其他序列转换模型类似,我们使用学习到的嵌入将输入标记和输出标记转换为维度为 d~model~的向量。我们还使用通常学习到的线性变换和softmax,将解码器输出转换为预测的下一个标记词概率,在模型中,我们在两个嵌入层和pre-softmax linear transformation之间共享相同的权重矩阵。

在嵌入层中,我们将这些权重乘以 √dmodel。

衍生

Bert

image-20231125145939351

BERT(来自 Transformers 的双向编码器表示)是一个非常大的多层 Transformer 网络,BERT-base 有 12 层,BERT-large 有 24 层,其旨在通过在所有层中联合调节左右上下文来预训练未标记文本的深度双向表示。因此,预训练的 BERT 模型只需一个额外的输出层即可进行微调,从而为各种任务(例如问答和语言推理)创建最先进的模型,而无需进行大量任务特定的架构修改。

Vit

image-20231125145906882

在CV领域,注意力要么与卷积网络结合使用,要么用来替换卷积网络的某些组件,整体结构保持不变。本文证明了CV领域不一定依赖CNN,使用纯粹的Transformer用于图片块序列,也可以很好的完成图像分类任务

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

image-20240110092327560

image-20240110093609755

The Bahdanau Attention Algorithm 2014

之前的处理NLP任务的方法[1406.1078] Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation (arxiv.org)[1409.3215] Sequence to Sequence Learning with Neural Networks (arxiv.org)将变长源句变为固定长度的向量,这种方式无疑会随着源句变长效果变差.

Bahdanau等人(2014)认为,这种将可变长度输入编码到固定长度向量中的方法会挤压源句子的信息,而不管其长度如何,导致基本编码器-解码器模型的性能随着输入句子长度的增加而迅速恶化。他们提出的方法用可变长度的矢量代替固定长度的矢量,以提高基本编码器-解码器模型的翻译性能。

名词解释: s~t-1~是上一个time step decoder的隐状态,c~t~是time step t的上下文向量,它是在每个时间步生成用于得到需要的输出y~t~,h~i~是用于捕获包含在整个输入句子中的信息,α~t,i~是每个annotation的权重,e~t,i~是alignment model生成的注意力分数,表示s~t-1~和h~i~匹配程度

img

对于encoder目的是生成annotation,采用了双向RNN,

decoder解码器的作用是通过关注源句子中包含的最相关的信息来产生目标单词。为此,它利用了一种注意力机制。
利用注意力机制计算上一步的hidden state和这一步的annotation

有两种实现方法,一种将输入的encode h与隐状态s concat起来,另一种使用两个W矩阵分别与它们相乘

这里v是权重向量.然后做个softmax,这样就得到在某个time step下得到权重

上下文向量c为α与annotation的weighted sum

最后y~t~的输出由decoder上一个输出y~t-1~,隐状态s~t-1~和c~t~进行计算

image-20240119120931215

The Luong Attention Mechanism 2015

提出了两种attention机制,包括global attention和local attention.

全局注意力跟Bahdanau类似但是试图更简化,局部注意力受到软注意力和硬注意影响并且只关注少数位置. 这两种注意力主要差别就是关注的上下文大小不同.

大致流程如下:

  1. 从输入序列中生成一系列annotations H = h~i~
  2. decoder的隐状态由上一层的隐状态和上层的decoder的输出决定
  3. alignment model用于计算一个score,使用隐状态和annotation
  4. 将aliment score做softmax方便作为权重
  5. 计算aliment score与annotation H的weighted sum
  6. 增加了一个隐状态,基于上下文向量和当前解码器隐藏状态的加权级联来计算注意力隐藏状态
  1. 解码器通过向其提供加权的注意力隐藏状态来产生最终输出

global attention

全局注意力模型在生成对齐分数时,并最终在计算上下文向量时,考虑输入句子中的所有源词。

第一种跟Bahdanau类似,第二种和第三种方法实现的乘法注意

local attentiAxialon

在处理所有源词时,全局注意力模型在计算上是昂贵的,并且对于翻译较长的句子可能变得不切实际。

在计算局部注意力时使用了一个窗口,假设中心是p~t~.

D是凭经验取,D有两种方法.

Bahdanau Attention的差别

1, 计算y使用的隐状态不同

img

2.Luong等人放弃了Bahdanau模型使用的双向编码器,而是将LSTM顶层的隐藏状态用于编码器和解码器。

3.Luong等人的全局注意模型研究了乘法注意作为Bahdanau加法注意的替代方法的使用。

General Attention Mechanism

上面讲的是比较早的了,现在很多使用Q,K,V来计算.可以进行类比,上一层的隐状态s~t-1~就是Q,而K,V是H

image-20240119132119458

参考资料

  1. The Transformer Attention Mechanism - MachineLearningMastery.com
-------------本文结束感谢您的阅读-------------
感谢阅读.

欢迎关注我的其它发布渠道