Transformer模型进化史:从翻译到“全能选手”,它经历了什么?

智能也得细细瞧 2025-03-08 16:12:42

Transformer 是一种由谷歌研究人员开发的深度学习架构,它基于多头注意力机制,这一机制最早在一篇名为《Attention Is All You Need》的论文中提出。文本会先被转换为数值表示,也就是 Token,而每个 Token 则会通过词嵌入表转换为向量。在每一层中,每个 Token 都会通过并行多头注意力机制,在一个上下文窗口范围内与其他 Token 建立联系,从而增强主要 Token 的信号,并减弱不太重要 Token 的信号。

Transformer 的一个主要优势在于它没有循环单元,因此与早期的循环神经网络架构(如 LSTM)相比,训练时间大大缩短。现在,各种 Transformer 变体已被广泛应用于大型语言模型(LLM)的训练中。

Transformer 最初是为了改进机器翻译架构而开发的,但后来人们发现它在许多实际应用中都有用武之地。如今,它已被应用于大规模自然语言处理、计算机视觉(视觉 Transformer)、强化学习、音频、多模态学习、机器人技术,甚至下棋等领域。这也促进了像 GPT(生成式预训练 Transformer)和 BERT(来自 Transformer 的双向编码器表示)等预训练模型的发展。

transformer 模型

Transformer历史沿革:

多年来,序列建模和生成任务一直都是使用循环神经网络(RNN)来完成的。一个被广泛引用的早期例子是 Elman 网络。理论上,信息的标记可以沿着序列传播到任意远的距离,但实际上,梯度消失问题导致模型在长句末尾的状态,无法保留前面标记的精确、可提取的信息。

RNN 循环神经网络

LSTM 是一个关键的突破,它通过各种创新来克服梯度消失问题,从而可以高效地学习长序列建模。其中一项关键创新是注意力机制,该机制使用神经元将其他神经元的输出相乘,也就是所谓的乘法单元。使用乘法单元的神经网络后来被称为 sigma-pi 网络或高阶网络。在 Transformer 模型出现之前,LSTM 一度成为长序列建模的标准架构。然而,和大多数 RNN 一样,LSTM 仍然使用顺序处理,也就是说,RNN 每次只操作一个 Token,从第一个到最后一个进行串行计算,无法对序列中的所有 Token 进行并行操作。

现代 Transformer 克服了这一问题,但与 RNN 不同的是,它所需的计算时间与上下文窗口大小呈二次方关系。它的两个网络之一具有“快速权重”或“动态链接”。慢速神经网络通过梯度下降学习生成键和值,用于计算快速神经网络的权重变化,快速神经网络计算查询的答案。后来证明,这等同于未规范化的线性 Transformer。

使用 Seq2Seq 进行注意力机制:

编码器-解码器的概念在 2010 年代初就已出现。最常被引用为 Seq2Seq 创始者的论文是 2014 年同时发表的两篇论文。

一个 380M 参数的机器翻译模型使用了两个 LSTM 网络。其架构由两部分组成:编码器是一个 LSTM,它接收一个 Token 序列并将其转换为一个向量;解码器是另一个 LSTM,它将向量转换为一个 Token 序列。类似地,另一个 130M 参数的模型使用了门控循环单元(GRU)而不是 LSTM。后来的研究表明,对于 Seq2Seq 来说,GRU 既不比 LSTM 好,也不比 LSTM 差。

这些早期的 Seq2Seq 模型没有注意力机制,只有在处理完源文本的最后一个单词后,才能访问状态向量。尽管理论上,这样的向量保留了有关整个原始句子的信息,但实际上这些信息保留得并不好。这是因为输入由一个循环网络按顺序处理为固定大小的输出向量,然后由另一个循环网络处理为输出。如果输入很长,则输出向量将无法包含所有相关信息,从而降低输出质量。

RNNsearch 模型为机器翻译的 Seq2Seq 引入了注意力机制,以解决瓶颈问题(固定大小的输出向量),使模型能够更轻松地处理长距离依赖关系。该模型的名称是因为它“模拟在解码翻译过程中搜索源句子”。

2016 年,谷歌翻译改版为谷歌神经机器翻译,取代了之前基于统计机器翻译的模型。新模型是一个 Seq2Seq 模型,其中编码器和解码器都是 8 层双向 LSTM。它花了九个月的时间开发,并且比花了十年时间开发的统计方法表现更好。

