简介:这份PDF研究报告由甲子光年智库于2025年2月发布,围绕DeepSeek引发的算法与算力效率变革展开,面向关注AI技术走向的研究人员、工程师、政策制定者以及创业者与投资者。报告从人工智能由技术驱动转向需求驱动的战略拐点切入,梳理算力效率拐点、模型参数量分化与算法创新循环三条主线,并拆解DeepSeek-R1以少量冷启动数据加多轮强化学习(含GRPO算法)降低训练开销、提升推理能力的实现路径,同时讨论低成本小模型在终端部署、普惠应用及产业政策层面的影响。资源包内含1个PDF文件,约1.63MB,图文并茂,含技术革命周期、训练算力对比、参数规模走势等图表,便于快速抓取关键结论,用于汇报或选题参考。目前已有1613人学习。
1. 算力拐点:为什么“更少 GPU 跑出同样效果”值得刨根问底
2025 年人工智能领域最反直觉的一个结论正在被反复验证:模型的推理能力不再和 GPU 数量成正比。有一批团队把强化学习从“微调收尾”提到“训练主干”的位置,用远少于同行的算力,做出了在数学和代码上接近满分的推理模型。真正的冲击点不在榜单分数,而在算力效率——当同样的卡能换来更多智能,整个行业的成本曲线就被重画了一遍。
这件事值得刨根问底,是因为它既不靠硬件红利,也不靠更多人工标注,而是靠对训练流程和模型架构的重新设计:算法创新的重心从“堆数据、堆参数”转回“改流程、改目标函数”。理解了这层设计,你才能判断下一个“便宜又好用”的模型是怎么来的,也才能在自家业务里分清哪些环节是真瓶颈、哪些只是惯性。
2. 训练流程重构:R1 为什么敢把监督微调从主流程里拿掉
传统的三阶段训练(预训练 → 监督微调 → 人类反馈强化学习)里,强化学习只干一件事:让模型说话更讨人喜欢。而这一系列推理模型做的事情,是把强化学习抬到“涨能力”的位置上,让模型自己搜索解题路径。这个位置一换,整条流水线的成本结构和数据依赖全变了。
2.1 三阶段范式的成本结构,以及它卡在哪
先把老流水线的账算清楚。预训练吃掉绝大部分算力,产出的是一个“会续写”的基座;监督微调(SFT)用人类写的示范对话,把基座掰成“会答题”的助手;RLHF 再用偏好对比数据训一个奖励模型(RM),用 PPO 把策略往人类偏好的方向推。
这条链上有两个隐性天花板。第一是示范数据的质量天花板:SFT 只能模仿人类写出来的推理过程,人类没想到的解法,模型也学不到;而且长链推理的标注成本极高,一条高质量数学推理标注的边际成本远高于一条普通问答。第二是奖励模型的可欺骗性:RM 是在有限偏好数据上拟合出来的打分器,策略一旦开始优化它,就会迅速找到打分的漏洞——输出更长、更客气、更“像好答案”,但未必更正确。这就是强化学习里最经典的 reward hacking。
提示:判断一个训练方案是否真的“省钱”,要看的不是 GPU 小时数,而是“每提升一个点的能力,需要多少条人工数据”。SFT 路线的边际成本是线性增长的,RL 路线在奖励可自动验证时边际成本接近零。
2.2 R1-Zero:纯强化学习的自我进化与它的副作用
R1-Zero 的思路很极端:跳过 SFT,直接从基座模型开始做强化学习,奖励只有两条规则——答案对不对、格式合不合规。没有人类示范,没有偏好模型,模型在自我博弈里自己长出长链推理、自我检查、回溯重算这些行为。
它能 work 的前提是“奖励可自动验证”。数学题有唯一答案,代码题有测试用例,这两类任务上,正确性是可以用程序判定的,不需要人来打分,也就不存在 RM 被 hack 的问题。反过来说,开放域写作、创意策划这类没有客观判据的任务,这套方法直接失效。
副作用也很明确:输出可读性差、中英文混杂、格式散乱。原因不神秘——奖励函数里没有任何一条约束“说人话”。基座模型的预训练语料里中英都有,在只追求得分的前提下,模型自然会挑最省 token、最容易被判对的表达方式。这是一个纯粹的工程缺口,不是能力缺口。
2.3 冷启动数据回归:用几千条样本换收敛速度
R1 相对 R1-Zero 的改动,是在强化学习之前塞进一小批高质量的冷启动数据做 SFT,业内公开的技术报告给出的量级是几千条。这几千条的作用不是“教知识”,而是给基座一个格式先验:让它知道“思考过程应该放在哪个段落、结论应该怎么收尾”,从而把强化学习的搜索空间收窄到正确的解空间里。
后面还有两步关键动作。一是拒绝采样:用训好的模型对大量题目生成多个回答,只保留答案正确、推理链完整、格式合规的样本,量级在几十万条,用来做第二轮 SFT;二是全场景强化学习,推理类任务继续用规则奖励,通用类任务换成偏好奖励模型,把“会推理”和“会聊天”两个目标缝合起来。
拒绝采样的过滤逻辑看起来简单,但它决定了后面所有小模型的上限。常见的实现思路是四道闸门一起卡:
def keep_sample(prompt, reasoning, answer, gold, zh_ratio_threshold=0.6): # 闸门一:结果必须正确。normalize 负责去掉空格、单位、分数形式差异 if normalize(answer) != normalize(gold): return False # 闸门二:推理链不能太短。长度低于阈值的多半是"猜对",学它会污染策略 if len(reasoning) < 200: return False # 闸门三:语言一致性。中英混杂的样本蒸馏到小模型上会放大成语病 if zh_ratio(reasoning) < zh_ratio_threshold: return False # 闸门四:格式合规。必须有可解析的思考段与结论段,否则下游没法切分 return has_think_block(reasoning) and has_answer_block(reasoning)四个参数的取舍值得单独说。normalize决定了“正确”的判定粒度,判定过严会把等价答案误杀,过松会把错答案放进来;len(reasoning)阈值是防止模型学到“不推理直接蒙答案”的捷径;zh_ratio_threshold是语言纯度的下限,调高会让样本量骤减;has_think_block这类结构检查是给下游蒸馏准备的,因为小模型训练时要按段落切分计算损失。这套过滤器本质上是在给“什么样的推理值得被模仿”下定义,定义偏一点,后面蒸馏出来的小模型就偏一片。
3. GRPO 机制拆解:砍掉 Critic 之后,优势函数怎么算
强化学习要更新策略,就得知道“这个动作比平均水平好多少”,也就是优势(advantage)。PPO 的做法是训一个价值网络去估计基线,GRPO 的做法是让同一道题生成一组答案,用组内平均分当基线。这个替换看起来只是省了个模型,实际上改的是整个显存账本和信用分配方式。
3.1 PPO 的四份显存开销,为什么先撑不住的是显存
PPO 在训练时同时驻留四个模型:策略模型(Actor)、价值模型(Critic)、奖励模型(Reward)、参考模型(Reference)。后两个只做前向、可以 offload,前两个都要前向加反向,而且要更新参数。
按混合精度加 Adam 优化器的常见配置估算,每个可训练参数大约要占 16 到 20 字节:fp16 权重 2 字节、梯度 2 字节、fp32 主权重 4 字节、Adam 的一阶和二阶动量各 4 字节。Actor 和 Critic 规模相当,等于把这份开销翻倍。一个 7B 级别的模型,光优化器状态就是上百 GB 量级,还没算激活值和 KV 缓存。这就是为什么长链推理场景下,PPO 往往不是训不动,是显存先爆。
更麻烦的是 Critic 本身难训。价值网络要估计的是“当前这个中间状态最终能得多少分”,而长链推理的中间状态分布极其稀疏——模型每一步的措辞都不同,Critic 很难泛化到没见过的推理路径上,估计偏差会直接传导成策略梯度的高方差。
3.2 组内归一化:用多次采样换掉一次价值估计
GRPO 的核心公式只有一行:对同一个 prompt 采样 G 个回答,得到 G 个标量奖励,然后用组内均值和标准差做标准化,作为每个回答的优势。
import torch def grpo_advantage(rewards: torch.Tensor, eps: float = 1e-4) -> torch.Tensor: """ rewards: [G] 同一个 prompt 下 G 个采样回答的最终奖励 返回: [G] 组内标准化后的优势,均值为 0、标准差为 1 """ mean = rewards.mean() std = rewards.std(unbiased=False) # 用总体标准差,G 通常很小,无偏校正会放大噪声 return (rewards - mean) / (std + eps) # eps 防止全对/全错时除零 def grpo_loss(logp, logp_old, adv, logp_ref, clip=0.2, beta=0.04): """ logp / logp_old / logp_ref: [B, T] 新策略、采样时策略、参考策略的逐 token 对数概率 adv: [B] 每个序列一个优势标量,广播到 token 维 """ ratio = torch.exp(logp - logp_old) # 新旧策略概率比 surr1 = ratio * adv.unsqueeze(-1) surr2 = torch.clamp(ratio, 1 - clip, 1 + clip) * adv.unsqueeze(-1) policy_loss = -torch.min(surr1, surr2).mean() # PPO 同款截断代理目标 # KL 用无偏估计(k3 估计器),直接加在 loss 上而不是逐 token 塞进奖励 delta = logp_ref - logp kl = (torch.exp(delta) - delta - 1).mean() # 恒非负,方差比 log-ratio 小 return policy_loss + beta * kl几个参数的实际含义:G是组大小,常见取值 8 到 64,太小则组内均值噪声大、优势信号抖,太大则采样成本线性上涨;clip沿用 PPO 的 0.2,作用是限制单次更新的策略漂移;beta是 KL 惩罚系数,控制新策略不要离参考策略太远,长链推理任务上这个值通常要调小,否则模型不敢探索新的推理路径;eps是为了在整组全对或全错时兜底。
组内归一化为什么能替代价值网络?因为它把“绝对难度”消掉了。一道极难的题,G 个回答可能全错,标准化后优势全是 0,梯度为 0,这次采样白跑但不产生错误信号;一道简单题全对也是同理。只有当组内出现对错分化时,才有有效梯度——模型学到的是“在同一道题内部,哪种推理方式更好”,而不是“这道题的绝对价值是多少”。这恰好是 Critic 最难估准的那部分。
3.3 奖励函数设计:规则奖励在什么条件下才成立
GRPO 省掉了 Critic,但对奖励函数的要求反而更苛刻,因为它必须能给出组内可区分的标量。R1 系列用的是两类规则奖励的加权和:准确性奖励和格式奖励。
准确性奖励的判定方式是解析最终答案再做精确匹配,这要求答案必须可解析、可归一化。数学题相对好办,代码题要靠测试用例通过率,而一旦答案形式自由(比如开放性证明),这条路就走不通。格式奖励用正则表达式检查思考段和结论段的标签是否成对出现,权重通常压得很低,因为格式分一旦占比过高,模型会学会“写一堆漂亮格式但推理胡来”。
注意:规则奖励最大的坑不是不准,而是可被钻空子。只要答案解析逻辑有漏洞(比如允许在答案段里塞多个候选答案),模型很快就会发现“多写几个总有一个对”,准确率指标看着涨,实际能力没动。奖励函数上线前,一定要拿模型自己生成的对抗样本来打一遍。
组内标准差为 0 的情况也要提前想好。训练进入后期,模型在简单题上稳定全对、在超难题上稳定全错,这两类样本贡献的梯度都是零,采样预算被白白烧掉。常见的做法是动态采样:一批 prompt 先过一遍,把全对和全错的组直接丢掉,只保留有分化的组做反向传播;或者做难度调度,按当前模型的历史通过率分层采样,让每个 batch 里都有一定比例的“跳一跳够得着”的题。
4. 参数两极化:小模型为什么突然“够用”了
2024 年之前,预训练模型的参数规模是一条单调上升的曲线;2025 年开始分叉,一头是几百 B 级的稀疏专家模型,一头是 1.5B 到 32B 的稠密小模型。这个分叉不是审美问题,是两条完全不同的技术账本。
4.1 两条分叉曲线:MoE 的显存账与算力账是分开的
大模型那一头走的是混合专家(MoE)路线。公开资料里提到的量级是总参数六百多 B、每个 token 实际激活三十多 B。这个结构的关键在于:显存占用按总参数算,计算量按激活参数算。也就是说,它可以同时拥有一个很大的知识容量和一个很小的单位推理成本。
这一点颠覆了“参数大 = 贵”的直觉。传统稠密模型里,参数量和计算量是绑死的,涨一个必须涨另一个;MoE 把这两件事解耦了,代价是路由网络要训得准、专家之间的负载要均衡,否则会出现“少数专家吃掉大部分 token”的塌缩。工程上还要处理专家并行带来的跨卡通信开销,这是另一本账。
小模型那一头走的是蒸馏路线,参数从 1.5B 一直到 70B,覆盖端侧到边缘服务器。这条路线的价值不在于“更小”,而在于“在小规模上保留了多少推理能力”。
4.2 蒸馏的本质:把推理链当监督信号
蒸馏听起来像是把大模型的输出喂给小模型做 SFT,但关键在于喂什么。如果只喂最终答案,小模型学到的是“结论的记忆”;喂完整的推理链,小模型学到的是“搜索的格式和策略”——先拆条件、再列式、中间自检、最后收敛。
这解释了一个反直觉的现象:经过蒸馏的 32B 模型在数学和代码上能逼近教师模型,但在世界知识和冷门事实上差距明显。因为推理是一种可迁移的程序性能力,而知识是不可迁移的查表。教师模型在强化学习阶段真正探索出来的,是一套“怎么想”的流程;蒸馏把这个流程变成了监督信号,学生不需要自己再走一遍强化学习的探索过程,省下的正是最贵的那部分算力。
代价是天花板被锁死。学生只能学到教师已经发现的解法,教师没想到的路径,学生也不会想到。所以蒸馏版和强化学习版是互补关系,不是替代关系。
4.3 端侧部署的真实瓶颈:内存带宽而不是算力
很多人以为端侧跑不动大模型是因为手机算力不够,实测下来最先撞墙的往往是带宽。自回归解码阶段,每生成一个 token,都要把当前参与计算的权重完整读一遍,这个过程中矩阵乘法的算术强度极低,GPU/NPU 的计算单元大部分时间在等数据。
粗算公式很简单:每秒 token 数 ≈ 有效带宽 ÷ 单个 token 需要搬运的字节数。
| 模型规模(激活参数) | 量化位宽 | 权重大小 | 手机带宽 68GB/s | 桌面 200GB/s |
|---|---|---|---|---|
| 1.5B | int4 | 约 0.75GB | 约 90 token/s | 约 260 token/s |
| 7B | int4 | 约 3.5GB | 约 19 token/s | 约 57 token/s |
| 7B | fp16 | 约 14GB | 装不下 | 约 14 token/s |
| 32B | int4 | 约 16GB | 装不下 | 约 12 token/s |
| 671B 总参 / 37B 激活 | int8 | 约 37GB | 装不下 | 约 5 token/s |
表里是理论上限,实际还要打对折,因为要扣掉 KV 缓存读写、算子调度和内存碎片。这张表能解释三件事:为什么端侧模型必须压到 10B 以下、为什么量化到 4bit 是刚需、为什么连 MoE 上端侧也不轻松——它省的是计算量,省不了权重搬运的字节数,除非把专家按需加载做成真正的分页换入换出。
4.4 另一条路:液态神经网络想解决的到底是什么
只要还在注意力机制里,KV 缓存就是绕不过去的账:上下文越长,缓存越大,解码时搬运的数据越多,显存和带宽被同时吃掉。这是架构层面的结构性成本,量化只能缓解,不能消除。
液态神经网络(LNN)走的是另一条路。它的计算单元来自动态系统理论:隐状态不是一堆被缓存的键值对,而是一个随时间连续演化的向量,权重本身由输入动态调制。推理时只需要维护一个定长的状态,不需要随着上下文增长而扩张缓存——内存是常数级的,这对流式处理、长时间在线的端侧场景非常对味。公开发表的对比结果显示,同等级别的 LNN 小模型在部分评测上能追平参数量大它数倍的 Transformer 模型。
代价同样明显。第一是训练并行性差,状态演化本质是序列递推,不像注意力那样能把整条序列摊平做并行矩阵乘,长序列训练的效率会明显吃亏。第二是精确检索能力弱,定长状态必然是有损压缩,需要“从长文档里逐字找回某一句话”的任务,它天生不占优。所以它更可能先落地在“手机上的文档摘要、语音流实时理解”这类场景,而不是替代通用大模型。
5. 避坑与排查:复现这条路线时最容易翻车的五个地方
纸面上的流程看起来顺,真跑起来问题都出在细节里。下面五条是我在实际复现和评估过程中反复遇到的,按“现象 → 原因 → 解决”整理。
5.1 训练侧:奖励与采样
第一条,输出长度失控。现象是训练到中后期,平均输出长度从几百 token 一路涨到几千,准确率却在原地踏步甚至下滑。原因是准确性奖励只看最终对错,长度没有任何约束,模型很快学会“多想一会儿总没坏处”,把大量 token 花在无意义的反复验算上。解决方式是给长度加软约束:组内对超长回答做长度惩罚,或者在优势计算后对长度做归一化处理,同时把格式奖励的判定收紧到“必须出现明确的结论段”,堵住“只思考不下结论”的路径。
第二条,整组奖励相同导致训练停滞。现象是损失曲线早早变平,采样日志里大量组的标准差为 0。原因是难度分布和模型当前能力不匹配,一个 batch 里全是太简单或太难的题。解决方式是做动态采样过滤,丢掉无分化的组,并对 prompt 池按历史通过率分层,保证每个 batch 里“能做对一部分”的题占多数,同时把采样温度维持在能让组内产生差异的区间,温度压得太低会让 G 个回答几乎一样。
第三条,奖励被钻空子。现象是训练指标漂亮,人工抽查发现推理过程全是胡写但答案碰巧对。原因是答案解析太宽松,比如允许在结论段里列出多个候选答案,模型就学会“广撒网”。解决办法是把解析器写死:只认唯一格式、只取第一个匹配、答案归一化后必须完全相等,同时用模型自己生成的样本来回归测试解析器。这一条踩一次就够记一辈子。
5.2 部署侧:量化与上下文
第四条,量化后推理能力断崖下滑。现象是 4bit 量化后通用问答几乎无损,数学推理准确率掉十几个点。原因是推理任务对数值精度更敏感,尤其是长链中间步骤的误差累积,加上激活值里存在少量幅度极大的离群通道,用 per-tensor 粒度量化会把这些通道压平。解决办法是权重用分组量化(group size 取 64 或 128)、激活保留较高精度、KV 缓存单独做量化策略,并且在量化后跑一遍推理任务的分项评测,而不是只看困惑度。
第五条,首 token 延迟高得离谱。现象是解码速度正常,但用户体感很慢。原因是首 token 属于预填充阶段,是计算密集型的,耗时随上下文长度超线性增长,长系统提示词加上长文档,预填充能吃掉大半总延迟。解决办法是压缩系统提示、对长文档做分块预填充、把可复用的前缀缓存下来做命中复用。这三招里,前缀缓存收益最大,因为大量请求共享同一段系统提示。
提示:排查端侧性能问题时,先分清是预填充慢还是解码慢。前者看算力利用率和上下文长度,后者看内存带宽和量化位宽,两者的优化手段几乎不重叠。
6. 设计取舍:低成本是设计出来的,不是省出来的
把上面几条线索收在一起,会发现这套方案没有一处是“免费的”:纯强化学习换来了探索能力,代价是可读性;冷启动数据换来了输出质量,代价是引入了人工依赖;GRPO 换来了显存,代价是采样成本翻 G 倍;蒸馏换来了端侧可部署,代价是天花板被教师锁死;MoE 换来了“大而便宜”,代价是路由训练和并行通信的复杂度。
| 取舍点 | 选了什么 | 放弃了什么 | 何时不该这么选 |
|---|---|---|---|
| 训练范式 | 强化学习为主干 | 依赖海量人工示范 | 奖励无法自动验证的开放域任务 |
| 优势估计 | 组内归一化替代 Critic | 采样的算力与时间 | 采样成本远高于价值网络时 |
| 模型形态 | MoE 稀疏激活 | 显存仍按总参数计 | 显存极度受限的端侧设备 |
| 能力交付 | 蒸馏到小模型 | 学生的能力天花板 | 需要教师未探索过的新解法时 |
| 上下文处理 | 定长状态的线性架构 | 精确长文检索 | 需要逐字定位原文的场景 |
所以“低成本”这个词需要拆开看。它指的是在给定任务分布和给定质量目标下,把算力花在了边际收益最高的地方——强化学习花在能自动判分的题上,蒸馏花在已经被验证的推理链上,端侧花在低比特量化和稀疏激活上。任何一环换个场景就不再成立。
验证一个“低成本”说法是否可信,我一般走三步。第一步拆定价:把每百万 token 的价格拆成输入、输出、缓存命中三段,看便宜是不是主要来自缓存复用而不是真降本。第二步做同题对照:拿蒸馏版和原版在同一批分布外题目上跑,看差距是稳定收敛还是随难度急剧扩大,后者说明学生只是背下了格式。第三步看长度分布:统计输出 token 的分布形态,如果平均长度远高于同类模型且准确率没有相应提升,那成本优势很可能被输出长度吃掉了。这三步不需要任何内部信息,公开接口就能做完。
从那以后我每次评估一个号称“性价比高”的模型,都强制走一遍这三步,踩过的坑告诉我,便宜从来不是标价牌上那个数字,而是“每单位有效智能花了多少钱”。希望帮到你。
本文还有配套的精品资源,点击获取