Skip to content

大模型原理

整体流程

原始文本 → 分词 → token编号 → 向量 → Transformer → 预测下一个词

一、分词(Tokenization)

模型只认数字,把文字切成 token 再编号。

BPE 核心: 从字符开始,把语料中最高频的相邻组合反复合并,直到词表够大(一般 5-15 万)。

"中国" 出现频率很高 → 合并成一个 token
词表同时保留 "中"、"国"、"中国",不删原来的

编码规则: 从左到右,优先取最长匹配。

"中国人" → 词表有"中国人" → 1个token
"中国人" → 词表没有"中国人",有"中国" → "中国"+"人" = 2个token

遇到生僻字:拆成 UTF-8 字节,不会崩。


二、向量化(Embedding)

词表和向量表一一对应,token 编号当行索引直接查表:

词表大小 × 向量维度  →  如 [100000 × 4096]

"猫" → [0.2, 0.8, -0.3, ...]
"狗" → [0.3, 0.7, -0.2, ...]  ← 语义近,向量近

如何训练: 随机初始化,和整个模型一起训练,每次只更新用到的那几行。训练完语义自动出现:出现语境相同的词向量自然靠拢。


三、Transformer

一句话:先融合上下文,再预测下一个词。

两个阶段都用它

训练阶段:文本 → Transformer → 预测 → 算错误 → 调参数(反复)
推理阶段:你的问题 → Transformer → 逐词生成回答(参数固定)

类比:训练=学生做题改错,推理=学生考试答题。同一个大脑,两种状态。

融合上下文:注意力机制

每个词生成三个角色(Q/K/V,乘训练出来的矩阵得到):

Q = 我想关注什么
K = 我能提供什么
V = 我实际的内容

每个词用 Q 跟所有词的 K 打分,按分数混合 V:

"他"问所有词:你和我多相关?
→ 小明 90分,小红 5分
→ "他"的新向量 = 主要混入"小明"的信息

打完分 → softmax 变概率 → 按概率加权求和 → 每个词都理解了上下文。 之后经过 FFN(全连接层)再深加工一次,一层结束。

GPT-4 叠了 96 层,越深理解越丰富。

预测下一个词

取最后位置的上下文向量,查词表打分,选词:

"今天天气很" → "很"的上下文向量(已看过所有词)
→ 词表打分 → softmax → 好:35%,棒:20%...
→ 按概率采样,选出"好"
→ 追加到输入,继续预测下一个

这叫自回归生成,一个词一个词生成,直到出现结束符。

同一个问题问两次答案不同,是因为每次采样有随机性(temperature 控制随机程度)。


四、训练

任务只有一个:预测下一个词,用海量文本反复做。

输入"今天天气很" → 预测"好" → 算 Loss → 反向传播调参数 → 重复万亿次

只做这一件事,模型自动学会了语法、常识、逻辑、知识……全部压缩在参数里。

预训练完 → SFT微调(学会听指令)→ RLHF(对齐人类偏好)→ 可用的助手


五、SFT 微调

预训练完只会续写文本,不会听指令。SFT 用精心标注的**(指令, 回答)对**继续训练:

指令:"帮我写封道歉信"  → 回答:"亲爱的XXX..."
指令:"用Python写冒泡排序" → 回答:"def bubble_sort..."

本质:有标准答案的训练(Supervised = 有监督 = 有答案)。

训练方式和预训练一样(还是预测下一个词),只是数据换成了高质量指令数据。数据量少(几万~几十万条),但质量要求高。


六、RLHF(对齐人类偏好)

SFT 之后会回答了,但回答质量参差不齐。RLHF 让人类告诉模型哪个回答更好。

三步:

① 同一问题生成多个回答,人工排序(A > B > C)
② 用排序数据训练"奖励模型"(学会给回答打分的裁判)
③ 强化学习:主模型生成回答 → 裁判打分 → 往高分方向调整

类比:学生写作文 → 老师打分 → 学生根据分数改进写法。


完整训练链路

海量文本预训练 → 续写机器(有知识)
      ↓ SFT
   听指令(有格式)
      ↓ RLHF
   对齐人类偏好(有帮助、安全、诚实)

   可用的 AI 助手(Claude / ChatGPT)

Last updated: