第二章:Transformer 模型

正如第一章所述,自从 BERT 和 GPT 模型取得重大成功之后, Transformer 模型已经替代循环神经网络(RNN)、卷积神经网络(CNN)等传统神经网络结构,成为各种 NLP 模型的标配。

本章将介绍 Transformer 模型的定义及发展,希望它可以成为你探究 Transformer 的指南。

2.1 Transformer 起源

2017 年 Google 在论文《Attention Is All You Need》中提出了 Transformer 模型用于序列标注,在翻译任务上超过了先前最优秀的循环神经网络模型。与此同时,Fast AI 在论文《Universal Language Model Fine-tuning for Text Classification》中提出了一种名为 ULMFiT 的迁移学习方法,将在大规模数据上预训练好的 LSTM 模型迁移用于文本分类,只用很少的标注数据就达到了最佳性能。

这些具有开创性的工作促成了两个著名 Transformer 模型的出现:

  • GPT (the Generative Pretrained Transformer);
  • BERT (Bidirectional Encoder Representations from Transformers)。

通过将 Transformer 架构与无监督学习相结合,我们不再需要对每一个任务都从头开始训练模型,并且几乎在所有 NLP 任务上都远远超过先前的最强基线。

GPT 和 BERT 被提出之后,NLP 领域出现了越来越多基于 Transformer 架构的模型,其中一些具有代表性的模型如图 2-1 所示:

transformers_chrono

图 2-1 具有代表性的 Transformer 模型
  • 2019 年 2 月:GPT-2,GPT 的改进版,规模更大,由于伦理方面的顾虑,并未立即公开发布。
  • 2019 年 10 月:T5,一个专注于多任务的序列到序列 Transformer 架构模型。
  • 2020 年 5 月,GPT-3,GPT-2 的更大版本,无需微调就能完成各种任务(零样本学习)。
  • 2022 年 1 月:InstructGPT,GPT-3 的特殊版本,经过训练可以更好地遵循指令。
  • 2023 年 1 月:Llama,一个能够生成多种语言文本的大型语言模型。
  • 2023 年 3 月:Mistral,一款拥有 70 亿参数的语言模型,在所有基准测试中都优于 Llama 2-13B,它利用分组查询注意力机制(group-query attention)加快推理速度,并通过滑动窗口注意力机制(sliding window attention)支持处理任意长度的序列。
  • 2024 年 5 月:Gemma 2,一系列轻量级开源模型,参数范围从 20 亿到 270 亿,融合了交错的局部-全局注意力机制(interleaved local-global attention)和组查询注意力机制,其中较小的模型使用知识蒸馏进行训练,其性能可与规模大 2-3 倍的模型相媲美。
  • 2024 年 11 月:SmolLM2,一款先进的小型语言模型(1.35 亿至 17 亿个参数),为移动和边缘设备开启了新的可能性。

2.2 Transformer 定义

2.2.1 Transformer 是语言模型

正如第一章中介绍的那样,Transformer 模型本质上是语言模型,旨在准确建模文本序列的生成概率,因此主流的做法就是采用自监督学习的方式在大量原始文本(称为生语料)上进行训练,让模型具备上下文感知的语义表征能力。

延伸

自监督学习(Self-supervised learning)是一种训练方式,其训练目标可以根据输入自动计算出来,因此开展训练可以不需要人工标注数据。

下面是两个常用的预训练任务:

  • 基于句子的前 $n$ 个词来预测下一个词,因为输出依赖于之前和当前的输入,因此该任务被称为因果语言建模(Causal Language Modeling,CLM),如图 2-2 所示;

    causal_modeling

    图 2-2 因果语言建模示意图
  • 基于上下文,即周围的词语,来预测句子中被遮盖掉的词语(Masked Word),因此该任务被称为遮盖语言建模(Masked Language Modeling,MLM),如图 2-3 所示。

    masked_modeling

    图 2-3 遮盖语言建模示意图

思考

回忆一下,“因果语言建模”的思路实际上就是第一章中说的神经网络语言模型(NNLM),即只使用前面的词来预测当前词,而“遮盖语言建模”实际上就是 Word2Vec 模型提出的 CBOW 训练方法。这些早期工作将语言模型用于文本表示学习的思路,在自然语言处理领域产生了重要影响,至今仍然在发光发热。

