作者:Hengyu Shi, Tianyang Han, Peizhe Wang等
解读:AI生成未来

文章:https://arxiv.org/abs/2605.04913 代码:https://github.com/HumyuShi/LoPT
大语言模型后训练时,任务梯度一定要穿过整个模型吗?我们提出 LoPT(Local-Learning Post-Training):一种面向 LLM 后训练的简单方法。它把 task-gradient reach(任务梯度可达范围) 作为显式设计变量,在 Transformer 中点插入 stop-gradient boundary,让后半模型负责 task adaptation,前半模型负责 representation preservation,辅助重建头只在训练时使用,推理时没有额外计算。
一句话概括:后半模型学任务,前半模型保表示。
LoPT 的目标不是改变模型推理结构,也不是再造一个新的 adapter,而是重新设计后训练时任务梯度的传播路径:任务梯度不再默认穿过整个模型,而是在中点被截断。
今天的大语言模型完成预训练之后,通常还要经过 SFT、DPO、RLHF、GRPO 等后训练过程,才能真正变成可用系统。这些方法的监督信号不同、优化目标不同、训练流程也不同,但它们往往共享一个默认设定:任务损失会端到端反传穿过整个 Transformer。
这个设定很自然,也很通用。但在后训练阶段,它未必总是最优。原因很简单:预训练数据很宽,后训练数据往往很窄。 一个后训练数据集可能只强调某种回答格式、某类 instruction-following 风格、某个数学任务族、某种 reward signal 或某类对齐偏好。如果这些更窄的任务梯度一路反传到模型底层,就可能带来三个问题:显存更高、反向依赖更长、更容易扰动预训练表示。
完整反传意味着需要保存更多跨层激活,backward graph 覆盖整个 Transformer 堆栈;任务目标需要跨越完整模型深度做 credit assignment,优化路径更长;而低层和中层表示通常承载了很多通用能力,如果窄任务梯度直接重塑这些表示,模型在一些没有被后训练数据重点覆盖的能力上可能出现退化。所以 LoPT 想问的问题不是“再换一个 loss 吗”,也不是“再加一个 adapter 吗”,而是:任务梯度到底应该走多远?
LoPT 的结构可以直接看图:

