Foundations of Large Language Models / 大语言模型基础
大语言模型基础
引言:理解语言模型的认知起点
大语言模型(Large Language Models,LLMs)的崛起标志着人工智能领域的一场深刻变革。这些模型能够在海量文本数据中学习语言的内在规律,进而完成从文本生成到复杂推理的多样化任务。然而,要真正掌握提示工程(Prompt Engineering)的精髓——即如何与这些模型进行有效沟通——我们必须首先深入理解这些模型的基本工作原理。提示工程并非孤立的技巧集合,而是建立在对模型架构、训练机制和涌现行为深刻认知之上的实践艺术。
本章将系统性地探讨大语言模型的基础知识,为后续章节中介绍的各类提示工程策略提供坚实的理论支撑。我们将从Transformer架构的核心组件——自注意力机制开始,逐步深入到不同模型架构的特点与适用场景,分析训练范式如何塑造模型的响应方式,并最终探讨模型规模与能力涌现之间的深层联系。这些知识将为读者理解为何某些提示策略在特定情境下有效提供必要的背景,使我们能够在实际应用中做出更加明智的技术选择。
一、Transformer架构与自注意力机制
1.1 从序列到上下文的范式转变
在深度学习应用于自然语言处理的早期阶段,循环神经网络(Recurrent Neural Networks,RNNs)长期占据主导地位。这类模型通过顺序处理文本中的每个词元(token),逐步构建对序列的表示。循环神经网络的核心思想是利用前一时刻的隐藏状态与当前输入共同决定当前时刻的隐藏状态,从而在理论上能够处理任意长度的序列信息。然而,这种序列依赖的处理方式带来了一个根本性的瓶颈:信息必须通过一系列非线性变换逐层传递,当序列长度增加时,早期词汇的信息在多次变换后往往会被稀释甚至丢失,这种现象被称为长期依赖问题(Long-term Dependency Problem)。
长短期记忆网络(Long Short-Term Memory,LSTM)和门控循环单元(Gated Recurrent Unit,GRU)通过引入门控机制部分缓解了这一问题,允许模型选择性地遗忘或保留历史信息。但根本性的架构限制仍然存在:这些模型本质上必须按顺序处理序列,无法并行计算,导致训练效率低下,且对于远距离依赖关系的建模仍然不够理想。2017年,Vaswani等人发表了开创性论文《Attention Is All You Need》,提出了Transformer架构,彻底改变了这一范式。Transformer抛弃了传统的循环结构,转而完全依赖注意力机制(Attention Mechanism)来建立序列内部各元素之间的关联。
1.2 自注意力机制的数学原理
自注意力(Self-Attention),也称为缩放点积注意力(Scaled Dot-Product Attention),是Transformer架构的核心创新。其基本思想是:在处理序列中的某个位置时,允许模型同时关注序列中的所有其他位置,并根据它们的相关性程度分配不同的权重。这种机制可以用以下数学公式精确描述:
给定输入序列的词元嵌入表示为矩阵 $X \in \mathbb{R}^{n \times d}$,其中 $n$ 是序列长度,$d$ 是嵌入维度。自注意力机制通过三个可学习的线性变换将输入投影到三个不同的表示空间:查询(Query,$Q$)、键(Key,$K$)和值(Value,$V$):
$$Q = XW_Q, \quad K = XW_K, \quad V = XW_V$$
其中 $W_Q, W_K, W_V \in \mathbb{R}^{d \times d_k}$ 是可学习的权重矩阵。注意力输出通过以下公式计算:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
这一公式包含三个关键操作:首先,计算查询与所有键的点积,得到原始注意力分数;然后除以 $\sqrt{d_k}$ 进行缩放,防止点积值过大导致 softmax 函数进入饱和区域;最后,通过 softmax 函数将分数转换为概率分布,用以对值向量进行加权求和。
缩放因子的重要性值得特别阐述。假设 $q$ 和 $k$ 是独立的随机变量,其各分量均值为0、方差为1,则它们的点积 $q \cdot k = \sum_{i=1}^{d_k} q_i k_i$ 的均值为0,方差为 $d_k$。当 $d_k$ 较大时,点积的方差可能变得很大,导致 softmax 函数的输入值分布在极端区域,使得梯度消失。多头注意力机制通过将输入分割成多个子空间,在每个子空间中独立计算注意力,能够捕获不同类型的依赖关系:
$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W^O$$
其中 $\text{head}_i = \text{Attention}(QW_Q^i, KW_K^i, VW_V^i)$,$h$ 是注意力头的数量。通过这种方式,模型能够同时关注来自不同表示子空间的信息,增强了模型的表达能力。
1.3 位置编码:注入序列顺序信息
自注意力机制本身是排列不变的(permutation invariant)——这意味着无论输入序列中元素的顺序如何变化,输出都是相同的。这对于自然语言处理而言显然是不可接受的,因为语言的含义高度依赖于词序。例如,“狗咬人”与“人咬狗”包含完全相同的词汇,但意义截然相反。
为了解决这一问题,Transformer引入了位置编码(Positional Encoding),通过向输入嵌入添加位置信息来注入序列顺序。原始Transformer论文使用了正弦和余弦函数:
$$PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d}}\right)$$ $$PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d}}\right)$$
其中 $pos$ 是位置,$i$ 是维度索引。这种设计的精妙之处在于,对于任意固定偏移 $k$,$PE_{pos+k}$ 可以表示为 $PE_{pos}$ 的线性函数,这使得模型能够相对容易地学习关注相对位置的关系。
后续研究提出了多种替代方案,包括可学习的位置编码、相对位置编码(Relative Positional Encoding)等。RoPE(Rotary Position Embedding)是近年来被广泛采用的方法,它通过旋转操作将位置信息编码到注意力计算中,具有更好的长度外推能力。ALiBi(Attention with Linear Biases)则通过在注意力分数上添加线性偏置来编码位置信息,在处理超长序列时表现出色。
1.4 Transformer的整体架构
完整的Transformer编码器由多个相同的层堆叠而成,每一层包含两个主要子层:多头自注意力机制和基于位置的前馈神经网络(Position-wise Feed-Forward Network,FFN)。每个子层都采用了残差连接(Residual Connection)和层归一化(Layer Normalization),形成以下结构:
$$\text{Output} = \text{LayerNorm}(x + \text{Sublayer}(x))$$
这种设计允许梯度直接流过网络,有效缓解了深层网络的训练困难。FFN通常由两个线性变换组成,中间夹杂非线性激活函数:
$$\text{FFN}(x) = W_2 \sigma(W_1 x + b_1) + b_2$$
值得注意的是,FFN可以视为一个逐位置应用的非线性变换,其隐藏层维度通常大于输入输出维度,提供了额外的模型容量。
二、模型架构的三种范式
2.1 编码器架构:BERT系列
编码器-only架构(Encoder-only)以BERT(Bidirectional Encoder Representations from Transformers)为代表,其核心设计是使用双向自注意力机制同时考虑每个词元左侧和右侧的上下文。这种双向性使得编码器能够生成上下文相关的表示,非常适合需要全面理解输入的任务。
BERT的预训练采用两种任务:掩码语言建模(Masked Language Modeling,MLM)和下一句预测(Next Sentence Prediction,NSP)。MLM任务随机遮盖输入中约15%的词元,训练模型预测被遮盖的词;NSP任务则训练模型判断两个句子是否为连续的上下文。这些预训练目标使BERT擅长理解任务而非生成任务。
编码器模型的优势在于其产生的表示可以直接用于各种下游任务,只需添加一个简单的分类头即可。BERT在问答、文本分类、命名实体识别等任务上取得了突破性成果。然而,编码器模型无法直接用于文本生成,因为其训练目标不是预测下一个词元。代表性的编码器模型包括RoBERTa(通过优化训练策略提升性能)、ALBERT(通过参数共享减少计算)、ELECTRA(采用替换词元检测预训练)等。
2.2 解码器架构:GPT系列
解码器-only架构(Decoder-only)以GPT(Generative Pre-trained Transformer)系列为代表,采用因果注意力(Causal Attention)机制——每个位置只能关注其之前的词元。这种设计天然适合自回归生成(Autoregressive Generation)任务:模型基于已经生成的词元预测下一个词元,逐步构建完整的输出序列。
GPT的训练目标是标准语言建模(Standard Language Modeling),即给定前文预测下一个词。GPT-1(2018)、GPT-2(2019)、GPT-3(2020)的演进展示了几个重要趋势:模型规模从1.17亿参数指数增长到1750亿参数,预训练数据量同步增加,few-shot和zero-shot能力随之涌现。
解码器架构的关键优势在于其强大的文本生成能力。通过精心设计的提示(prompt),用户可以引导模型完成多种任务,而无需对模型进行额外训练。这种上下文学习(In-context Learning)能力是GPT系列模型的标志性特性,也是现代提示工程的主要应用场景。ChatGPT、Claude、Gemini等主流对话系统都基于解码器-only架构。
2.3 编码器-解码器架构:T5与BART
编码器-解码器架构(Encoder-Decoder)同时利用了Transformer的两半部分。编码器处理输入序列,生成上下文化的表示;解码器基于编码器的输出和已生成的词元,自回归地生成目标序列。这种架构非常适合序列到序列(Sequence-to-Sequence)任务,如机器翻译、文本摘要、问答等。
T5(Text-to-Text Transfer Transformer)将所有NLP任务统一建模为文本到文本的转换问题。输入和输出都是文本字符串,任务类型(如翻译、分类、回归)通过特殊的任务前缀来区分。T5的编码器采用双向注意力,解码器采用因果注意力,并通过交叉注意力机制连接两个部分。
BART(Bidirectional and Auto-Regressive Transformers)采用了不同的预训练策略。其预训练目标是去噪自编码:输入文本经过多种噪声变换(如词元遮盖、句子重排、文档旋转等),模型需要重建原始文本。这种预训练方式使BART特别擅长处理损坏的输入,在文本生成和理解任务上都表现优异。
2.4 架构选择的实践考量
在选择模型架构时,需要综合考虑多个因素。任务类型是首要考量:对于理解和分类任务,编码器模型通常更高效;对于需要生成内容的任务,解码器模型是更自然的选择;对于涉及两个序列之间转换的任务,编码器-解码器架构可能更合适。
推理效率也是重要因素。解码器模型的自回归生成特性意味着输出越长,推理所需时间越多。编码器模型可以一次性处理整个输入,推理速度通常更快。编码器-解码器模型在编码阶段可以并行处理输入,但解码阶段同样面临自回归的效率瓶颈。
近年来,混合专家(Mixture of Experts,MoE)架构引起了广泛关注。这种架构在每个前馈网络层中包含多个“专家”网络,并根据输入动态激活其中的一个子集。典型配置如Switch Transformer和Mixtral,使用数千亿参数的稀疏激活模型,在保持计算效率的同时大幅增加模型容量。稀疏激活的特性意味着虽然总参数量巨大,但每次前向传播只消耗少量计算资源,使得在固定计算预算下训练更大规模模型成为可能。
三、训练范式的演变
3.1 语言模型预训练
现代大语言模型的训练通常分为两个阶段:预训练(Pre-training)和微调(Fine-tuning)。预训练阶段,模型在海量无标注文本上进行自监督学习,学习通用的语言表示和世界知识;微调阶段,模型在特定任务的标注数据上进行监督学习或强化学习优化,使其适应具体应用需求。
语言模型预训练的核心是下一个词预测(Next Token Prediction)目标。对于给定文本序列 $x_1, x_2, \ldots, x_n$,模型学习预测每个位置之后可能出现的词元:
$$\mathcal{L}_{\text{LM}} = -\sum_{i=1}^{n} \log P_\theta(x_{i+1} | x_1, \ldots, x_i)$$
这个看似简单的目标实际上蕴含着深刻的语言理解要求。模型必须学习语法结构、语义关系、常识推理乃至世界知识,才能准确预测下一个词。预训练数据通常来自互联网文本的爬取和清洗,数据规模从数十GB到TB级别不等,覆盖多样化的话题和语言风格。
缩放定律(Scaling Laws)是预训练阶段的重要发现。OpenAI和Google的研究表明,模型的性能(以困惑度或损失衡量)与模型参数量、数据集规模和计算量之间存在可预测的幂律关系。这意味着在固定计算预算下,存在最优的资源分配策略;同样,模型性能可以通过增加任一资源(参数、数据、计算)来提升,虽然效率可能有所不同。
3.2 指令微调:赋予模型任务泛化能力
预训练语言模型虽然能够流畅地续写文本,但其行为并不完全符合人类的指令要求。用户期望模型能够理解并执行各种自然语言指令,而不是简单地续写。指令微调(Instruction Tuning)正是为了解决这一问题而提出的技术。
指令微调的核心思想是:收集或构造一批遵循指令-响应对格式的训练数据,使用这些数据对预训练模型进行监督学习微调。这些指令数据通常涵盖多种任务类型——如问答、摘要、翻译、代码生成、创意写作等——每条数据包含一条自然语言指令和对应的期望响应。通过这种方式,模型学会将指令理解为任务规范,并生成符合预期的响应。
指令微调数据集的构建方式多种多样。早期方法如FLAN采用人工编写的指令模板,将现有NLP数据集转换为指令格式。T0和Tk-Instruct则使用众包平台让人类标注者编写多样化的高质量指令和响应。Self-Instruct方法另辟蹊径,利用模型自身生成指令数据,在一定程度上缓解了人工标注的成本问题。
3.3 人类反馈强化学习
人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF)代表了训练范式的又一次重要演进。虽然指令微调显著改善了模型的指令遵循能力,但监督学习的目标——最小化输出与参考答案之间的差异——并不能完全捕捉人类对“优质输出”的评判标准。语言的质量是多维度的:准确性、相关性、有帮助性、无害性、表达流畅性等难以用简单的损失函数刻画。
RLHF引入了一个reward模型(Reward Model)来学习人类的偏好。训练过程通常包含三个步骤:首先,收集人类偏好数据——对同一指令的多个候选响应进行排序;然后,训练一个reward模型,使其能够预测人类对响应的偏好评分;最后,使用强化学习算法(如PPO)优化语言模型,使其在给定指令下生成能够获得高reward的响应,同时保持与参考模型的KL散度约束,避免模型偏离原始能力太远。
RLHF的训练流程可以用以下数学框架描述。设 $\pi_\theta$ 为待优化的策略模型,$\pi_{\text{ref}}$ 为参考模型(通常是SFT后的模型),$r_\phi$ 为reward模型。RLHF的优化目标为:
$$\mathcal{L}_{\text{RLHF}} = \mathbb{E}_{x \sim D, y \sim \pi_\theta(\cdot|x)} [r_\phi(x, y)] - \beta \mathbb{D}_{KL}[\pi_\theta(y|x) || \pi_{\text{ref}}(y|x)]$$
第二项是KL散度惩罚项,防止优化后的策略偏离参考模型太远。$\beta$ 是控制惩罚强度的超参数。
RLHF在ChatGPT和Claude等对话系统的训练中发挥了关键作用。它使模型能够生成更有帮助、更无害、更符合人类价值观的响应。然而,RLHF也面临挑战:人类偏好本身的主观性和不一致性、reward hacking(模型找到取悦reward模型但实际质量不佳的捷径)、训练过程的不稳定性等。直接偏好优化(Direct Preference Optimization,DPO)等替代方法试图简化RLHF的训练流程,在某些场景下取得了可比效果。
3.4 训练范式与模型能力的对应关系
理解训练范式对于提示工程师至关重要,因为不同训练阶段赋予模型的能力与提示策略的效果直接相关。预训练赋予模型语言流畅性和世界知识;指令微调赋予模型理解多样化指令的能力;RLHF塑造模型响应人类偏好的方式。
预训练阶段学习的内容是模型能力的根基。一个在高质量、广泛主题文本上预训练的模型,其知识储备和推理能力上限更高。预训练数据的选择和质量直接影响模型在特定领域的基线表现。
指令微调使得zero-shot任务泛化成为可能。经过良好指令微调的模型能够遵循未见过的指令格式,这使得用户可以通过精心设计的提示来引导模型执行新任务,而无需额外训练。这也是提示工程能够在现代LLM应用中发挥作用的根本原因。
RLHF的优化目标决定了模型在安全性、有帮助性、诚实性等维度上的取舍。不同的RLHF实现可能产生具有不同“性格”的模型,理解这些差异有助于选择合适的模型并调整交互策略。