但是,经过预训练后的语言模型只具备基础的语义表征能力,虽然可以对训练所用的语言产生统计意义上的理解,例如可以根据上下文预测被遮盖掉的词语,但是如果直接拿来完成实际任务,效果往往并不好。

因此,通常还会采用迁移学习(Tansfer Learning)方法,使用特定任务的标注语料以监督学习的方式对模型参数进行微调 (fine-tune),使得模型适配特定任务,从而有效提升模型在下游任务上的性能。

2.2.2 Transformer 是大型模型

除了 DistilBERT 模型等少数例外,大部分 Transformer 模型都为了取得更好的性能而不断增加模型规模(参数量)和增加预训练数据。图 2-4 展示了初期 Transformer 模型规模的变化趋势:

nlp_models_size

图 2-4 Transformer 模型规模的变化趋势

但是,从头训练一个预训练语言模型,尤其是大型语言模型,需要海量的数据,不仅时间和计算成本非常高,对环境的影响也很大,如图 2-5 所示:

carbon_footprint

图 2-5 各种人类活动的碳排放对比

可以想象,如果每一次训练语言模型都需要从头开始,将耗费巨大且不必要的全球成本,因此共享语言模型非常重要。只要在训练好的模型权重基础上继续构建模型,就可以大幅地降低计算成本和碳排放。

延伸

现在也有一些工作致力于在尽可能保持模型性能的情况下大幅减少参数量,达到用“小模型”获得媲美“大模型”的效果,例如模型蒸馏。

2.2.3 模型微调

如前文所述,预训练是一种从头开始训练模型的方式:所有的模型权重先被随机初始化,然后在没有任何先验知识的情况下开始训练,如图 2-6 所示。这个过程不仅需要海量的训练数据,而且时间和经济成本都非常高。

pretraining

图 2-6 预训练语言模型过程示意图

因此,在大部分情况下我们都是将别人训练好的模型权重通过迁移学习的方式应用到自己的模型中,使用标注好的任务语料对模型进行“二次训练”,使模型适配于特定任务,这个过程就称为模型微调(Fine-Tuning)。

这种迁移学习的好处是:

  • 预训练模型很可能已经在一个与微调数据集存在相似处的数据集上进行了训练,通过微调可以充分利用模型在预训练过程中获得的知识。
  • 由于模型已经在大量数据上进行过预训练,因此微调时只需要很少的数据量就可以达到不错的性能。

例如,我们可以选择一个在大规模英文语料上预训练好的模型,使用 arXiv 语料进行微调,以生成一个面向学术/研究领域的模型。这个微调的过程只需要很少的数据,相当于将预训练模型已经获得的知识“迁移”到了新的领域,因此被称为迁移学习,如图 2-7 所示。

finetuning

图 2-7 微调语言模型过程示意图

与从头训练相比,微调模型所需的时间、数据、经济和环境成本都要低得多,并且与预训练相比,微调训练的约束更少,因此迭代尝试不同的微调方案也更快更容易。实践证明,除非你有海量数据,否则相比训练一个专门的模型,选择一个尽可能接近实际任务的预训练模型进行微调会是更好选择,也就是所谓“站在巨人的肩膀上”。

2.3 Transformer 模型

2.3.1 Transformer 组成

标准 Transformer 模型主要由左边的编码器(Encoder)和右边的解码器(Decoder)两个模块组成,如图 2-8 所示。其中编码器负责接收输入并构建输入的语义表示(语义特征),从而理解输入内容,而解码器则利用编码器输出的语义表示(语义特征)以及前序输出来生成目标序列。

transformers_blocks

图 2-8 微调语言模型过程示意图

特别地,这两个模块都可以根据任务需求而单独使用。通常来说,纯编码器模型(Encoder-Only)更适用于需要理解输入的任务,例如句子分类、命名实体识别等。纯解码器模型(Decoder-Only)更适用于生成式任务,例如文本生成。而编码器-解码器模型(Encoder-Decoder)或序列到序列模型(Sequence-to-Sequence)则适用于需要基于输入的生成式任务,例如翻译、摘要等。后续在 2.4 节中会具体地介绍每一种架构。

