跳转到内容

彩票假设 — 大网里藏着一张能独立训出来的小网

是什么

彩票假设(Lottery Ticket Hypothesis)说的是:你随机初始化一个大神经网络,里面早就藏着一张稀疏的小子网——只要你能把它”挑”出来、并且用回原来的随机初始值重新训练,它能达到和大网一样的精度,甚至更快收敛。

日常类比:买了一整本彩票(大网),开奖后发现真正中奖的就那一两张(子网),而中奖号码在你买票那一刻就定了——不是训练之后才”长”出来的,是初始化时就埋好的。

为什么重要

在这篇之前,主流剪枝(pruning)的认识是:

  • 先训一个大网到收敛 → 砍掉小权重 → 微调(fine-tune)→ 得到一个小而准的网
  • 但如果你直接训那个剪完的小网(哪怕用同样结构)→ 通常训不动、精度差很多

所以业界默认:“大模型容量是必需的,小模型只是大模型的尸体”。

Frankle 和 Carbin 用一个简单实验把这个共识打穿:

  1. 同样的剪完结构
  2. 关键差别是——把剩下的权重重置回原始随机初始值(不是新随机、不是 fine-tune 后的值)
  3. 从头训 → 精度追上甚至超过大网

这意味着:过参数化(overparameterization)也许不是为了表达能力,而是为了让 SGD 更容易”撞上”一组好初始值。这个解释直接催生了之后五年的稀疏化、剪枝、初始化研究浪潮。

核心要点

整篇论文的方法其实就一个流程,叫迭代量级剪枝(Iterative Magnitude Pruning, IMP):

  1. 随机初始化整个大网,记下这一组初值 θ₀
  2. 训练 j 步,得到训练后的权重 θⱼ
  3. 剪掉绝对值最小的 p%(比如 20%)权重,留下一个掩码 m(哪些位置保留、哪些清零)
  4. 关键一步:把保留位置的权重重置回 θ₀ 里它们对应的初值——不是新随机、不是保留 θⱼ
  5. 用这个稀疏初始化重训 → 看精度
  6. 想剪更狠 → 把以上 1-5 当一轮,迭代多轮

“中奖票”(winning ticket)= 这张稀疏掩码 m 加上原始初值 θ₀ 中对应那部分。

三个最反直觉的发现:

  • 初值很重要:保留同一张掩码 m,但权重换成新随机值 → 训不出来。中奖号 = 拓扑 + 初值,缺一不可
  • 迭代剪 > 一次剪:每轮剪 20% 比一次剪 80% 留下来的票更”准”
  • 大网更容易抽到中奖票:网越大、越容易在随机初始化里包含一张好票。这给”为什么过参数化有用”提供了一个新解释

一段最小伪代码

# 1. 随机初始化,记下这一组
theta_0 = init_random(net)
net.load(theta_0)
# 2. 训 j 步
for step in range(j):
train_one_step(net)
theta_j = net.state_dict()
# 3. 按当前权重的绝对值排序,砍掉最小 p%
mask = top_k_by_magnitude(theta_j, keep_ratio=1 - p)
# 4. 关键:保留位置的权重换回 theta_0 里的值
theta_init_sparse = mask * theta_0 # 注意是 theta_0 不是 theta_j
net.load(theta_init_sparse)
# 5. 用稀疏初始化重训,看精度
train_full(net)

整篇论文的方法其实就是反复跑这段伪代码(迭代版多套一层 for 循环)。“换回 θ₀” 那一行是论文的灵魂。

实践案例

案例 1:MNIST 上的 LeNet

LeNet 大概 26 万参数。论文做完 IMP 后:

  • 剪到原大小的 10-20%(约 5-10 万参数)
  • 训练同样的轮数 → 测试精度和原网持平甚至略高
  • 把同样掩码下的权重换成新随机初值 → 精度大幅下降

这是最干净的一个验证。

案例 2:CIFAR10 上的 Conv-2/4/6

更大的卷积网,剪到 10-30% 大小:

  • 中奖票训练收敛得更快——同样精度下迭代步数最少 3.5 倍提速
  • 论文把这点解读为:“好的初始化让损失曲面变平滑了”

案例 3:VGG-19 / ResNet-18 — 假设要打补丁

到了更深更现代的网,直接重置回 θ₀ 失败——稀疏子网训不到原精度。