图:LoPT 方法概览。中点 stop-gradient boundary 将任务梯度限制在后半模型,同时前半模型通过局部特征重建保持可训练。
核心机制很简单:Transformer 被划分为前半部分 k₁ 和后半部分 k₂;k₂ 接收标准任务损失,例如 SFT loss 或 GRPO loss;k₁ 不接收任务损失的直接梯度;中点通过 detach() / stop-gradient 截断任务梯度;k₁ 仍然通过 lightweight feature reconstruction objective 保持可训练;辅助头训练后移除,推理路径与普通 causal LM 一致。 这意味着 LoPT 不是简单 freeze 前半模型。如果只是 freeze,前半模型就完全不动了;而 LoPT 的前半模型仍然会通过局部重建目标继续更新,维持一个稳定、可用、与后半模型兼容的表示接口。它真正做的是:任务梯度不再 full-depth 反传,但前半模型仍然通过局部目标维护稳定接口。
我们不把所有表格都铺出来,只看几个最有代表性的结果。
在 Alpaca-52K + Llama-3.1-8B-Instruct 这个设置下,标准 E2E SFT 在部分评测能力上出现了明显下降。这其实很符合直觉:Alpaca-52K 是一个通用指令数据集,并不会充分覆盖数学推理、严格指令遵循等所有能力。如果任务梯度一路反传到模型底层,就可能把原本预训练中学到的一些通用能力“冲掉”。 LoPT 的表现更稳。它不让任务梯度直接进入前半模型,而是让前半模型通过局部重建维持表示接口,因此能减少这种后训练带来的能力退化。
Metric | E2E SFT | LoPT SFT | Gain |
|---|---|---|---|
GSM8K | 46.62 | 72.10 | +25.48 pp |
IFEval | 30.50 | 46.03 | +15.53 pp |
Seven-benchmark avg | - | - | +7.22 pp |
Peak memory | 60.6 GB | 38.9 GB | ↓36% |
Training speed | 14,483 tok/s | 14,882 tok/s | ↑3% |
也就是说,在这个设置下,LoPT 不只是把显存降了下来,还把 E2E SFT 中最明显的能力掉点拉了回来。
GRPO 的训练成本里,policy update 阶段非常关键。LoPT 在这个阶段的收益很直接:更新更省显存,速度也更快。 在 GSM8K GRPO + Qwen2.5-7B-Instruct 上,LoPT 保持主任务表现接近 E2E,同时在部分 held-out 指标上更稳。
Metric | E2E-GRPO | LoPT-GRPO | Gain |
|---|---|---|---|
GSM8K | 88.70 | 89.09 | +0.39 pp |
IFEval | 56.01 | 59.70 | +3.69 pp |
Peak memory | 75.39 GB | 59.66 GB | ↓21% |
Step time | 1.71 s/step | 1.56 s/step | ↓9% |
这里的重点不是说 LoPT 在 GRPO 上把主任务大幅拉高,而是:在保持 GRPO 适配能力的同时,LoPT 让 policy update 更便宜。 对于 RL-style 后训练来说,这个收益很实用。
LoRA 控制的是参数化方式,LoPT 控制的是任务梯度传播范围。二者并不冲突。在Qwen2.5-7B + MetaMathQA 100K + LoRA rank=32 的 SFT 设置中,LoPT+LoRA 相比 E2E+LoRA 继续带来收益。
Metric | E2E+LoRA | LoPT+LoRA | Gain |
|---|---|---|---|
IFEval | 53.05 | 55.45 | +2.40 pp |
GSM8K | 84.49 | 85.13 | +0.64 pp |
Wins | - | 7/7 | - |
Average | - | - | +0.67 pp |
Peak memory | 68.37 GB | 43.88 GB | ↓36% |
Throughput | 28,794 tok/s | 30,524 tok/s | ↑6% |
这说明 LoPT 不是 LoRA 的替代品,而是可以和 LoRA 叠加:LoRA 管低秩更新,LoPT 管任务梯度走多远。
DeepSpeed-ZeRO3 已经是非常常用的系统级显存优化。LoPT 在这个基础上仍然能从梯度路由角度继续节省开销。在 Qwen2.5-7B + 8×A100 + bs=4 + seq=1024 + ZeRO3 设置中:
Metric | E2E + ZeRO3 | LoPT + ZeRO3 | Gain |
|---|---|---|---|
Peak memory | 25.18 GB | 20.42 GB | ↓19% |
Throughput | 21,066 tok/s | 22,413 tok/s | ↑6% |
这组结果很关键,因为它说明 LoPT 不是只在普通训练栈里有效。即使已经使用 ZeRO3 这种系统级优化,LoPT 仍然可以从*任务梯度传播路径这个维度继续带来额外收益。
为了验证 LoPT 不是单点 trick,我们测试了多个模型、多个后训练任务、多个数据集和多个系统栈组合。模型包括 Qwen3-4B、Qwen2.5-7B-Instruct、Llama-3.1-8B-Instruct,以及 Qwen2.5-32B-Instruct sanity check;后训练任务包括 SFT 和 GRPO;SFT 数据集包括 Alpaca-52K、Tulu-3 SFT Mix 100K、Magpie-Pro 100K、MetaMathQA 100K;GRPO 数据集包括 GSM8K-train 和 NuminaMath;评测覆盖 MMLU、IFEval、ARC-Challenge、GSM8K、HellaSwag、TruthfulQA、Winogrande;系统栈组合覆盖 Gradient Checkpointing、LoRA、DeepSpeed-ZeRO1/2/3、Pipeline Parallelism。
整体结论是:LoPT 在 SFT 和 GRPO 中都能降低训练成本;在 LoRA、ZeRO、checkpointing、pipeline parallelism 等常见训练栈下也能叠加使用。
LoPT 最值得关注的地方,不只是省显存,也不只是速度更快。它真正提出了一个新的后训练视角:后训练优化的不只是 loss、参数量和系统栈,也包括任务梯度的传播范围。
过去大家经常讨论 LoRA 是否更省参数、ZeRO / DeepSpeed 是否更省显存、gradient checkpointing 是否更适合当前配置、pipeline parallelism 如何扩展 batch 和 sequence length。LoPT 补充了另一个维度:任务梯度该走多远,本身就是一个可以设计的变量。
所以,LoPT 不是另一个 adapter,也不是单纯的 memory trick。它更像是:面向 LLM 后训练的梯度路由策略。
LoPT 尤其适合四类场景:第一,后训练数据较窄,比如某类 instruction 数据、某类数学推理数据、某种 reward signal,或者某个任务族定向微调,这类数据更容易让 full-depth task gradient 扰动预训练能力;第二,训练显存敏感,LoPT 截断任务损失的全深度反向图,可以减少 activation storage 和 backward computation;第三,想保留 held-out 能力,尤其是 instruction following、commonsense、truthfulness、held-out reasoning ability 等能力;第四,已经在用 LoRA / ZeRO / checkpointing / pipeline parallelism,LoPT 可以和这些系统栈叠加,不需要推翻已有训练流程。
LoPT 做了一件简单但重要的事:LLM 后训练时,任务梯度不一定非得一路传到最底层。 通过在 Transformer 中点插入 stop-gradient boundary,LoPT 将模型自然地拆成两种角色:后半部分负责 task adaptation,前半部分负责 representation preservation。
最核心的结果可以概括为:SFT 上,Alpaca-52K + Llama-3.1-8B 中 GSM8K +25.48 pp、IFEval +15.53 pp、显存 ↓36%;GRPO 上,GSM8K + Qwen2.5-7B 中 GSM8K +0.39 pp、IFEval +3.69 pp、policy-update 显存 ↓21%;LoRA 上,LoPT+LoRA SFT 七项全胜,平均 +0.67 pp、显存 ↓36%;DeepSpeed-ZeRO3 上,继续节省 19% 显存,并提升 6% 吞吐。
在后训练成本越来越高的背景下,LoPT 提醒我们:未来讨论 LLM 后训练,不只要问“训什么参数”,也要问:任务梯度到底应该走到哪里?
[1] Rethinking Local Learning: A Cheaper and Faster Recipe for LLM Post-Training
技术交流社区免费开放
这是一个高质量AIGC技术社群。
涉及 内容生成/理解(图像、视频、语音、文本、3D/4D等)、大模型、具身智能、自动驾驶、深度学习及传统视觉等多个不同方向。这个社群更加适合记录和积累,方便回溯和复盘。愿景是联结数十万AIGC开发者、研究者和爱好者,解决从理论到实战中遇到的具体问题。倡导深度讨论,确保每个提问都能得到认真对待。