并行化注意力:

Transformer框架

2017 年,原始(100M 大小)编码器-解码器 Transformer 模型在《Attention is all you need》论文中被提出。当时,研究的重点是改进用于机器翻译的 Seq2Seq,通过删除其递归来并行处理所有 Token,但保留其点积注意力机制以保持其文本处理性能。这导致了多头注意力模型的引入,由于使用独立的头和并删除了递归计算,该模型更容易并行化。它的可并行性是其在大型神经网络中广泛使用的重要因素。

早在 2017 年春季,甚至在《注意力就是你所需要的》预印本发表之前,其中一位合著者就应用了该架构的“仅解码器”变体来生成虚构的维基百科文章。现在,Transformer 架构与许多生成模型一起使用,为正在进行的 AI 热潮做出了贡献。

bert 模型

在语言建模中,ELMo 是一种双向 LSTM,可生成上下文化的词向量,改进了词袋和 Word2Vec 的研究方向。紧随其后的是 BERT,这是一种仅使用编码器的 Transformer 模型。2019 年 10 月,谷歌开始使用 BERT 处理搜索查询。2020 年,谷歌翻译用 Transformer-编码器-RNN-解码器模型取代了之前的 RNN-编码器-RNN-解码器模型。

从 2018 年开始,OpenAI GPT 系列仅解码器的 Transformer 成为自然语言生成领域的佼佼者。2022 年,基于 GPT-3 的聊天机器人 ChatGPT 出人意料地流行起来,引发了大型语言模型的热潮。

GPT 模型架构

自 2020 年以来,Transformer 已应用于文本以外的其他模态,包括视觉 Transformer、语音识别、机器人技术和多模态。视觉 Transformer 反过来又刺激了卷积神经网络的新发展。图像和视频生成器(如 DALL-E、Stable Diffusion 和 Sora)使用 Transformer 来分析输入数据(如文本提示),将其分解为“token”,然后使用自注意力计算每个 Token 之间的相关性,这有助于模型理解数据中的上下文和关系。

vinsion transformer 模型

稳定训练的方法:

普通的 Transformer 架构很难收敛。在原始论文中,作者建议使用学习率预热。也就是说,在训练的第一部分,学习率应该从 0 线性增加到最大值(通常建议为总训练步骤数的 2%),然后再衰减。2020 年的一篇论文发现,在多头注意力层和前馈层之前(而不是之后)使用层归一化可以稳定训练,而不需要学习率预热。

a: psot norm b:pre norm

预训练-微调:

Transformer 通常首先在大型通用数据集上通过自监督学习进行预训练,然后在小型特定任务数据集上进行监督微调。预训练数据集通常是未标记的大型语料库,例如 The Pile。预训练和微调的任务通常包括:

语言建模下一句预测问答阅读理解情绪分析释义

transformer 模型结构

架构:

所有 Transformer 均具有相同的主要元件:

标记器(Tokenizer): 将文本转换为 Token。

嵌入层: 将 Token 和 Token 的位置转换为向量表示。

Transformer 层: 对向量表示进行重复转换,提取越来越多的语言信息。这些层由交替的注意层和前馈层组成。Transformer 层有两种主要类型:编码器层和解码器层。

解嵌入层: 将最终的向量表示转换回 Token 上的概率分布。

Tokenizer:

由于 Transformer 架构本身处理数字数据,而不是文本,因此必须在文本和 Token 之间进行转换。Token 是一个表示字符或一小段字符的整数。在输入端,输入文本被解析为 Token 序列。同样,在输出端,输出 Token 被解析回文本。在文本和 Token 序列之间进行转换的模块是 Tokenizer。

所有 Token 的集合就是 Tokenizer 的词汇表,其大小就是词汇表大小。当遇到词汇表之外的标记时,通常会使用特殊标记,写为“[UNK]”,表示“未知”。

一些常用的标记器是字节对编码、WordPiece 和 SentencePiece。

嵌入:

每个 Token 通过查找表转换为嵌入向量。换句话说,它将 Token 的独热表示乘以嵌入矩阵。例如,如果输入令牌是 3 那么独热表示就是 [0, 0, 0, 1, 0, 0, ...],其嵌入向量为将标记嵌入向量添加到它们各自的位置编码向量,从而产生输入向量序列。