作者后续研究(2019-2020)打了一个补丁叫晚重置(late resetting / rewinding):

  • 不是回到 θ₀,而是回到训练早期某一步 θₖ(比如训了 1-2 个 epoch 之后的权重)
  • k 通常很小(占总训练步数 0.1%-1%)

晚重置版本能在 ResNet-50 / ImageNet 上工作。代价是”初值就藏好了”这个最干净的命题被弱化成”训练早期就藏好了”。

踩过的坑

  1. 掩码光对、初值不对 = 训不出来:很多人复现时换了随机种子就以为没事,结果精度暴跌。中奖票必须配套保存:掩码 + 当年的初值,两者绑定

  2. 一次剪太狠会塌:直接砍 80% 经常崩,必须迭代——每轮 20%,剪 5 轮。代价是计算量翻倍

  3. late resetting 被 Liu et al. 2019 反驳:他们发现在某些设置下,直接随机重训剪后结构也能匹配——这表明在某些规模上”中奖号 = 拓扑 + 初值”的强版本不成立,只是”拓扑”就够了。这个争论持续到今天

  4. 跨数据集迁移弱:在 CIFAR 上抽出的中奖票直接搬到 ImageNet 通常不灵

  5. 结构化稀疏 vs 非结构化稀疏:本文的剪是非结构化(任意位置清零),GPU 上不一定真的更快——要靠后续工作(如 NVIDIA 2:4 稀疏)才把这变成实际加速

适用 vs 不适用场景

适用

  • 想理解”为什么过参数化有用”——彩票假设给了一个”搜索先验”的解释
  • 研究稀疏化、剪枝、模型压缩 → 这是该领域 2019 年之后绕不开的起点
  • 启发式地选好初始化 → 后续 SNIP / GraSP / SynFlow 都受这套思路影响

不适用

  • 直接当生产剪枝方法 → 太贵(要多轮完整训练),工业界更常用 movement pruning / SparseGPT
  • LLM 时代的稀疏化 → 几十亿参数训一次都嫌贵,迭代多轮不现实,2023 年后主流转向训练后稀疏化
  • 想要”只换拓扑就行”的强结论 → 后续争议多,别引用得太自信

历史小故事(可跳过)

  • 2015 前后:Han et al. 提出”训练 → 剪 → 微调”三步法,业界共识”小网必须靠大网带”
  • 2018 年 3 月:Frankle 和 Carbin 在 arXiv 挂出第一版,提出彩票假设。审稿人最初不信
  • 2019 年 5 月:ICLR 2019 Best Paper Award,引爆稀疏化研究
  • 2019 年 10 月:Liu et al. “Rethinking the Value of Network Pruning” 反向论证
  • 2020 年:Frankle 团队提出 late resetting / linear mode connectivity,把假设推到 ImageNet 规模
  • 2023 年至今:LLM 时代关注转向训练后稀疏(SparseGPT / Wanda),但”初值决定可训性”的直觉仍在影响初始化研究

学到什么

  1. 过参数化可能是搜索先验,不是表达能力——大网不是为了”装下”复杂函数,而是为了”撞上”好的子网初值
  2. 简单实验也能打穿共识——这篇方法没复杂数学,就是”换初值再训一次”,但视角变了
  3. 初始化 + 拓扑是一对——二者绑定才有意义,单独换任何一个都会塌
  4. 强命题 → 弱命题的妥协是正常的——从 θ₀ 到 θₖ 是论文走向规模的代价,承认这点比硬撑要诚实

延伸阅读

关联

  • lottery-1994 —— Geman 等的早期偏差-方差讨论,给”大网为什么够用”提供一种早期视角
  • sparsegpt-2023 —— LLM 时代的稀疏化,与彩票假设走的是相反路线(训练后剪 vs 初始化时找)
  • adam-2014 —— Adam 优化器,IMP 实验里的默认优化器之一
  • adamw-2017 —— AdamW,当代 deep learning 训练的事实标准

反向链接

  • adam-2014 —— Adam — 让深度学习自己挑步长的优化器
  • adamw-2017 —— AdamW — 把 weight decay 从梯度里拆出来
  • double-descent-2019 —— Double Descent — 模型越大越准,过参数化时代的反常识曲线
  • lottery-1994 —— 彩票调度 — 用抽奖代替优先级的资源分配
  • sparsegpt-2023 —— SparseGPT — 175B 大模型一次过剪 50%,不重训