2.3.2 注意力层

Transformer 模型的一个关键特性是它由称为注意力层的特殊层构成(Attention Layers),如先前所述,提出 Transformer 结构的论文就叫《Attention Is All You Need》。顾名思义,注意力层的作用就是让模型在处理文本时,将注意力放在输入句子中的某些词上,并或多或少地忽略其他词。

例如要将英文“You like this course”翻译为法语,由于法语中“like”这个动词会根据主语的不同而改变词形,因此需要同时关注相邻的词“You”才能正确翻译“like”,而句子中的其他部分与该词的翻译无关。同样地,在翻译“this”时还需要注意“course”,因为“this”的法语翻译会根据所指名词的极性而变化,而句子中的其他单词与“course”的翻译无关。对于更复杂的句子(以及更复杂的语法规则),要正确翻译某个词,模型甚至需要关注句子中位置较远的词。

同样的概念也适用于其他 NLP 任务,虽然词语本身就有语义,但是其语义会受到上下文的影响。例如“我买了一个苹果”和“我买了一个苹果手机”中的“苹果”具有完全不同的语义。

思考

在上一章中我们已经讨论过多义词的问题,这也是 Word2Vec 这些早期神经语言模型所解决不了的。而预训练语言模型通过学习上下文感知的词表示才解决了这个问题。

相信你已经对注意力层有了一些初步的认识,如果存在疑惑也不用着急,在下一章中我们会对注意力机制进行更详细的介绍。

2.3.3 原始架构

Transformer 模型最初是为翻译任务设计的,在训练过程中,编码器接收源语言的句子作为输入,而解码器则接受目标语言的相同句子作为输入。在编码器中,由于翻译一个词语需要依赖于上下文,因此注意力层可以访问句子中的所有词,而解码器则是按顺序工作,在生成每个词时,注意力层只能访问前面已经翻译出的单词。例如,假设当前翻译模型已经翻译出了三个词,此时会把这三个词作为输入送入解码器,然后解码器会结合编码器的所有输入来预测第四个词。

延伸

实际训练中为了加快速度,会将整个目标序列都送入解码器,然后在注意力层中通过 Mask 遮盖掉未来的词语以防止信息泄露。例如在预测第三个词时,模型应该只能访问到已生成的前两个词,如果能访问到第三个甚至后面的词就相当于作弊了。

原始 Transformer 模型的架构如图 2-9 所示,编码器在左侧,解码器在右侧:

transformers

图 2-9 Transformer 模型结构

其中,解码器模块中的第一个注意力层关注解码器所有先前的输出,而第二个注意力层则是使用 编码器的输出,因此解码器可以基于整个输入句子来更好地预测当前词。这对于翻译任务非常有用,因为不同语言下的词语顺序可能并不一致(不能逐词翻译),所以源语言句子后部的词语可能反而对目标语言句子前部词语的预测非常重要。

延伸

在编码器或解码器的注意力层中,还会使用注意力掩码(Attention Mask)来遮盖掉某些特殊词以防止模型关注它们,例如在批量处理时为了使所有输入长度相同而添加的特殊填充词(padding)。

2.4 Transformer 架构

如 2.3.1 节所述,虽然各种 Transformer 模型层出不穷,但是按模型架构可以将它们分为三类,如图 2-10 所示:

  • 纯编码器模型(Encoder-Only):只包含编码器部分,采用双向语言建模,从两个方向理解上下文。适合需要深度理解文本的任务,例如文本分类、命名实体识别等,典型代表如 BERT。
  • 纯解码器模型(Decoder-Only):只包含解码器部分,从左到右处理文本。尤其擅长文本生成任务,可以根据提示完成句子、撰写文章,甚至生成代码,典型代表如 GPT、Llama;
  • 编码器-解码器模型(Encoder-Decoder):结合了编码器和解码器,使用编码器理解输入,解码器生成输出。擅长序列到序列任务,例如翻译、摘要、问答等,典型代表如 T5、BART。

