一
第 05 章埋下的那条暗线——“规模本身会带来能力”——在 2020 年被变成了一门精确的科学。
这一年,OpenAI 的 Jared Kaplan、Sam McCandlish 等人发表了《神经语言模型的 scaling laws》1。他们系统地训练了从很小到很大的一系列语言模型,改变参数量 、数据量 、训练算力 ,记录每个模型的测试损失(交叉熵)。结果出乎意料地规整:损失随这三个量的增长,都呈现出幂律下降——而且这种规律横跨了七个以上的数量级1。
以参数量为例,损失大致服从:
其中 是一个小指数(约 0.076), 是数据本身的不可约熵(语言固有的随机性,再大的模型也消不掉)。幂律的关键性质是:在对数-对数坐标下,它是一条直线。这意味着,你只要训练几个不同规模的小模型、拟合出这条直线,就能外推预测一个大得多的模型的损失——而不必先把它训练出来。
把它跑出来看(配套代码 code/11_scaling_rlhf.py):
展开代码 · 11_scaling_rlhf.py
"""
第 11 章配套代码:
(1) 幂律 scaling law 拟合与外推(损失 vs 参数量)
(2) Bradley-Terry 偏好模型(RLHF 奖励模型的数学核心)
Runnable with: numpy only. python3 11_scaling_rlhf.py
"""
import numpy as np
def power_law_demo():
"""Kaplan 2020: L(N) ≈ (Nc / N)^alpha_N + L_inf (幂律)。
在 log-log 坐标下是一条直线,这正是它能可靠外推的原因。
"""
print("=== (1) 幂律 scaling: L(N) = (Nc/N)^a + L_inf ===")
Nc, a, L_inf = 8.8e13, 0.076, 1.69 # Kaplan 式量级(示意常数)
print(" 参数量 N 预测损失 L (规模每涨10倍, 损失稳定下降)")
for N in [1e6, 1e7, 1e8, 1e9, 1e10, 1e11]:
L = (Nc / N) ** a + L_inf
print(f" {N:.0e} {L:.3f}")
print(" 关键: log-log 下近似直线 => 可外推预测更大模型的损失(GPT-3 据此规划)")
def chinchilla_optimal():
"""Chinchilla 2022: 同算力下,参数 N 与数据 D 应同比缩放(约50/50)。
算力 C ≈ 6*N*D。给定 C,最优 N、D 各占一半。
"""
print("\n=== (2) Chinchilla 计算最优分配 ===")
print(" 算力 C ≈ 6*N*D ; 最优时 N 翻倍则 D 也翻倍 (约 20 tokens/参数)")
for C in [1e21, 1e22, 1e23]:
# 简化: N_opt ∝ C^0.5, D_opt ∝ C^0.5
N_opt = (C / 6) ** 0.5
D_opt = (C / 6) ** 0.5
print(f" C={C:.0e} FLOPs -> N_opt~{N_opt:.2e} 参数, D_opt~{D_opt:.2e} tokens")
print(" 结论: GPT-3(175B,300B tokens) 欠训练; Chinchilla(70B,1.4T tokens) 同算力更优")
def sigmoid(x): return 1 / (1 + np.exp(-x))
def bradley_terry():
"""RLHF 奖励模型: 人类偏好 y_w > y_l 的概率 = sigmoid(r(y_w) - r(y_l))。
训练奖励模型即最大化偏好对的对数似然。
"""
print("\n=== (3) Bradley-Terry 偏好模型 (RLHF 奖励模型核心) ===")
print(" P(回答A优于回答B) = sigmoid(r_A - r_B)")
for rw, rl in [(2.0, 1.0), (2.0, 0.0), (3.0, -1.0), (1.0, 1.0)]:
p = sigmoid(rw - rl)
print(f" r(优)={rw:>4} r(劣)={rl:>5} -> P(选优)={p:.3f}")
print(" 奖励模型损失 = -log sigmoid(r(优) - r(劣)),从人类排序里学出标量奖励")
if __name__ == "__main__":
power_law_demo()
chinchilla_optimal()
bradley_terry()
参数量 N 预测损失 L
1e+06 5.706
1e+08 4.520
1e+10 3.684
1e+11 3.364 ← 规模每涨10倍, 损失稳定、可预测地下降
Kaplan 的论文还发现一件对实践极重要的事:在很宽的范围内,网络的宽度、深度等结构细节影响很小,真正决定损失的是规模(参数、数据、算力)1。这等于说:“别纠结架构调参了,把规模放大。”这个结论直接成了 GPT-3 的规划手册——OpenAI 据此预测,把模型放大到 1750 亿参数会带来什么,然后真的去训了,并在 GPT-3 上验证了少样本上下文学习的惊人能力2。
二
scaling laws 之所以是范式级的发现,在于它把“做更强的 AI”从一门玄学变成了一门工程。
在它之前,提升模型靠的是发明新架构、调超参、试各种技巧,回报不确定。scaling laws 说:有一条平滑、可预测的曲线,沿着它放大规模,损失就会可靠地下降。于是研究策略变了——与其赌一个新点子,不如沿着这条确定的曲线投入算力。这也解释了 2020 年后 AI 竞赛为何迅速变成一场“算力与数据的军备竞赛”:当回报可预测,理性的玩家就会把资源压在放大上。
但 Kaplan 的具体配方很快被修正。2022 年,DeepMind 的 Hoffmann 等人发表了《训练计算最优的大语言模型》,即著名的 Chinchilla 工作3。他们问了一个更精细的问题:给定固定的算力预算 (约等于 ),应该把它怎么分配给“更大的模型”和“更多的数据”?
Kaplan 2020 的结论偏向参数——约 73% 算力给参数、27% 给数据。Chinchilla 重新做了更细致的实验,得出相反的结论:参数量和数据量应该按相同比例缩放——模型每翻一倍,训练数据也该翻一倍,大致是 50/50 分配3。这个修正的杀伤力在于它揭示:当时几乎所有大模型都“过大而欠训练”——它们参数堆得很多,但喂的数据太少,没把参数喂饱。为证明这点,DeepMind 训了一个只有 700 亿参数、但用了 4 倍数据的 Chinchilla,在相同算力下全面超过了 2800 亿参数的 Gopher、1750 亿的 GPT-3、5300 亿的 Megatron-Turing NLG3。
跑一下计算最优分配(code/11_scaling_rlhf.py):
算力 C ≈ 6*N*D ; 最优时 N 翻倍则 D 也翻倍 (约 20 tokens/参数)
C=1e+22 FLOPs -> N_opt~4.08e10 参数, D_opt~4.08e10 ...
结论: GPT-3(175B,300B tokens) 欠训练; Chinchilla(70B,1.4T tokens) 同算力更优
Chinchilla 之后,“小一点的模型 + 多得多的数据”成了新共识,直接影响了后续 LLaMA 等模型的设计哲学——用相对小的参数、海量数据,做出又强又便宜部署的模型。Kaplan 与 Chinchilla 之争,是 scaling 这门年轻科学自我修正的一个范例:两者都对幂律成立,分歧只在最优分配的系数上。
三
但 scaling 只解决了“能力”,没解决“有用”。一个用海量文本训练的语言模型,学会的是模仿互联网文本的分布——它会续写、会模仿任何风格,但它不天然地有帮助、诚实、无害。问它问题,它可能续写出一个更长的问题列表(因为训练数据里问题常成堆出现);它会一本正经地编造、会顺着有害请求往下写。预训练模型是个博学但不听话的“续写机器”,不是一个助手。
把它变成助手,需要对齐(alignment)——让模型的行为符合人类的意图和价值。对齐的关键技术,是基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF)。
RLHF 的思想源头是 2017 年 Christiano 等人的《从人类偏好做深度强化学习》4。他们的洞察是:很多我们想要的行为,很难写成数学奖励函数,但人类一眼就能比较哪个更好。比如“什么是好的回答”无法精确定义,但给人看两个回答,他能说出更喜欢哪个。于是不去手写奖励函数,而是从人类的成对偏好里学出一个奖励函数。Christiano 等人证明,仅用不到 1% 的交互让人类提供偏好反馈,就能训练智能体解决 Atari 游戏和模拟机器人运动这类难以指定奖励的任务4。
2022 年,OpenAI 的 Ouyang 等人在《训练语言模型遵循指令》(InstructGPT)里,把 RLHF 系统地用到了语言模型上5。这就是 ChatGPT 背后的核心训练方法。
四
InstructGPT 的 RLHF 是一个清晰的三步流程5:
第一步,监督微调(SFT):先收集一批人类写的高质量示范——给定指令,人类示范应该怎么回答。用这些“指令-理想回答”对,对预训练模型做有监督微调,让它先学会“回答指令”这种格式,而不是漫无目的地续写。
第二步,训练奖励模型(RM):让 SFT 模型对同一个指令生成多个回答,请人类排序(这个比那个好)。用这些人类排序,训练一个奖励模型——它输入一个回答,输出一个标量分数,分数高低反映人类偏好。这一步的数学核心是 Bradley-Terry 偏好模型:人类偏好回答 胜过 的概率,被建模为两者奖励之差的 sigmoid:
训练奖励模型就是最大化所有人类偏好对的对数似然,即最小化 。跑一下(code/11_scaling_rlhf.py):
P(回答A优于B) = sigmoid(r_A - r_B)
r(优)=2.0 r(劣)=1.0 -> P(选优)=0.731
r(优)=3.0 r(劣)=-1.0 -> P(选优)=0.982
r(优)=1.0 r(劣)=1.0 -> P(选优)=0.500 ← 奖励相等则各半
奖励差越大,模型对“哪个更好”越确信;这个可微的偏好模型,把离散的人类排序变成了一个连续的、可优化的奖励信号。
第三步,强化学习优化(PPO):把奖励模型当作奖励信号,用强化学习(近端策略优化, PPO)继续训练语言模型——让它生成的回答尽可能获得奖励模型给的高分。同时加一个约束(KL 惩罚),防止模型为了刷高奖励而偏离原来的语言能力太远(否则它会发现一些钻奖励模型空子的怪异输出)。
三步走完,模型从“博学的续写机”变成了“听话、有帮助的助手”。InstructGPT 的一个惊人结果是:经过 RLHF 的 13 亿参数小模型,其输出被人类偏好的程度,超过了未对齐的 1750 亿参数 GPT-35——参数小了 100 多倍,却更有用。这说明对齐带来的“有用性”提升,和单纯放大规模是两个正交的维度:规模给你原始能力,对齐把能力导向人类想要的方向。
五
把这两件事的关系想清楚,是理解今天大模型的关键。scaling 负责“聪明”,对齐负责“有用”——缺一不可。
只有 scaling,你得到一个能力惊人但不受控的续写引擎(GPT-3 那样,需要精心设计提示词才能驾驭)。只有对齐而没有足够规模,你得到一个听话但没什么本事的小模型。2022 年底的 ChatGPT,正是两者合流的产物:一个被 scaling 推到足够大、又被 RLHF 对齐得足够听话的模型,第一次让普通人能用自然语言流畅地使唤一个 AI。它在两个月内达到一亿用户,把这部从 1943 年开始的技术史,第一次推到了全人类的日常生活里。
值得强调的是,对齐远未“解决”。RLHF 有已知的局限:人类反馈本身有偏差和不一致,奖励模型会被钻空子(reward hacking),模型可能学会“听起来对”而非“真的对”(谄媚、自信地胡说)。如何让 AI 在变得更强的同时仍然诚实、可控、价值对齐,是一个开放的、且随能力增长而愈发紧迫的问题——它催生了 RLHF 的各种改进(如直接偏好优化 DPO、宪法式 AI、可扩展监督等)和整个 AI 安全研究领域。这部技术史在这里抵达它的现在进行时。
六
用一张图把规模与对齐这两条最前沿的主线收束:
【规模 (scaling) — 负责"聪明"】
预测下一个词 + 放大(N,D,C) ──► 损失幂律下降 L(N)=(Nc/N)^α+L∞
Kaplan 2020: 偏参数(73/27),规划了 GPT-3
Chinchilla 2022: 参数与数据同比(50/50),多数模型"欠训练"
=> 得到强大但不听话的"续写引擎"
│
▼
【对齐 (RLHF) — 负责"有用"】
① SFT: 人类示范 → 学会"回答指令"
② RM: 人类排序 → Bradley-Terry: P(优于)=σ(r_w−r_l) → 学出标量奖励
③ PPO: 用奖励模型 + KL约束 强化学习 → 优化到"人类偏好"
=> 1.3B 对齐模型 被偏好 > 175B 未对齐 GPT-3
│
▼
ChatGPT (2022) = 足够大 × 足够对齐
配套的 manim 动画 assets/manim/ch11_scaling_rlhf.py(ScalingLaw 与 RLHFPreference 两个 Scene)把两块基石演出来:前者展示损失在 log-log 坐标下随规模下降成一条可外推的直线(幂律),散点落在线上、虚线把它延伸去预测更大的模型——规模可预测;后者展示 RLHF 的链条,人给出“A 比 B 好”的成对偏好,训出奖励模型,策略分布随之被推向高奖励区。两段动画分别对应“规模可预测”与“偏好可量化”——大模型时代的数学基石。
从 1943 年 McCulloch 和 Pitts 把神经元写成一个逻辑命题,到 2022 年 ChatGPT 用人类反馈学会对话,这条线走了将近八十年。它的每一步——可计算(M-P)、可学习(感知机)、可训练多层(反向传播)、可编码结构先验(CNN/LSTM)、可大规模运行(数据+算力+地基)、可统一为注意力(Transformer)、可大规模预训练(BERT/GPT)、可预测地放大(scaling laws)、可对齐于人(RLHF)——都是在回答同一个问题的一个侧面:如何让一台只会做加法和乘法的机器,逐步逼近“理解”与“生成”。这条感知与生成的主线走到今天的逻辑,已经清晰可辨;而另一条关于“决策与行动”的主线,将从下一章重新展开,并最终与它合流。
本质
scaling laws 与 RLHF 解决的是两个截然不同、却同样根本的问题。scaling laws 把“做更大的模型值不值得”从一场昂贵的赌博,变成了一道可外推的工程预算题——损失随规模的下降是一条幂律直线,于是你能在投入巨额算力之前就预测它会换来多少性能,这是 GPT-3 之后所有大模型敢于持续投入的底气。RLHF 解决的则是另一回事:预训练让模型学会了“人类文本的分布”,但“最可能的下一个词”并不等于“人类真正想要的回答”。它的办法是把难以写成损失函数的人类偏好,转译成一个可优化的奖励信号——人只需说“A 比 B 好”,就能训出一个会打分的奖励模型,再用强化学习把策略推向高分区。一个让能力可预测地变强,一个让变强的能力对齐到人的意图;正是后者第一次把第十二章起的那条强化学习主线,借进了语言模型的世界。
参考文献
-
Kaplan, J., McCandlish, S., Henighan, T., Brown, T. B., Chess, B., Child, R., Gray, S., Radford, A., Wu, J., & Amodei, D. (2020). Scaling Laws for Neural Language Models. 幂律 L(N)、跨 7+ 数量级、结构细节影响小、算力最优分配(~73/27)。arXiv:https://arxiv.org/abs/2001.08361
-
Brown, T. B., et al. (2020). Language Models are Few-Shot Learners(GPT-3, 175B 参数, 上下文学习)。arXiv:https://arxiv.org/abs/2005.14165 ;NeurIPS 2020:https://papers.nips.cc/paper/2020/hash/1457c0d6bfcb4967418bfb8ac142f64a-Abstract.html
-
Hoffmann, J., et al. (2022). Training Compute-Optimal Large Language Models(Chinchilla)。参数与数据同比缩放、多数模型欠训练、70B Chinchilla 胜 280B/175B/530B。arXiv:https://arxiv.org/abs/2203.15556
-
Christiano, P. F., Leike, J., Brown, T. B., Martic, M., Legg, S., & Amodei, D. (2017). Deep Reinforcement Learning from Human Preferences. 从成对偏好学奖励、<1% 反馈解 Atari/机器人。arXiv:https://arxiv.org/abs/1706.03741
-
Ouyang, L., et al. (2022). Training Language Models to Follow Instructions with Human Feedback(InstructGPT)。三步 SFT→RM→PPO、Bradley-Terry 偏好、1.3B 对齐胜 175B GPT-3、ChatGPT 技术底座。arXiv:https://arxiv.org/abs/2203.02155 ;PDF:https://arxiv.org/pdf/2203.02155