大语言模型(LLM)核心技术梳理:从词元化到 RAG 的工程实践
一、Tokenization:文本如何变成模型能看的数字
1.1 什么是 Token
Token(词元)是文本的基本单位。Tokenizer 的作用是把清洗后的文本字符串切分成有意义的基本单元序列,并构建词表(vocabulary)。例如句子 "I want a beer! Beer is cute!" 会被切分成 ["I", "want", "a", "beer", "!", "Beer", "is", "cute", "!"] 等 token,再映射为整数索引,形成训练数据。
1.2 不同粒度的分词方式
常见分词粒度有三种:
- 字符级(character-level):每个字符是一个 token。优点是不会出现未登录词,缺点是序列长、语义弱。
- 词级(word-level):每个单词是一个 token。语义清晰,但词表巨大,且对未登录词不友好。
- 子词级(subword-level) :高频词保持完整,低频词被拆成子词。例如 hippopotamus 可拆为
hip、##pop、##ota、##mus。子词级在词表大小和语义表达之间取得了较好平衡,是当前 LLM 的主流选择。
1.3 BPE:子词分词的代表算法
Byte Pair Encoding(BPE,字节对编码)是 GPT 系列等模型常用的分词方法。核心思想是:从字符级词表出发,反复合并语料中出现频率最高的一对 token,直到词表大小达到预设值。其优势在于词表构建是动态的,高频词有独立 token,低频词或新词可通过子词组合表示。
1.4 特殊 Token
实际词表中还会加入特殊符号:<unk>(未登录词)、<pad>(填充)、<bos>(序列开始)、<eos>(序列结束)等,用于处理变长输入和边界信息。
二、Embedding:把 Token 变成语义向量
2.1 从 One-Hot 到稠密向量
原始文本经 token 化后,若使用 one-hot 表示,维度等于词表大小,稀疏且无法表达词与词之间的关系。Embedding 通过可学习的映射矩阵,将高维稀疏的 one-hot 向量压缩为低维稠密向量。
2.2 Word2Vec:经典的词向量方法
Word2Vec 通过大规模语料学习词向量,能较准确地表达词之间的相似性和语义关系。它包含两种训练目标:
- CBOW(连续词袋模型):用上下文词预测中心词。
- Skip-gram(跳元模型):用中心词预测上下文词。
Word2Vec 的优点是稠密表示、维度低、计算友好,为后续深度语言模型奠定了基础。
2.3 Transformer 中的 Embedding
在 Transformer 中,Embedding 是一个可学习的矩阵。输入 token 经 one-hot 后与矩阵相乘,得到对应的 embedding 向量,并在训练过程中不断学习优化。其优势同样在于:能表达词之间的相似性和关系、降低维度、提升计算效率。
三、Position Encoding:给序列注入位置信息
3.1 为什么需要位置编码
不同于 RNN 天然按顺序处理序列,Transformer 的自注意力机制对输入 token 是并行计算的,不感知位置。因此需要将位置信息显式注入模型,否则 "猫是哺乳动物" 和 "哺乳动物是猫" 会被视为相同。
3.2 三角函数位置编码
原始 Transformer 使用正弦/余弦函数计算位置编码:
其中 pos 是 token 在序列中的位置索引,i 是 embedding 维度中的分量索引。该编码维度与 token embedding 相同,直接相加后输入模型。其特点是:不同维度使用不同频率的波长,使模型能区分绝对位置,同时便于推断更长序列。
3.3 可学习位置编码
BERT 采用可学习的位置嵌入(position embedding),为每个位置学习一个向量。其缺点是:
- 受训练时最大序列长度限制,难以表示更长的位置;
- 对相对位置信息的编码能力不足。
3.4 旋转位置编码(RoPE)
RoPE(Rotary Position Embedding)通过旋转矩阵将位置信息融入 Query 和 Key 向量中,使得 attention score 仅与 token 之间的相对距离 i-j 相关。当相对位置相同时,旋转角度相同,天然支持长度外推,是当前大模型(如 LLaMA)广泛采用的位置编码方式。
四、语言模型与序列概率
4.1 序列数据的依赖关系
语言模型处理的是序列数据,即具有先后顺序且数据点之间存在依赖关系的数据。将文本转化为 token 序列后,语言模型的目标是估计序列发生的概率分布:
因为模型需要根据前文依赖判断后续 token 的合理性。
4.2 复杂度比较:为什么 Transformer 成为主流
在捕捉长距离依赖方面,不同网络结构存在显著差异:
- 卷积网络 :信息传递依赖局部窗口,任意两点间最大路径长度为
O(log_k n),随距离增加信息容易丢失。 - RNN :需要逐步迭代整个序列,最大路径长度为
O(n),长距离依赖建模困难。 - 自注意力 :任意两个 token 直接相连,最大路径长度为
O(1),信息损失少,擅长捕捉长距离依赖。
这也是 Transformer 取代 RNN/CNN 成为 LLM 主流架构的关键原因。
五、对齐训练:RLHF、PPO 与 DPO
5.1 为什么需要强化学习进行后训练
预训练和指令微调(SFT)之后,模型还需要与人类的偏好对齐,例如生成的回答要有用、诚实、无害。但指令微调的优化目标是最大化标注回复的生成概率,与"符合人类偏好"并不完全一致。此外,人类偏好难以精确定义,但判断"喜欢/不喜欢"却相对简单。因此,前沿大模型普遍采用强化学习进行后训练。
5.2 PPO:从 RL 到 LLM 对齐
Proximal Policy Optimization(PPO)通过裁剪比率限制策略更新幅度,防止模型更新过大。在 InstructGPT 中,PPO 的优化目标包含奖励模型打分和与 SFT 模型的 KL 散度约束:
KL 约束的目的是防止策略过度迎合奖励函数,从而发现奖励漏洞、输出不符合人类真实偏好的内容。
5.3 DPO:更直接的对齐方法
RLHF 流程复杂,需要训练奖励模型和进行 RL 训练,计算和存储开销较大。Direct Preference Optimization(DPO)尝试跳过奖励模型和 RL 过程,直接从偏好数据中学习,大幅简化了训练流程。
5.4 自提升:SPIN
Self-Play Fine-Tuning(SPIN)通过 LLM 之间的对抗游戏,在无需额外人工标注数据的情况下,从较弱的 LLM 训练出更强的 LLM。其核心是利用模型自身生成的数据不断迭代优化。
六、参数高效微调(PEFT)
全参数微调大模型成本极高,参数高效微调(PEFT)只优化一小部分参数即可实现高效适配。常见方法分为三类:
6.1 增加参数微调(Additive Fine-tuning)
- Adapters:在 Transformer 层中插入小型适配器模块,只训练这些新增参数。优点是节省训练参数量、训练速度快;缺点是增加了模型参数量,推理时可能变慢、显存开销变大。
- Soft Prompt / Prompt Tuning:在输入层加入可学习的连续向量 prompt。
- Prefix Tuning:在 Transformer 每一层都加入可学习的前缀向量,不同任务只需保存对应前缀。
软提示类方法参数量小,推理时可灵活切换,但训练收敛较慢,且不同任务最优 prompt 长度不一致。
6.2 选择性微调(Selective Fine-tuning)
只选择部分原始参数进行更新,例如 BitFit 只更新 bias 参数。实验表明,BitFit 仅用约 0.08% 的参数即可在多个任务上达到接近全参数微调的效果。但 Diff-Pruning 等方法可能需要更多显存,限制了在超大模型上的应用。
6.3 重参数化微调(Reparameterized Fine-tuning)
LoRA(Low-Rank Adaptation) 是最具代表性的方法。其假设模型参数在微调时只需要在一个低秩子空间内更新,因此引入低秩矩阵 A 和 B 来近似原始权重的更新量:
LoRA 显著降低了训练参数量,在许多任务上效果良好,并能与量化技术结合(如 QLoRA)进一步降低显存需求。经验上,在某些任务中 LoRA 的 loss 下降可能较慢,需要根据任务调整 rank 和学习率。
七、解码策略:让生成文本更优质、更多样
7.1 高质量语言不等于最大概率
人类语言具有创造性和多样性,完全遵循最大概率法则的生成往往平淡、重复。因此,解码策略需要在确定性和多样性之间取得平衡。
7.2 常见解码策略
| 策略 | 特点 | 适用场景 | 缺点 |
|---|---|---|---|
| 贪心搜索 | 简单快速 | 短文本生成、问答等确定性任务 | 容易陷入局部最优,缺乏多样性 |
| 束搜索(Beam Search) | 生成质量较高 | 翻译、问答等高质量任务 | 计算复杂度高,缺乏多样性 |
| 采样(Sampling) | 结果多样化 | 开放式文本生成、对话 | 可能生成不连贯内容,需调节参数 |
| 对比解码 | 提高生成质量 | 开放式文本生成、高要求任务 | 计算成本高,需要合适的小模型 |
7.3 Top-K 与 Top-p 采样
- Top-K 采样:从概率最高的 K 个词中重新归一化采样。问题是不同上下文下概率分布差异大,固定 K 可能包含低概率词或过滤掉合理词。
- Top-p(核)采样:按概率排序后,从累积概率首次超过 p 的最小词集中采样。相比 Top-K,Top-p 能根据上下文动态调整候选词范围,通常更优雅,但实践中两者都有效。
7.4 对比解码(Contrastive Decoding)
大模型与小模型对同一 token 的概率差异可以反映该 token 的"质量提升"。通过 log P_大模型 - log P_小模型 选择概率提升明显的 token,可以减少小模型常犯的错误,提高生成长文本的事实准确性。
八、解码加速:让大模型推理更快
8.1 LLM 推理的瓶颈
LLM 通常采用自回归方式逐 token 生成,每次生成依赖前一步结果,串行特性导致解码速度较慢。主要瓶颈来自 I/O:LLM 权重需要从显存搬运到计算单元。
8.2 并行解码与投机解码
为了加速,研究者提出了预测-验证框架:
- 并行解码:同时预测多个 token,再用原模型并行验证,只接受与原模型结果一致的 token。
- 投机解码(Speculative Decoding):使用小模型快速生成候选序列,再用大模型一次性验证。若候选正确,大模型一次可接受多个 token;若错误则回滚修正。
例如,使用小 LLM 预测、大 LLM 拒绝/纠错的策略,可以在大 LLM 仅运行 9 次的情况下解码 37 个 token,显著降低延迟。
8.3 解码加速总结
| 类型 | 关键特点 |
|---|---|
| 并行解码 | 预测+验证并行生成多个 token,结果与串行一致;需额外训练输出头;只适用于贪心解码 |
| 投机解码 | 预测+验证并行生成多个 token,结果与串行一致;需额外小模型;无解码方式限制 |
投机解码的关键在于大小模型的输出偏好尽可能一致,通常可通过蒸馏实现。
九、Prompt Engineering:与大模型高效沟通
9.1 Prompt 的基本结构
Prompt 是给大模型的输入,一般包含四部分:指令、上下文、输入、输出格式。清晰明确的 prompt 能显著提升模型表现。
9.2 提示词的艺术
研究表明,意思相近但措辞不同的提示词可能导致显著不同的性能。例如对新闻主题分类任务,"What is the most accurate label for this news article?" 的准确率明显高于 "What is this piece of news regarding?"。
9.3 Prompt 模板与迭代优化
常用模板可归纳为:角色 + 背景 + 要求 + 风格。当需求表达不清时,可以让 LLM 作为 Prompt 生成器,通过"LLM 提问 - 用户回答"的方式迭代优化提示词。
9.4 情绪提示的有趣发现
有研究发现,在 prompt 中加入类似"你确定这是你的最终答案吗?相信自己的能力,突破自己"等情绪激励语句,可以提升模型在部分任务上的表现。这反映了 prompt 设计对模型行为的深远影响。
十、In-Context Learning:不训练也能做新任务
10.1 上下文学习
GPT-3 中首次发现,LLM 可以通过任务描述和少量示例组成的 prompt 完成新任务,而无需更新模型参数。这被称为上下文学习(In-Context Learning,ICL)。
- Zero-shot:只给任务描述,不给示例。
- Few-shot:给出几个输入-输出示例,让模型模仿。
10.2 示例选择与顺序的影响
示例的选择和排列顺序会显著影响 ICL 性能。同一组示例的不同排列可能带来准确率的大幅波动。因此,在实际应用中需要精心设计示例。
10.3 标签正确性重要吗?
surprisingly,研究表明即使示例标签是随机的,模型性能下降幅度也很小(约 0-5%)。这说明 ICL 中示例的格式、分布和提示方式可能比标签本身更重要。
10.4 示例数量的影响
实验表明,使用少量示例(通常 1-8 个)即可显著提升模型性能,但继续增加示例数量并不总是带来收益,甚至在某些任务上会导致性能下降。
十一、Chain of Thought:让模型"一步步思考"
11.1 CoT 的核心思想
Chain of Thought(CoT)通过在 prompt 中引导模型输出推理过程,显著提升复杂推理任务(如数学、逻辑)的表现。经典触发词是:"Let's think step by step."
11.2 Zero-shot CoT 与 Few-shot CoT
- Zero-shot CoT:在问题后直接加入"Let's think step by step.",无需示例。
- Few-shot CoT:在 prompt 中提供包含推理过程的示例,效果更佳。
实验显示,Zero-shot CoT 相比 Zero-shot 提升明显,但 Few-shot CoT 效果通常更好。
11.3 CoT 与模型规模的关系
CoT 的能力随模型规模增大而涌现。对于参数量较小的模型,CoT 可能产生负面影响;只有当模型足够大时,CoT 才能带来显著提升。
十二、Retrieval-Augmented Generation:用外部知识增强 LLM
12.1 为什么需要 RAG
LLM 的回答基于训练数据中的已有知识。当问题涉及最新信息(如"2024 年诺贝尔物理学奖得主是谁?")或行业专业知识时,模型可能产生幻觉或无法回答。
12.2 RAG 的优势
RAG(检索增强生成)通过引入外部检索模块,在生成前先从知识库中检索相关文档,再基于检索结果生成回答。其优势包括:
- 动态知识扩展:补充模型中缺乏的知识。
- 提高生成准确性:通过事实支持生成内容,减少错误。
- 灵活性:适用于问答、内容生成、搜索优化等多种场景。
RAG 是当前解决大模型知识时效性和领域专业性问题的有效方案。
十三、总结
大语言模型的全流程可以概括为:文本先经过 tokenization 和 embedding 进入模型,位置编码补充顺序信息,Transformer 架构实现高效长距离依赖建模;预训练后通过 SFT、RLHF/DPO 与人类偏好对齐;实际部署时,利用 PEFT 降低微调成本,通过合理的解码策略和推理加速提升生成效率;最后,借助 Prompt Engineering、In-Context Learning、Chain of Thought 和 RAG 等技术,充分释放大模型的能力。
理解这些技术点及其相互关系,是掌握 LLM 应用与研发的必经之路。希望本文能为你的 LLM 学习之旅提供一份清晰的路线图。