transformers_architecture

图 2-10 Transformer 架构

下面对这三种模型框架进行更详细的介绍。

2.4.1 编码器模型

纯编码器模型只使用 Transformer 模型中的编码器模块,在每个阶段,注意力层都可以访问到原始输入句子中的所有词,即具有“双向”注意力机制,也被称为自编码模型(Auto-Encoding)。

这些模型通常通过破坏给定的句子(例如随机遮盖其中的词语)然后让模型进行重构来进行预训练,最适合处理那些需要理解整个句子语义的任务,例如句子分类、命名实体识别(词语分类)、抽取式问答等。

采用纯编码器架构的一些代表性模型包括:

  • BERT:双向 Transformer 模型,通过预测句子中被掩码标记的词元以及预测句子之间是否连贯进行预训练,其核心思想是通过随机遮盖某些词元,使模型能够同时训练左右两侧的文本,从而更全面地理解句子内容。BERT 具有较好的通用性,通过微调额外的层或头部就可以将学习到的语言表示应用于其他 NLP 任务;
  • DistilBERT:通过知识蒸馏进行预训练,创建了一个更小的模型,该模型推理速度更快,训练所需的计算量也更少。在预训练过程中,DistilBERT 采用三重损失目标:语言建模损失、知识蒸馏损失和余弦距离损失。结果表明,DistilBERT 在内存占用减少 40%、计算速度提高 60% 的情况下,依然可以保持 97% 的性能;

  • RoBERTa:BERT 之后的一项研究表明,通过修改预训练方案可以进一步提高性能。 RoBERTa 在更多的训练数据上,以更大的批次训练了更长的时间,并且放弃了 NSP 任务。与 BERT 模型相比,这些改变显著地提高了模型的性能;
  • ModernBERT:在 2 万亿个词元上训练的现代化版本 BERT 模型。它对原始架构进行了许多改进,例如引入旋转位置嵌入以支持处理最多 8192 个 token 的序列,取消填充以避免在填充 token 上浪费计算资源,以及引入 GeGLU 层和交替注意力机制等。

2.4.2 解码器模型

纯解码器模型只使用 Transformer 模型中的解码器模块,在每个阶段,对于给定的词,注意力层只能访问句子中位于它前面的词,即只能迭代地基于已经生成的词来逐个预测后面的词,因此也被称为自回归模型(Auto-Regressive)。

纯解码器模型的预训练通常围绕着预测句子中下一个单词展开。这些模型最适合用于文本生成任务。

采用纯解码器架构的一些代表性模型包括:

  • OpenAI 的 GPT 系列:对纯解码器模型的探索在在很大程度上是由 OpenAI 带头进行的,通过使用更大的训练数据集以及将模型的规模扩大,GPT 模型的性能也在不断提高。例如 GPT-3 具有 1750 亿个参数,除了能生成令人印象深刻的真实篇章之外,还展示了小样本学习的能力。可惜 GPT 系列模型都没有开源;

  • Meta 的 Llama 系列:Llama 系列模型是 Meta AI 发布的开源大语言模型,由于对公众开放了模型权重且性能优秀,Llama 成为最受欢迎的开源大语言模型之一,很多研究工作都是以其为基座模型进行微调或继续预训练,衍生出了众多变体,极大地推动了大语言模型技术的发展。最近发布的 Llama 4 引入了一种新的自回归混合专家架构(MoE),利用早期融合技术实现原生多模态处理,从而能够处理文本和图像输入。
  • Google 的 Gemma 系列:Gemma 是 Google 发布的开源大语言模型,其技术路线与闭源多模态模型 Gemini 类似。最近发布的 Gemma 3 是一款多模态模型,引入了视觉理解能力,覆盖更广泛的语言,并支持更长的上下文,还对之前的架构进行了一系列改进,包括全局自注意力层交替使用多个局部滑动窗口自注意力层、采用 SigLip 编码器防止信息在高分辨率图像或非正方形宽高比的图像中丢失等;
  • 深度求索的 DeepSeek 系列:DeepSeek 是深度求索公司发布的开源大语言模型,以其创新的架构、强大的推理能力和完全开源的理念在全球 AI 领域备受关注。最近发布的 DeepSeek V3 是一个强大的混合专家模型(MoE),拥有 6710 亿个参数,为实现高效推理和低成本训练,采用多头潜在注意力(MLA)和 DeepSeekMoE 架构,并且开创了一种无辅助损失的负载均衡策略,并设置了多词元预测训练目标以提升性能。
  • 智谱的 GLM 系列GLM 是智谱 AI 和清华大学联合开发的开源大语言模型,最近发布的 GLM-5 模型旨在应对复杂系统工程和长时域智能体任务,参数规模扩展至 7440 亿(400 亿活跃参数),预训练数据量也增加到 28.5 万亿个 token。GLM-5 还集成了 DeepSeek 稀疏注意力机制(DSA),在大幅降低部署成本的同时,保持了长时域上下文处理能力。
  • 阿里的 Qwen 系列:Qwen 是阿里巴巴开源的多语言大模型系列,自 2023 年 8 月开源以来,已发展成为全球最大的开源模型生态系统之一,截至 2026 年 1 月,其衍生模型数量突破 20 万个,全球下载量突破 10 亿次。最新发布的 Qwen 3.5 作为原生视觉-语言模型,在推理、编程、智能体能力与多模态理解等全方位基准评估中表现优异,该模型采用创新的混合架构,将线性注意力(Gated Delta Networks)与稀疏混合专家(MoE)相结合,实现出色的推理效率,还支持201 种语言与方言。

延伸

可以看到,大多数大语言模型(LLM)都采用纯解码器架构,这些模型在过去的几年中规模和功能都得到了显著提升,一些最大的模型包含数千亿个参数。

2.4.3 编码器-解码器模型

编码器-解码器模型(又称序列到序列模型)同时使用 Transformer 架构的编码器和解码器模块。在每个阶段,编码器的注意力层都可以访问原始输入句子中的所有词,而解码器的注意力层则只能访问输入中给定词之前的词(即已经解码生成的词)。

这些模型的预训练可以采用不同的形式,但通常都涉及重构一个输入已被某种方式篡改的句子。例如,T5 通过随机遮盖掉输入中的文本片段进行预训练,训练目标则是预测出被遮盖掉的文本。编码器-解码器模型适合处理那些需要根据给定输入生成新文本的任务,例如摘要、翻译、生成式问答等。

采用纯解码器架构的一些代表性模型包括:

  • T5:将所有 NLU 和 NLG 任务都转换为 Seq2Seq 形式统一解决(例如,文本分类就是将文本送入 Encoder,然后 Decoder 生成文本形式的标签)。T5 通过 MLM 及将所有 SuperGLUE 任务转换为 Seq2Seq 任务来进行预训练。最终,具有 110 亿参数的大版本 T5 在多个基准上取得了最优性能。
  • BART:同时结合了 BERT 和 GPT 的预训练过程。将输入句子通过遮盖词语、打乱句子顺序、删除词语、文档旋转等方式破坏后传给 Encoder 编码,然后要求 Decoder 能够重构出原始的文本。这使得模型可以灵活地用于 NLU 或 NLG 任务,并且在两者上都实现了最优性能。
  • M2M-100:语言对之间可能存在共享知识可以用来处理小众语言之间的翻译。M2M-100 是第一个可以在 100 种语言之间进行翻译的模型,并且对小众的语言也能生成高质量的翻译。该模型使用特殊的前缀标记来指示源语言和目标语言。
  • BigBird:由于注意力机制 $\mathcal{O}(n^2)$ 的内存要求,Transformer 模型只能处理一定长度内的文本。 BigBird 通过使用线性扩展的稀疏注意力形式,将可处理的文本长度从大多数模型的 512 扩展到 4096,这对于处理文本摘要等需要捕获长距离依赖的任务特别有用。

2.5 大语言模型工作原理

在前文中我们已经介绍了 Transformer 架构的工作原理,考虑到采用纯解码器架构的大语言模型正在 NLP 领域扮演越来越重要的角色,下面将对其推理背后的核心技术进行简单介绍。

推理是指大语言模型利用训练中积累的知识,根据给定的输入提示逐字逐句地生成生成类似人类语言文本的过程。具体来说,大语言模型会按照顺序生成的方式,利用从数十亿个参数中学习到的概率来预测和生成序列中的下一个词元(Token),从而生成连贯且与上下文相关的文本。

2.5.1 注意力的作用

注意力机制赋予大语言模型理解上下文并生成连贯响应的能力,在预测下一个词时,句子中的每个词并非都具有相同的权重。例如,在句子“法国的首都是……”中,“法国”和“首都”这两个词对于确定下一个词是“巴黎”至关重要,如图 2-11 所示。

transformers_architecture

图 2-11 注意力机制工作示意图

这种识别最相关词以预测下一个词元的方法已被证明非常有效。简而言之,注意力机制是语言模型能够生成既连贯又具有上下文感知能力的文本的关键,它也是使现代语言模型区别于前几代语言模型的关键(可以回忆一下上一章中介绍的语言模型发展历程)。

延伸

尽管从 GPT 模型提出开始,训练纯解码器语言模型的基本原理就基本保持不变,即预测下一个词元,但在扩大神经网络规模以及使注意力机制能够处理越来越长的序列方面已经取得了显著进展,在下一章中我们会进行简单的展开。

想要了解大语言模型实际能够处理多少上下文信息,就需要引出上下文长度,或者说模型的“注意力跨度”。上下文长度是指大语言模型一次可以处理的最大词元数量,这会受到模型的架构和尺寸、可用计算资源以及输入和期望输出的复杂性等多个因素的限制。

由于硬件限制以及计算成本,我们不可能向模型中输入无限量的上下文信息,因此发布的各种模型被设计成具有不同的上下文长度,以平衡模型的性能和效率。

此外,当我们向大语言模型传递信息时,会以某种方式组织输入以引导模型生成所需的输出,这被称为提示工程(Prompting)。由于模型的主要任务就是通过注意力机制分析每个输入词元的重要性来预测下一个词元,因此输入序列的措辞至关重要。相比口语化的简单任务描述,精心设计的提示(Prompt)可以更容易地引导大语言模型生成符合预期的输出。

2.5.2 两阶段推理过程

大语言模型生成文本的过程主要分为两个阶段:预填充(Prefill)和解码,这两个阶段像流水线一样协同工作,每个阶段都在生成文本过程中发挥着重要作用。

预填充阶段就像烹饪中的准备阶段,所有初始食材都在此阶段进行加工和准备,该阶段包含三个关键步骤:

  1. 分词(Tokenization):将输入文本转换为模型可以理解的基本语言单元——词元。
  2. 嵌入转换(Embedding Conversion):将词元转换为能够表示其语义的密集嵌入表示。
  3. 初始处理:将这些嵌入向量输入模型的神经网络,以深入了解上下文。

这个阶段计算量很大,因为模型需要一次性处理完所有输入的词元,就像人类在回复消息之前,先需要阅读并理解消息中的所有文字。

预填充阶段处理完输入后,就进入实际生成文本的解码阶段。在这个阶段,模型会逐个生成词元以构建完整的输出,称之为自回归过程(每个新词元都依赖于所有先前的词元)。这一阶段包含了针对每个新词元执行的多个关键步骤:

  1. 注意力计算:回顾所有先前的词元以理解上下文;
  2. 概率计算:确定下一个可能出现的词元的概率;
  3. 词元选择:根据这些概率选择下一个词元;
  4. 持续性检查:决定是否继续或停止生成。

此阶段会占用大量内存,因为模型需要跟踪所有先前已经生成的词元以及它们之间的关系。

2.5.3 采样策略

在模型生成过程中,就像作家可以选择更具创意还是更精确一样,我们也可以调整模型选择词元的方式。当模型生成下一个词元时,它首先会得到词汇表中每个词的原始概率(称为logits),然后基于这些概率来选择下一个词元,这个过程包含以下几个步骤,如图 2-12 所示。

  1. 原始概率:可以将其视为模型对每个可能的下一个词的初始直觉。
  2. 温度控制(Temperature Control):就像控制创造力的旋钮,设置较高的值(>1.0)会使选择更随机、更具创造性,而较低的值(<1.0)则会使选择更集中、更具确定性。
  3. Top-p 采样(核采样):不考虑所有可能的词语,而是只关注那些概率总和达到选定阈值的最可能词语(例如前 90%)。
  4. Top-k 过滤:一种替代方法,只考虑最有可能的 k 个下一个词。