解除嵌入:

反嵌入层几乎与嵌入层相反。嵌入层将标记转换为向量,而反嵌入层将向量转换为标记的概率分布。反嵌入层是一个线性 Softmax 层:矩阵有形状嵌入矩阵和非嵌入矩阵有时需要互相转置,这种做法称为权重绑定。

位置编码:

位置编码是序列中标记相对位置的固定大小向量表示:它为转换器模型提供有关单词在输入序列中的位置的信息。

Transformer模型架构

多层编码-解码器

和早期的 Seq2Seq 模型一样,最初的 Transformer 模型也采用了编码器-解码器架构。编码器由多层编码层组成,这些编码层逐层处理所有输入 Token;解码器则由多层解码层组成,迭代处理编码器的输出和解码器自身迄今为止的输出 Token。

编码器-解码器

每个编码器层的核心作用是创建 Token 的上下文化表示,其中每个表示都对应一个 Token,并会通过自注意力机制“混合”来自其他输入 Token 的信息。每个解码器层包含两个注意力子层:交叉注意力用于合并编码器的输出(上下文化的输入 Token 表示),自注意力则用于“混合”输入到解码器的 Token 之间的信息(也就是在推理过程中逐步生成的 Token)。

前馈神经网络

无论是编码器层还是解码器层,都包含前馈神经网络,用于对自身的输出进行额外处理。同时,残差连接和层归一化步骤也被广泛应用,以提升模型的训练效果。值得一提的是,这些前馈层包含了 Transformer 模型中的绝大部分参数。

缩放点积注意力机制

缩放点积注意力机制

Transformer 架构中使用的注意力机制是缩放的点积注意力单元。对于每个单元,模型会学习三个权重矩阵:查询权重、键权重以及价值权重。

注意力机制计算公式

该模块的核心在于处理三个序列:查询序列、键序列和值序列。这三个序列的长度可能不同,但序列中的每个条目都是维度相同的向量。

在计算过程中,查询序列中的每个向量都会与查询权重矩阵相乘,生成查询向量。所有查询向量组合在一起,就形成了查询矩阵。键矩阵和价值矩阵也通过类似的方式构建。

通常情况下,查询权重、键权重和价值权重都是方阵,这意味着查询向量、键向量和价值向量的维度是相同的。

缩放注意力机制

注意力权重的计算,是使用查询向量和键向量的点积实现的。为了在训练过程中稳定梯度,注意力权重会被一个关键向量维度的平方根所除,并通过 Softmax 函数进行归一化。通过使用不同的矩阵,Transformer 模型能够学习到不对称的注意力:如果 Token A 关注 Token B,并不一定意味着 Token B 也会关注 Token A。注意力单元对 Token 的输出,是所有 Token 值向量的加权和,权重由 Token 的注意力决定。

所有 Token 的注意力计算,都可以用 Softmax 函数表示为一个大型矩阵计算。这对于训练非常有帮助,因为可以利用计算矩阵运算优化来快速完成计算。

多头注意力机制

多头注意力机制

多头注意力机制的基本思想是将注意力机制分成多个"头",每个头都独立地学习不同的表示空间中的注意力权重。基本流程如下:

输入向量首先通过线性投影分别生成查询(Query)、键(Key)和值(Value)三组向量将这三组向量进一步分割成多个头,每个头处理输入的不同子空间每个头独立地执行注意力计算最后将所有头的输出拼接起来,并通过一个线性变换得到最终输出

多头注意力机制

为什么需要多头设计呢?主要有以下几个原因:

捕捉不同方面的信息:每个注意力头可以关注输入序列的不同方面或特征,增强了模型理解复杂模式的能力。例如,一个头可能关注语法结构,另一个可能关注语义关系。增强表示能力:多头机制让模型能够同时从多个子空间学习信息,提高了表示能力和灵活性。稳定训练过程:多头设计可以看作是一种集成方法,通过组合多个独立的注意力机制,降低了训练的方差,使模型表现更稳定。允许并行计算:多头机制可以并行执行,提高计算效率。处理不同距离的依赖关系:不同的头可能专注于捕捉不同距离的依赖关系,有的关注局部信息,有的关注全局信息。

