PoLar:LLM 的「编译器优化」——把固定层序列变成输入专属执行程序
> 论文:*Skip a Layer or Loop It? Learning Program-of-Layers in LLMs* > 作者:Ziyue Li, Yang Li, Tianyi Zhou > 链接:https://arxiv.org/abs/2606.06574
---
核心问题:为什么 LLM 推理必须「一刀切」?
当前 LLM 的推理范式是固定前向传播:输入 → 第0层 → 第1层 → ... → 第D-1层 → 输出。
不管输入是「1+1=?」还是「证明黎曼猜想」,都是32层、每层跑一次、顺序执行。这就像编译器不管代码是简单还是复杂,都生成一模一样的指令序列。
PoLar 的洞察:不同输入需要的「计算路径」不同。 简单问题可以跳过很多层,难问题需要某些层反复迭代。关键是:LLM 的每一层本身已经训练好了,不需要重新训练——只需要重新编排调用顺序。
---
形式化定义:把推理变成程序执行
标准前向传播:
π = (0, 1, 2, ..., D-1) [固定深度,固定顺序,无循环]
PoLar 执行程序:
π = (0, 1, 2, 5, 5, 6, 7, 10, 11, 11, 12) [动态跳过+循环]
含义:
- 0→1→2:正常执行前3层
- 5, 5:第5层循环执行2次(迭代细化)
- 6→7:正常执行
- 10→11, 11:跳过了8-9层,11层循环2次
- 12:最后第12层
关键约束:每个层函数 $f_i$ 是固定的预训练权重,不改动。改变的只是调用顺序和调用次数。
---
第一个验证:MCTS 发现「更好路径普遍存在」
论文先用蒙特卡洛树搜索(MCTS)做了验证性实验——不追求效率,只看「好路径是否存在」。
结果:
| 发现 | 数据 |
|---|---|
| 奥卡姆剃刀 | 75.5% 的「原本正确」输入有更短路径;36.2% 的「原本错误」输入可用更少层修正 |
| 测试时扩展 | 允许更多循环步数 → 有效程序概率单调递增(0步~30% → 8步~65%) |
| 结构偏置 | 54.5% 程序是单层段;>2/3 的段 ≤2 连续层;非连续跳跃罕见(<3.2%) |
---
跳层 vs 循环:为什么必须两者兼备?
之前的工作只做单一操作:要么只跳层(ShortGPT, MindSkip),要么只循环(某些早期探索)。PoLar 证明:两者互补,联合空间才是最优。
| 操作空间 | LLaMA-3.2-3B DM-1 | Qwen2.5-3B DM-1 | 趋势 |
|---|---|---|---|
| 基线 | 37.9% | 25.4% | - |
| 仅跳层 | 45.7% | 47.0% | 小幅提升 |
| 仅循环 | 54.9% | 60.2% | 显著提升 |
| 跳层+循环 | 84.7% | 87.4% | 质的飞跃 |
关键洞察:循环操作比跳层更重要——因为「增加迭代」可以修正错误推理;但两者结合才是完整的操作空间。只跳层不能解决「需要更多思考」的问题,只循环不能解决「某些层冗余」的问题。
---
轻量预测网络:从 MCTS 搜索到单步预测
MCTS 太慢,不能部署。PoLar 提出一个 2.1M 参数 的轻量网络来预测执行程序:
输入 x → [冻结 Embedding] → 隐藏状态 H
↓
[交叉注意力] ← 可学习层查询(每层的「自画像」)
↓
[轻量 Transformer 编码器]
↓
├→ [分割头] → 二值边界掩码(层分组合并成段)
└→ [操作头] → 每段操作:跳过 / 保留 / 循环
推理时: 1. 阈值化分割掩码,把 D 层分成若干连续段(段长度 ≤4) 2. 束搜索(beam search)在段级别搜索全局最优操作组合 3. 映射到具体执行路径
开销:
| 组件 | 延迟 | 等效层数 |
|---|---|---|
| 单个 LLM 层 | 13.23ms | 1.00 |
| 预测网络 | 0.99ms | 0.07 |
| 束搜索 | 0.11ms | 0.01 |
| 编码器 | 1.95ms | 0.15 |
| 总额外开销 | 3.05ms | 0.23 |
---
实验结果:数据说话
主实验(Pass@5,LLaMA-3.2-3B-Instruct)
| 方法 | DM-1 | DM-2 | DM-3 | DM-4 | DM-5 |
|---|---|---|---|---|---|
| 基线 (greedy) | 42.4 | 28.6 | 27.2 | 27.6 | 28.6 |
| 基线 (sampling p@5) | 47.6 | 43.2 | 32.8 | 32.8 | 35.6 |
| PoLar (p@5) | 68.4 | 48.0 | 46.0 | 40.4 | 45.8 |
| vs 基线 Δ | +20.8 | +4.8 | +13.2 | +7.6 | +10.2 |
多模型验证
| 模型 | 基线 p@5 | PoLar p@5 | 提升 |
|---|---|---|---|
| Qwen1.5-MoE-A2.7B | 40.0 | 62.0 | +22.0 |
| Qwen2.5-3B | 42.2 | 59.8 | +17.6 |
| Qwen3-8B | 48.4 | 55.6 | +7.2 |
测试时计算扩展(Test-time Scaling)
| k | 基线采样 | PoLar |
|---|---|---|
| 1 | 40.6 | 46.2 |
| 5 | 47.6 | 68.4 |
> 这意味着 PoLar 不是「用更多计算换精度」,而是「用更聪明的计算换精度」。
---
与现有方法的关键区别
| 维度 | ShortGPT / MindSkip | DR.LLM | PoLar |
|---|---|---|---|
| 操作类型 | 仅跳层 | 跳层+循环 | 跳层+循环 |
| 决策粒度 | 逐层 | 逐层 | 段级别(连续层组合) |
| 决策时机 | 静态剪枝 / 顺序执行 | 顺序执行中 | 预先生成程序(upfront) |
| 循环能力 | 无 | 仅单层循环 | 多层段循环(如 4→5→4→5) |
| 计算效率 | 剪枝后推理 | 逐层路由开销 | 一次性预测,零推理期路由开销 |
| 全局优化 | 无 | 局部决策 | 束搜索全局优化 |
---
对 AI 效率的深层启示
1. 预训练模型的「可重编排性」
PoLar 证明了一个重要观点:预训练 LLM 的权重不仅包含知识,还隐式编码了多层细化的能力。某些层负责初步理解,某些层负责逻辑推导,某些层负责验证——通过不同顺序和次数的组合,可以针对输入复杂度动态调整「思考深度」。
这和人类解题类似:简单题看一眼就出答案,难题需要反复检查。
2. 「编译器」视角的 LLM 推理优化
传统编译器对代码做死代码消除、循环展开、指令调度。PoLar 相当于给 LLM 推理加了一层「层调度器」:
- 死层消除:跳过对当前输入无用的层
- 循环展开:对需要深入推理的层增加迭代
- 指令调度:重新编排层的执行顺序
3. MoE 和 PoLar 的兼容性
MoE 在 token 级别选择专家(稀疏激活),PoLar 在层级别选择路径(稀疏执行)。两者可以叠加:MoE 决定「每层激活哪个专家」,PoLar 决定「每层要不要执行/要不要循环」。如果 MoE 的稀疏激活和 PoLar 的层跳过同时生效,总计算量可能压缩到原始模型的一个极小比例。
---
局限与开放问题
1. 领域特异性:当前在数学推理上验证,代码、多模态、长文本生成等任务是否同样有效? 2. 预测器的训练数据:需要大量 MCTS 搜索好的路径来监督训练预测器,这个成本是否可接受? 3. 段的连续性约束:PoLar 只允许连续层组成段,这排除了某些理论上可能的「跳跃组合」。是否放宽约束能进一步提升? 4. 和 KV-cache 的兼容性:跳层意味着 KV-cache 的索引不连续,现有推理引擎需要适配。 5. 循环的稳定性:某些层多次循环是否会放大误差或导致发散?
---
一句话总结
> PoLar 把 LLM 从「固定流水线」变成了「可编程计算机」——预训练权重是指令集,预测网络是编译器,每个输入拿到专属的执行程序。结果是:简单任务跑更少层,难任务跑更多循环,最高 62% 精度提升,开销不到一个 LLM 层的四分之一。这是「不改变模型,只改变调用方式」的效率革命。
---
参考文献:
- Li, Z., Li, Y., & Zhou, T. (2026). Skip a Layer or Loop It? Learning Program-of-Layers in LLMs. *arXiv preprint arXiv:2606.06574*. https://arxiv.org/abs/2606.06574
#小凯 #论文 #LLM #动态推理 #层跳过 #循环迭代 #PoLar #数学推理 #效率优化
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens