一、LLM 到底在做什么?
给它一段上下文,它会预测“下一段最可能出现的 token”。
LLM的关键不在于“猜中一个固定答案”,而在于输出一个概率分布:每个候选 token 都有概率。然后模型从这个分布中选出一个 token,追加到上下文后,再用新的上下文继续预测。如此循环,文章、对话、代码就被逐步生成出来。这种“边预测、边生成”的机制正是LLM的核心,技术上我们称之为自回归生成。
为了把预测准确率逼近极限,模型被迫把大量人类知识压缩进参数空间。它并不是先“理解”再“预测”,而是在持续优化预测误差时,逐步形成了可用于推理的内部表征。对于高难度文本,如果模型缺少结构化理解,就很难持续预测正确的下一个词。
二、Transformer
1) Tokenization:
模型不直接处理字面词语,而是处理 token。,Tokenization(分词/令牌化) 是将连续的文本拆解为 Tokens 的过程。它是大语言模型处理语言的第一步。
2) Embedding:
每个 token 会映射成一个数字向量(空间坐标点),语义相近的 token,向量往往更接近。
- 词表:模型可识别的 token 集合。可以类比为“超级字典”的全部词条;GPT-3 量级里常见规模约
50,257,包含完整单词、词片段和标点。 - 嵌入维度:每个 token 被映射成多长的向量。GPT-3 约为
12,288,即每个 token 用 1.2 万个特征坐标描述其语义与用法。 - 嵌入矩阵:连接词表与向量空间的大表,形状是
V x d。当模型读到某个 token id,就去矩阵对应行取出该 token 的向量表示。
因此参数量可直接拆解为:50,257 x 12,288 ≈ 6.17 亿。这些交叉位置上的数值都是可学习权重,会在训练中反复调整,让语义接近的词(如“猫/狗”)更靠近、语义无关的词(如“猫/手机”)更远。
为什么维度需要这么高?因为语言不是三维几何体,而是高复杂度的语义系统。高维向量能并行编码词性、语气、语义类别、逻辑关系和上下文偏好,后续 Attention 才能做更细粒度的语境重组与推理。
词向量会更新吗?会。这里要区分两个阶段:先查到“静态初始向量”,再在神经网络中变成“动态隐藏状态”。
- 静态向量:同一个 token 在查表那一刻拿到的初始向量固定不变。
- 动态向量:一旦进入 Transformer 各层,这个向量会在每层 Attention/MLP 中被持续改写,语义逐步从“抽象词条”变成“当前句子的具体含义”。
这正是模型能做语义消歧的关键:如果只用静态向量,不做逐层更新,模型很难区分一词多义和复杂上下文关系。
3) Attention:
当模型处理一个词(如“王”)时,会按下面四步完成语义更新:
- 发出查询(Query):我现在到底指什么语义?
- 扫描全场(Key):上下文里谁与我相关?
- 计算关联度(Attention Score):每个词该分配多少注意力权重?
- 提取信息(Value):把高相关词的信息汇总回来,更新当前词向量。
多头注意力可理解为:
- 语法头:关注主谓宾关系,谁对谁做了什么。
- 语义头:关注领域线索,词义该往哪个语义簇靠。
- 指代头:关注代词回指,“他/它”具体指谁。
4) 前馈层(MLP):
前馈层会对每个位置做两步变换:
- 维度扩张(特征放大):先把向量投影到更高维空间(常见约 4 倍宽度),让模型有更多“槽位”检测细粒度模式。
- 非线性筛选(激活函数):经过
GELU/ReLU等非线性函数,抑制弱信号、保留关键特征,再投影回原维度。
为什么这一层不可或缺:
- 知识存储:大量事实性与模式化知识主要沉淀在 FFN(前馈神经网络) 权重中
- 语义改写:Attention 负责聚合信息,FFN 负责把“搜集来的线索”压成“可用于下一层推理的表示”。
- 非线性能力:没有激活函数,堆很多线性层本质上仍接近线性映射,模型表达复杂逻辑关系的能力会显著下降。
从参数分布看,Transformer 中前馈层通常是参数大户(常占据主要份额)。这也是它在“记住知识 + 识别模式 + 细化语义”上表现强的核心原因。
5) 反复堆叠:Attention 与 MLP 交替多层执行
为什么要交替执行?可以把每层看成一个加工车间:
- Attention:先收集上下文情报,判断当前词该参考谁。
- MLP/FFN:再把情报做非线性提炼,写回更有判别力的表示。
语义不是一次成型,而是层层累积。比如“王”在浅层也许只捕捉到邻近词,中层开始判断是姓氏还是头衔,深层再结合全文主题,形成任务相关的最终解释。
同一个 token 的隐藏状态在不同深度关注点不同:
- 底层(前几层):偏语法与局部结构(词性、邻接关系、局部搭配)。
- 中层(中间层):偏语义与常识(场景、情绪、角色关系)。
- 顶层(最后几层):偏预测准备(为“下一个 token”构造最有区分力的表示)。
为什么自回归预测主要看序列末尾?因为“下一词决策点”就在当前位置。末尾位置的向量经过多层堆叠后,已经压缩了前文关键信息,再与词表空间匹配,得到最可能的下一个 token 分布。
| 阶段 | 表示状态 | 类比 |
|---|---|---|
| 输入阶段 | 静态 token / 初始向量 | 原始零件 |
| 中间层 | 动态上下文向量 | 组装中的半成品 |
| 最终层(末尾) | 用于预测的高判别表示 | 即将触发结论的引信 |
6) Unembedding + Softmax:从向量变成概率分布
到这一步,模型手里仍是一串高维数字(隐藏状态),还不是人类可读的词。解嵌入矩阵(W_U) 的任务,就是把“思想向量”映射回词表空间。
- 作用:把末尾位置的隐藏状态,投影成对全部候选 token 的打分。
- 参数规模:与嵌入矩阵同量级,常见也是约
50,257 x 12,288 ≈ 6.17 亿。 - 参数共享:不少模型会做权重共享(weight tying),近似写作
W_U = W_E^T。
计算上可以理解为:用当前末尾向量去和词表中每个候选词向量做相似度打分(常用点积)。这组原始分数就叫 logits,可能像 [15.2, -3.1, 0.5, ...],能排序但还不是概率。
Softmax 会把 logits 变成合法概率分布:
生成时常用 温度(temperature, T) 控制随机性:
- T 低:分布更尖,输出更保守、更可预测。
- T 高:分布更平,输出更多样,但跑偏风险更高。
- T 接近 0:近似总选最大概率,风格稳定但容易模板化。
- 拉开差距:高分词概率被放大,低分词概率被压低。
- 概率合法化:所有候选词概率位于
[0,1]且总和为1。
最后进入 Sampling(采样):模型通常不会永远贪心选第一名(否则易模板化)。温度等采样参数会改变分布形状,允许次高概率词在合适场景被选中。选定新 token 后,它会被拼回上下文,进入下一轮自回归预测循环。
三、训练到底在做什么:
1) 预训练(Pretraining)
模型从随机参数开始,最初输出基本是噪声。训练时把样本前文喂给模型,让它预测后续 token,再把预测与真实 token 对比,通过反向传播更新参数。这个过程在海量样本上反复进行。
你可以把训练理解成“调一台有数千亿旋钮的机器”,每次根据误差微调旋钮。随着样本累计,模型逐渐学会更好的统计规律与语义规律。
2) 后训练(Post-training)与微调(Fine-tuning)
概念层级可以按包含关系理解为:
- 后训练:基座模型完成后到发布前的训练总阶段。
- 指令微调:属于微调的一种,让模型学会听指令、按格式回答。
- 对齐训练:目标是让模型更有用、更安全、更符合人类偏好。
在后训练里,它们分别扮演不同角色:
- 微调(技术手段):通用参数更新动作,可用于领域能力、格式能力、风格能力等多种目标(含全量微调与高效微调)。
- 对齐(训练目标):不是主要增加新知识,而是校准输出倾向,让模型更稳定地选择“人类更喜欢”的回答。
一句话记忆:后训练是阶段,微调是方法,对齐是目标,RLHF/DPO 是实现目标的路径。
3) 对齐训练
预训练后的模型“会续写”,但不一定“会服务”。对齐训练的核心是用人类偏好重排输出概率,让模型在可用性与安全性上更像助手。
- 有用性(Helpfulness):更倾向直达问题核心,减少绕圈子。
- 安全性(Safety):降低有害、违规、危险内容的生成概率。
- 语气一致性(Tone):回答更稳定、礼貌、专业。
- 指令遵循问题:长上下文中若经常忽略格式/长度要求,常与 SFT 质量和指令数据覆盖度相关。
- 幻觉与安全问题:长文推理出现胡编或不当建议,常与对齐策略(RLHF/DPO)及其数据质量相关。
四、上下文窗口:
模型一次处理的 token 数有限,这叫上下文窗口。窗口越大,能参考的历史越多,长文一致性和复杂任务表现通常更好;窗口受限时,长对话会出现“记忆衰减”。
五、KV Cache
- 没有 KV Cache:每写一个新字都要从第 1 页重读到当前页,越写越慢。
- 有 KV Cache:每写完一段就把关键信息记在“记事本”里,下一步只做增量计算。
长文本推理的复杂度压力:序列增长时,注意力计算代价会显著上升(常写作 O(N^2));KV Cache 的价值在于避免重复计算,提升连续生成效率。
1) KV 爆炸:
KV Cache 省了时间,但会吃显存。上下文越长,缓存越大;在大模型长对话里,显存瓶颈往往先于算力瓶颈到来。
- 内存压力:缓存持续累积,可能占用非常可观的显存。
- 显存受限:不是“算不动”,而是“没地方存更多 KV”。
2) 工程优化
- MQA / GQA:让多个注意力头共享(或分组共享)Key/Value,降低缓存体积,提高长上下文吞吐。
- PagedAttention:把 KV Cache 按页管理,缓解内存碎片,提高显存利用率与并发能力。