编码器

编码器

每个编码器层由两个主要组件组成:自注意力机制和前馈层。它将输入作为输入向量序列,应用自注意力机制,生成中间向量序列,然后对每个向量分别应用前馈层。编码器层是堆叠的。第一个编码器层从嵌入层获取输入向量序列,产生一个向量序列。这个向量序列由第二个编码器处理,依此类推。然后,解码器使用最后一个编码器层的输出。由于编码器一次性处理整个输入,每个标记都可以关注其他每个标记(全部关注),因此不需要因果掩码。

解码器

解码器

每个解码器由三个主要组件组成:因果掩码自注意力机制、交叉注意力机制和前馈神经网络。解码器的功能与编码器类似,但加入了一个额外的注意力机制,该机制从编码器生成的编码中提取相关信息。这种机制也可以称为编码器-解码器注意力机制。

与第一个编码器一样,第一个解码器将输出序列的位置信息和嵌入作为输入。Transformer 不得使用当前或未来的输出来预测输出,因此必须部分屏蔽输出序列以防止这种反向信息流。因此,解码器中的自注意模块需要添加掩码矩阵。

相比之下,交叉注意机制关注的是编码器的输出向量,该向量在解码器开始解码之前就已计算出来。因此,交叉注意机制中无需进行掩码。

最后一个解码器后面是最终的反嵌入层。以产生词汇表上的输出概率。然后,根据概率对其中一个标记进行采样,并且可以再次运行解码器以产生下一个标记,依此类推,以自回归方式生成输出文本。

完整的 transformer 架构

每个编码器层包含 2 个子层:自注意力和前馈网络。每个解码器层包含 3 个子层:因果掩码自注意力、交叉注意力和前馈网络。

完整 Transformer 架构的框图

最后的细节点是残差连接和层归一化(LayerNorm 或 LN),虽然从概念上讲没有必要,但对于数值稳定性和收敛却是必需的。

引入残差连接是为了避免梯度消失问题,稳定训练过程,可以表示为:y = F(x) + x。表达式表示输出 y 是输入 x 的变换(F(x))与输入本身(x)之和。添加输入 x 可以保留输入信息,避免 F(x) 的梯度接近于零时出现问题。

与前馈网络模块单独应用于每个向量类似,LayerNorm 也单独应用于每个向量。2017 年的原始 Transformer 采用了后 LN 惯例。它很难训练,需要仔细调整超参数,并需要对学习率进行“热身”,即从小开始逐渐增加。2018 年多次提出的前 LN ,被发现更容易训练,不需要热身,从而可以更快地收敛。

DeepSeek transformer 模型框架

Transformer 模型已在标准深度学习框架(如 TensorFlow 和 PyTorch)中实现。Transformers 是由 Hugging Face 制作的一个库,提供基于 Transformer 的架构和预训练模型。

Transformer 在自然语言处理 (NLP) 领域取得了巨大成功。许多大型语言模型(如 GPT-2、GPT-3、GPT-4、Albert、Claude、BERT、XLNet、RoBERTa 和 ChatGPT)展示了 Transformer 执行各种与 NLP 相关的子任务及其相关的实际应用的能力,包括:

机器翻译时间序列预测文档摘要文档生成命名实体识别(NER)根据自然语言表达的需求编写计算机代码。语音转文字

除了传统的 NLP 之外,Transformer 架构在其他应用中也取得了成功,例如:

生物序列分析视频理解蛋白质折叠(例如 AlphaFold)评估棋盘位置

正是由于 transformer 模型的大火,才带动了更多 transformer 模型的变体模型,比如视觉 transformer,音频 transformer 等等,而最近大火 DeepSeek 模型也是 transformer 模型。且注意力机制也进行了大量的变现,比如稀疏注意力机制,flash attention等等,而DeepSeek 模型采用的是潜在注意力机制。关于 DeepSeek 的潜在注意力机制以及 MoE 混合专家模型,我们后期再进行一一分享。可以说学通了 transformer 模型,其他大模型都是在 transformer 模型的基础上演变而来,理解起来更加得心应手了。

0 阅读:0
智能也得细细瞧

智能也得细细瞧

感谢大家的关注