在深度学习中,transformer(直译为“变换器”)是一种基于多头注意力机制的人工神经网络架构,其中文本被转换为称为词元(token)的数值表示,每个词元通过从词嵌入表中查找转换为一个向量。在每一层,每个词元都通过并行的多头注意力机制在上下文窗口的范围内与其他(未屏蔽的)词元进行上下文关联,从而放大关键词元的信号并减弱不太重要的词元,从而按输入数据各部分重要性的不同而分配不同的权重。采用该架构的模型主要用于自然语言处理(NLP)与计算机视觉(CV)领域。
和循环神经网络(RNN)一样,transformer旨在处理自然语言等顺序输入数据,可应用于翻译、文本摘要等任务。但transformer的优势在于它没有循环单元,能够一次性处理所有输入数据。注意力机制可以为输入序列中的任意位置提供上下文。如果输入数据是自然语言,则transformer不必像RNN一样一次只处理一个单词,这种架构允许更多的并行计算,并以此减少训练时间。
现代版transformer于2017年由谷歌大脑的一个团队在论文《Attention Is All You Need》中提出。 但此后应用范围不断扩大。它们被用于大规模自然语言处理、计算机视觉()、强化学习、音频处理、多模态学习、机器人,甚至可以下国际象棋,逐步取代长短期记忆(LSTM)等RNN模型成为了NLP问题的首选模型。Transformer模型也催生了预训练系统(迁移学习)的发展,并行化优势允许其在更大的数据集上进行训练,例如GPT 和BERT。这些系统使用了维基百科、等大型语料库进行训练,并可以针对特定任务进行微调。
跟2017年的原始模型相比,一些现代模型(如RoBERTa)在词元化阶段可以改用更高效的WordPiece算法;位置编码则可能使用更新的旋转位置编码(RoPE)方案。
背景
在transformer模型之前,大多数最先进的NLP系统都依赖于诸如LSTM、(GRU)等门控RNN模型,并在此基础上增加了注意力机制。transformer正是在注意力机制的基础上构建的,但其没有使用RNN结构,这表明仅依靠注意力机制就能在性能上比肩加上了注意力机制的RNN模型。2014年,注意力机制的提出为transformer奠定了理论基础。
顺序处理
RNN模型按顺序处理每一个标记(token)并维护一个状态向量,其中包含所有已输入数据的表示。如要处理第n个标记,模型将表示句中到第n-1个标记为止的状态向量与最新的第n个标记的信息结合在一起创建一个新的状态向量,以此表示句中到第n个标记为止的状态。从理论上讲,如果状态向量不断继续编码每个标记的上下文信息,则来自一个标记的信息可以在序列中不断传播下去。但在实践中,这一机制是有缺陷的:梯度消失问题使得對於長序列,模型訓練效果較差。且按順序處理的機制使得长句末尾的模型状态会缺少前面标记的精确信息。此外,每个标记的计算都依赖于先前标记的计算结果,这也使得其很难在现代深度学习硬件上进行并行处理,这导致了RNN模型训练效率低下。
自注意力机制
注意力机制解决了上述这些问题。这一机制让模型得以提取序列中任意先前点的状态信息。注意力层能够访问所有先前的状态并根据学习到的相关性度量对其进行加权,从而提供相距很远的标记的相关信息。
翻译是一个能够突显注意力机制优势的例子,其中上下文对于句子中单词的含义至关重要。例如在一个将英语翻译为法语的系统中,法语输出的第一个词很可能取决于英语输入的前几个词。然而在经典的LSTM模型中,为了产生法语输出的第一个单词,模型需要访问处理完最后一个英语单词后得到的状态向量。理论上这个向量包含了整个英语句子的信息,从而为模型提供所有必要的知识。然而在实践中,LSTM通常无法很好地保存这些信息。可以通过添加注意力机制来解决这个问题:解码器可以访问每个英语输入单词的状态向量,而不仅仅是最后一个单词。同时模型可以学习注意力权重,这些权重决定了对每个英语输入状态向量的关注程度。
在RNN模型中添加注意力机制能提高模型的性能。而transformer架构的发展表明,注意力机制本身就足够强大,并且不需要像RNN模型一样再对数据进行顺序循环处理。transformer模型采用了没有RNN模型的注意力机制,它能够同时处理所有标记并计算它们之间的注意力权重。由于注意力机制仅使用来自之前层中其他标记的信息,因此可以并行计算所有标记以提高训练速度。
架构
输入
输入文本使用字节对编码以进行标记化,每个标记通过词嵌入转换为向量。然后,将标记的位置信息添加到嵌入向量中。
编码器-解码器架构
与早期的seq2seq模型一样,原始的Transformer模型使用「编码器-解码器」(encoder–decoder)架构。编码器由逐层迭代处理输入的编码层组成,而解码器则由对编码器的输出执行相同操作的解码层组成。
每个编码层的功能是确定输入数据的哪些部分彼此相关。它将其编码作为输入再传递给下一个编码层。每个解码层的功能则相反,读取被编码的信息并使用整合好的上下文信息来生成输出序列。为了实现这一点,每个编码层和解码层都使用了注意力机制。
对于每个输入,注意力会权衡每个其他输入的相关性,并从中提取信息以产生输出。每个解码层都包含一个额外的注意力机制,它会在从编码层提取信息之前先从之前解码器的输出中提取信息。
编码层和解码层都有一个前馈神经网络用于对输出进行额外处理,并包含残差连接和层归一化步骤。每个注意力头的计算可以并行执行,这使得处理速度得以加快。注意力层的输出被连接起来传递到前馈神经网络层。
编码器
每个编码器由一个自注意力机制和一个前馈神经网络两个主要部分组成。自注意力机制接受来自前一个编码器的输入编码,并计算它们之间相关性的权重以生成输出编码。前馈神经网络则进一步单独处理每个输出编码。然后将这些输出编码作为输入传递给下一个编码器以及解码器。
第一个编码器将输入序列的位置信息和嵌入作为其输入。位置信息向transformer模型提供了序列的顺序信息,这是模型中唯一利用这一信息的部分。,前者可以将计算复杂度从O(N^2)减少为O(N\ln N) ,后者则可以减少到O(N),其中N表示序列长度。其实现得益于与可逆层。
原始的Transformer模型需要与上下文窗口大小成二次方的内存大小。无注意力transformer模型(attention-free transformer)则将对内存的需求减少为线性依赖,同时通过连接链与值保留了transformer模型的优势。
2020年底推出了用于比较不同transformer架构的基准测试。
现代演进
稀疏注意力
*Block Sparse(GPT-3):局部窗口注意力+随机注意力
*Longformer:膨胀滑动窗口模式
混合架构
训练
transformer模型通常会进行自监督学习,包括无监督预训练和监督微调。由于监督微调时使用的带标签训练数据一般比较有限,预训练通常会在比微调时所用的更大的数据集上完成。预训练和微调的任务通常包括:
- 语言建模
- 包括GPT-2、GPT-3、BERT、XLNet与RoBERTa在内的许多预训练模型展示了transformer模型执行各种NLP相关任务的能力,并有很多潜在实际应用。这些应用包括:
- 机器翻译
*
- 文本生成
- 命名实体识别
- 生物序列分析
- 视频理解
2020年,transformer架构(更具体地说是GPT-2)被证明可以通过微调执行下象棋的任务。transformer模型也已应用于图像处理,其结果可与卷积神经网络相媲美。
实现
transformer模型已在TensorFlow、PyTorch等标准深度学习框架中实现。
「transformers」是由Hugging Face制作的一个库,提供基于transformer的架构和预训练模型。
参见
- 注意力机制
- GPT-3
- BERT
- 悟道预训练模型
- OpenAI
- ChatGPT
- 深度学习
- Gemini
- Claude
- LLaMA
- DeepSeek-R1
参考文献
评论 (0)