论文笔记:FITNETS: HINTS FOR THIN DEEP NETS
背景
论文:FitNets: Hints for Thin Deep Nets,Adriana Romero、Nicolas Ballas、Samira Ebrahimi Kahou、Antoine Chassang、Carlo Gatta 与 Yoshua Bengio,发表于 ICLR 2015(arXiv v4)。
2014--2015 年的视觉任务冠军几乎都是又宽又深的网络(VGG 19 层、GoogLeNet 22 层)。这类模型推理时要做巨量乘法、吃显存,无法直接部署到内存与延迟受限的场景。模型压缩这条线上,前人已经走出了三步:
- Buciluă et al.(2006):用集成给无标注数据打标签,再训练小网络模仿;
- Ba & Caruana(2014,本系列第一篇):把深而宽的网络压缩成更浅但更宽的学生;
- Hinton et al.(2014,本系列第二篇):用带温度的软目标做蒸馏,但学生深度仍与教师相仿。
作者一针见血地指出这三条路的共同缺陷:它们都没有利用"深度" ------要么压缩后更浅、要么深度不变。而深度恰恰是表示学习的核心:它鼓励特征复用,高层表示更抽象、更具不变性;理论上(Montúfar et al. 2014)深度网络对某些函数族的表达能力随深度指数级增长。
那么为什么没人把学生做得更深?因为深而窄的网络极难训练。连续的非线性堆叠让损失面高度非凸,存在大量局部极小与鞍点。为缓解这一优化难题,学界此前尝试过逐层贪婪预训练、课程学习、在中间层堆叠 softmax 分类头(Deeply-Supervised Nets,DSN)等方法。
FitNets 的答案是:别只模仿教师的输出,也模仿教师的中间表示 。教师的隐藏层状态被称作 hint (提示),学生中被指定学习该 hint 的层称作 guided layer (引导层)。论文的口号式结论是------在 CIFAR-10 上,一个参数量少到教师 1/10 的深学生网络,反而超过了教师的准确率。
中心思想
FitNets 的核心主张可以拆成三点:
- "更小更快"与"更深更好"可以同时达成,而且并不矛盾。 深度带来泛化,薄度(thinness)带来速度;二者的权衡由学生容量决定。这与 Ba & Caruana 的结论形成直接对照------那篇论文压缩出的是浅而宽的学生,参数量与推理代价并没有优势。
- 知识不止存在于输出层。 输出的软目标只编码了"各类别相对相似度",而中间层表示携带了更强的结构信息,尤其是当学生远比教师窄时,单靠输出对齐无法给深层网络足够的优化信号。
- hint 的本质是提供一个更好的参数空间起点。 作者明确指出:HT 与 KD 的唯一区别就是参数空间的初始位置------KD 从随机初始化出发,HT 从教师 hint 引导出的位置出发。深网络中鞍点与局部极小大量繁殖,随机起点常常找不到好解,而 hint 把学生推进了一个"好吸引域"。
还有一个值得单独强调的理论视角:作者把 hint 训练解释为课程学习(Curriculum Learning)的通用化形式 。教师的交叉熵项让教师自信的样本对学生产生更强的推动、教师不自信的样本(概率接近均匀分布)推动更弱,即教师按自己的置信度给样本打分,自动度量了样本"难度" ;而退火系数 λ \lambda λ 则逐步把学习重心从简单样本移向困难样本。与 Bengio(2009)靠人工启发式定义"简单性"、Gulcehre & Bengio(2013)依赖端任务先验知识不同,FitNets 的课程信息完全从教师模型中推导出来,与具体任务无关。
主要方法
1. 先回顾 KD:为什么它不够
设教师输出 softmax P T = s o f t m a x ( a T / τ ) P^T = \mathrm{softmax}(a^T/\tau) PT=softmax(aT/τ),学生输出 P S = s o f t m a x ( a S / τ ) P^S = \mathrm{softmax}(a^S/\tau) PS=softmax(aS/τ), τ > 1 \tau > 1 τ>1 用于软化信号。KD 的损失为:
L K D ( W S ) = H ( y t r u e , P S ) + λ H ( P τ T , P τ S ) \mathcal{L}{KD}(W_S) = H(y{true}, P^S) + \lambda\, H(P^T_\tau, P^S_\tau) LKD(WS)=H(ytrue,PS)+λH(PτT,PτS)
第一项是学生输出与真实标签的交叉熵,第二项让学生学习教师的软化输出。作者指出:KD 是为"学生与教师深度相仿"设计的。他们也观察到学生略深时 KD 仍有效,但随着学生继续加深,KD 训练依然陷入深网优化困境(见下文深度实验)。
2. Hint 训练与卷积回归器
作者选教师的中间层 输出作为 hint,学生也取一个中间层作为 guided layer,让学生学会预测 hint 。注意作者的一个重要提醒:hint 本身是一种正则化,guided layer 设得越深,网络自由度越低,越容易过正则化,因此要避免把 guided layer 定在太靠后的位置。
由于教师通常比学生宽,hint 的输出维度一般大于 guided layer,需要在 guided layer 之上加一个回归器(regressor,也常被译作适配器) 把维度映射到与 hint 一致。hint 训练损失为:
L H T ( W G u i d e d , W r ) = 1 2 ∥ u h ( x ; W H i n t ) − r ( v g ( x ; W G u i d e d ) ; W r ) ∥ 2 \mathcal{L}{HT}(W{Guided}, W_r) = \frac{1}{2}\left\| u_h(x; W_{Hint}) - r\big(v_g(x; W_{Guided}); W_r\big) \right\|^2 LHT(WGuided,Wr)=21 uh(x;WHint)−r(vg(x;WGuided);Wr) 2
其中 u h , v g u_h, v_g uh,vg 分别是教师/学生到 hint/guided 层的嵌套函数, r r r 是回归器, W r W_r Wr 是其参数。注意 u h u_h uh 与 r r r 必须使用相同的非线性,输出才可比。
回归器为什么要设计成卷积形式 :若 hint 与 guided 层都是卷积层,用全连接回归器的参数量为 N h , 1 × N h , 2 × O h × N g , 1 × N g , 2 × O g N_{h,1} \times N_{h,2} \times O_h \times N_{g,1} \times N_{g,2} \times O_g Nh,1×Nh,2×Oh×Ng,1×Ng,2×Og(空间尺寸与通道数的乘积),代价爆炸。改用卷积回归器,令核 k 1 × k 2 k_1 \times k_2 k1×k2 满足 N g , i − k i + 1 = N h , i N_{g,i} - k_i + 1 = N_{h,i} Ng,i−ki+1=Nh,i( i ∈ { 1 , 2 } i \in \{1,2\} i∈{1,2}),使回归器输出的空间尺寸与教师 hint 一致,参数量降到 k 1 × k 2 × O h × O g k_1 \times k_2 \times O_h \times O_g k1×k2×Oh×Og,远小于全连接版本。回归器只在训练时使用,推理时丢弃。
3. 两阶段训练(Algorithm 1)
给定已训练好的教师 W T W_T WT 与随机初始化的学生 W S W_S WS,以及 hint 层索引 h h h、guided 层索引 g g g:
- 第一阶段 :只训练学生从第 1 层到第 g g g 层的参数 W G u i d e d W_{Guided} WGuided 与回归器 W r W_r Wr,最小化 L H T \mathcal{L}_{HT} LHT(回归器以小随机值初始化)。此时学生尚未接触任何分类任务。
- 第二阶段 :丢弃回归器 ,把第一阶段得到的 W G u i d e d W_{Guided} WGuided 作为学生前 g g g 层的初始化,再对整个 学生网络端到端地最小化 L K D \mathcal{L}_{KD} LKD。
超参数(CIFAR): τ = 3 \tau = 3 τ=3, λ \lambda λ 从 4 线性退火到 1(500 个 epoch;MNIST 上为前 150 个 epoch),RMSprop,初始学习率 0.005,batch 128,参数随机初始化于 U ( − 0.005 , 0.005 ) U(-0.005, 0.005) U(−0.005,0.005)。
4. 关键消融:为什么必须用教师的隐藏状态,而不是分类目标
这是本文最精彩、也最容易被忽略的部分。既然想给学生中间层加监督,为什么不用"期望输出"(分类目标)?作者把四种替代方案全试了一遍,结论是全部失败:
| 方案 | 结果 |
|---|---|
| 分阶段训练,两阶段都针对分类目标 | 阶段 1 找到了好的局部极小,但不足以让阶段 2 学习,未能收敛 |
| 分阶段训练,阶段 1 分类目标 + 阶段 2 用 KD | 同上,未能收敛 |
| 联合优化:中间层监督 hint + 输出层分类目标 | 换多种初始化与学习率(RMSprop),无法让它学习 |
| 联合优化:中间层监督 hint + 输出层 KD | 未能缓解,未能收敛 |
| DSN:每层都加分类 hint(19 层架构) | 88.2%,显著低于 FitNets 的 91.61% |
作者由此得出结论:用与分类强相关的、判别性很强的 hint 去监督中间层过于激进,而教师的隐藏状态是一种"更平滑的 hint",能带来更好的泛化。这也从反面印证了"中间表示比分类目标更有价值"这一核心主张。
5. 实验结果
教师均为 Goodfellow et al.(2013b)的 maxout 卷积网络(3 个卷积层 96-192-192 + 500 单元 maxout 全连接层),学生 FitNet 4 为 19 层 3×3 卷积(更薄),约 2.5M 参数。数据预处理为对比度归一化 + ZCA 白化,训练中做随机水平翻转。
| 数据集 | FitNet | 教师 | 对照 |
|---|---|---|---|
| CIFAR-10 准确率 | 91.61%(∼2.5M 参数) | 90.18%(∼9M) | Ba & Caruana 集成压缩仅 85.8%(∼70M);Maxout 90.65%、NiN 91.2%、DSN 91.78% |
| CIFAR-100 准确率 | 64.96%(∼2.5M) | 63.54%(∼9M) | Maxout 61.43%、NiN 64.32%、DSN 65.43% |
| SVHN 错误率 | 2.42%(∼1.5M) | 2.38%(∼4.9M,仅 32% 容量) | Maxout 2.47%、NiN 2.35% |
| MNIST 错误率 | 0.51%(∼30K) | 0.55%(∼361K,参数量 12 倍) | 标准反传 1.9%、KD 0.65%、Maxout 0.45%、DSN 0.39% |
| AFLW 错误率 | FitNet 1(乘法少 15 倍)KD 4.58% → HT 2.55% ;FitNet 2(乘法少 2.5 倍)KD 1.95% → HT 1.85% | 4.21% | --- |
MNIST 一栏是一次干净的三方法消融:同一个 30K 参数的深薄网络 ,标准反传 1.9%,KD 0.65%,加上 hint 后降到 0.51%------hint 的增益是独立于 KD 的。AFLW 上则显示 hint 对更薄的网络收益更大(FitNet 1 提升 2 个百分点,FitNet 2 仅 0.1)。
深度---算力的控制变量实验(CIFAR-10)是验证核心假设的关键。作者固定计算预算(30M 与 107M 次乘法),构造 3/5/7/9 层(实际实验延伸到 13 层)的网络,仅改变深度与每层通道数(越深越薄)。结论:
- 30M 预算下,标准反传训练不动 5 层以上 的网络,KD 最多到 7 层,而 HT 能训练 13 层;
- 同等预算下更深的网络泛化更好:带 hint 训练时,11 层比 5 层在 107M 预算下高 4.11%、在 30M 预算下高 3.4%;
- 同等容量与层数下,HT 也普遍优于 KD:107M 预算的 7 层网络上 HT 比无 hint 高 0.7%(89.45% → 90.1%)。
速度---精度权衡(GPU 实测,均对齐教师):
| 模型 | 层数 | 参数量 | 乘法次数 | 准确率 | 相对加速 | 压缩率 |
|---|---|---|---|---|---|---|
| Teacher | 5 | ∼9M | ∼725M | 90.18% | 1× | 1× |
| FitNet 1 | 11 | ∼250K | ∼30M | 89.01% | 13.36× | 36× |
| FitNet 2 | 11 | ∼862K | ∼108M | 91.06% | 4.64× | 10.44× |
| FitNet 3 | 13 | ∼1.6M | ∼392M | 91.10% | 1.37× | 5.62× |
| FitNet 4 | 19 | ∼2.5M | ∼382M | 91.61% | 1.52× | 3.60× |
摘要中"参数量少 10.4 倍仍超过教师"指的正是 FitNet 2(862K 参数、91.06%)。
特点(优缺点)
优点
- 首次把中间层表示纳入知识蒸馏体系,为此后整个 feature-based KD 方向(注意力迁移、神经元选择性迁移等)铺了路;"hint/guided layer"这一对概念被沿用至今。
- 真正利用了深度,而非仅仅压缩。Ba & Caruana 压缩出浅而宽的学生,参数与推理代价没有优势;FitNets 的学生可以比教师深得多、薄得多,速度与精度同时改善(FitNet 1 快 13 倍、参数少 36 倍)。
- 消融做得极其扎实。四种替代监督方案全部失败、DSN 对比 88.2% vs 91.61%、MNIST 上标准反传/KD/HT 三方法对照,把"教师隐藏状态是更好的 hint"这一论断从猜测变成了有证据的结论。
- 理论视角清晰统一 。"HT 与 KD 只差参数空间起点"一句话说清了机制;课程学习的解释则把教师置信度、 λ \lambda λ 退火与样本难度串成一条线。
- 效率---精度 trade-off 被定量报告,而不是只给一个点:读者能直接按自己的算力预算查表选学生。
- 适配到多种架构与任务:MNIST、CIFAR-10/100、SVHN(街景门牌号分类)、AFLW(人脸检测),教师也从 maxout 换成 ReLU 卷积网络,说明方法不绑定特定架构。
缺点与局限
- 必须先训练好教师,训练成本翻倍;教师质量仍是学生上限的隐性约束。
- hint/guided 层需人工指定 。实验中 hint 几乎固定为教师第 2 层(表 6/7 的标注均为
hint: g←2),guided 层索引随学生深度手工调整,没有任何自动选择机制。 - 超参数偏多且敏感 : λ \lambda λ 初值与线性退火日程、温度 τ \tau τ、两阶段各自的学习率与早停准则,都需要逐数据集调。
- 存在过正则化风险,作者自己警告 guided layer 越深越容易过正则化;但"多深算深"没有给出可操作的判据。
- MSE 损失 + 线性回归器隐含"师生特征空间可线性对齐"的假设,当教师与学生结构差异极大(如 CNN vs Transformer、不同分辨率特征图)时未必成立;论文并未验证这类极端情形。
- 需要更正一处常见误读 :本文没有做回归任务实验 。AFLW 虽是人脸关键点数据库,但论文把任务改造成了 16×16 图块的人脸/非人脸二分类(sigmoid 输出层),属于分类而非回归。因此"方法对回归任务也有效"这一说法在本文中找不到依据。
- 消融范围有限:所有实验中学生都比教师更深更薄,论文没有报告师生结构接近时 hint 是否仍有增益,也没有系统研究教师深度变化的影响;"只在师生差异大时起作用"这类推断超出了本文证据。
- 报告的是 ICLR 2015 会议论文,附录提供了完整架构与超参,但代码依赖当时的 Theano/Pylearn2 生态,复现已不如现代框架方便。