transformers_architecture

图 2-12 词元选择示意图

此外,大语言模型面临的一个常见挑战是重复性问题,即生成重复的内容。为了解决这个问题,通常可以采用两种惩罚机制,如图 2-13 所示:

  1. 出现惩罚(Presence Penalty):对任何已出现过的词元,无论其出现频率如何都施加固定惩罚,从而防止模型重复使用相同的词;
  2. 频度惩罚(Frequency Penalty):根据词元使用频率递增的惩罚机制,一个词出现得越多,再次被选中的可能性就越小。

transformers_architecture

图 2-13 词元选择示意图

这些惩罚项会在词元选择的早期阶段就被应用,从而在其他采样策略实施之前就调整原始概率。可以被视为一种温和的引导,鼓励模型探索新的词汇。

最后,考虑到局部最优解未必是全局最优解,如果每次只是简单地选择当前最合适的词元,未必能获得全局质量最好的生成结果,因此还可以使用束搜索(Beam search),同时生成多个词元序列,最后选择总体概率最高的作为最终输出。束搜索的具体工作方式如图 2-14 所示:

  1. 在每个步骤中,维护多个候选序列(通常为 5-10 个)。
  2. 对于每个候选词,计算其成为下一个词元的概率;
  3. 只保留最可能的序列和后续词元组合;
  4. 重复此过程,直至达到所需长度或停止;
  5. 选择总体概率最高的序列作为输出。

transformers_architecture

图 2-14 束搜索示意图

束搜索通常能生成更连贯、语法更正确的文本,但需要更多的计算资源。

思考

如果你对这些采样策略依然感到困惑也不用着急,这里只需有初步的认识即可,我们后续会在第十章中进行更详细的说明。

2.5.4 实际挑战与优化

在实际部署大模型时,通常需要考虑以下几个关键指标:

  1. 首次响应时间(Time to First Token,TTFT):获得首次响应的时间,这主要受预填充阶段的影响,对于用户体验非常重要。
  2. 输出每词元所需时间(Time Per Output Token,TPOT):用户衡量生成后续词元的速度,这决定了整体生成速度。
  3. 吞吐量(Throughput):可以同时处理的请求数量。
  4. 显存使用情况:GPU 显存的消耗量,这通常会成为实际应用中的主要瓶颈。

此外,有效管理上下文长度是大语言模型推理中最具挑战性的问题之一。虽然更长的上下文可以提供更多信息,但也会带来巨大的成本:内存使用量通常随上下文长度呈二次方增长,而处理速度则通常随上下文长度呈线性下降。例如像 Qwen2.5-1M 这样的新模型支持数百万个 token 的上下文窗口,但这也导致推理速度显著降低,因此关键在于找到适合实际场景的最佳平衡点。

为了应对这些挑战,最有效的优化方法之一是 KV 缓存(Key-Value Caching),通过存储和重用中间计算结果来提高推理速度。这项优化可以减少重复计算,从而提升生成速度,使长上下文生成成为可能。虽然代价是会占用更多内存,但性能提升通常远远超过这一成本。

2.6 小结

通过本章,相信你已经对 Transformer 模型的定义和工作模式有了初步的了解,接下来就可以根据自己的需要对感兴趣的 Transformer 模型进行更深入地探索。

幸运的是,Hugging Face 专门为使用 Transformer 模型编写了一个 Transformers 库,本章中介绍的大部分 Transformer 模型都可以在 Hugging Face Hub 中找到并且加载使用。

不要着急,在后面的章节中我们会一步一步编写并训练自己的 Transformer 模型来完成任务。

参考

[1] HuggingFace 在线教程
[2] Lewis Tunstall 等人. 《Natural Language Processing with Transformers》
[3] 赵鑫等.A Survey of Large Language Models

results matching ""

    No results matching ""