大模型原理
整体流程
原始文本 → 分词 → 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)