一、论文基本信息
论文题目:Reducing Transformer Depth on Demand with Structured Dropout
作者:Angela Fan、Edouard Grave、Armand Joulin
发表:ICLR 2020
方法名称:LayerDrop
实现:fairseq 中提供了 LayerDrop 的训练与预训练模型说明,包括 WMT En-De、RoBERTa Base、RoBERTa Large 等模型。(GitHub)
这篇论文的核心问题是:能不能只训练一个深层 Transformer,然后在推理阶段按需要直接裁剪成不同深度的浅层模型,而不需要重新训练或微调?
论文提出的答案是LayerDrop:训练时随机丢弃整个 Transformer layer,让模型在训练过程中见过大量“缺层”的子网络;推理时就可以直接删除部分层,得到任意深度的子网络,并且性能下降较小。论文摘要明确指出,LayerDrop 是一种 structured dropout,既有正则化作用,又能让模型在推理阶段高效剪枝;一个大模型可以抽取出不同深度的子网络,而且不需要额外 fine-tuning。(arXiv)
二、论文要解决的问题
Transformer 模型通常层数多、参数大、推理成本高。机器翻译、语言建模、摘要、问答、BERT/RoBERTa 这类模型都可能包含上亿参数,每次推理都要完整执行所有层。论文指出,Transformer 每层都会带来大量参数访问和计算,因此训练和推理阶段都存在明显的内存与延迟压力。
传统压缩方法通常有两个问题。
第一,如果要得到不同大小的模型,通常需要分别训练或微调。例如想要 12 层、8 层、6 层、3 层模型,往往要分别训练或蒸馏多个模型。
第二,普通深层模型直接删层通常效果很差。因为模型训练时从未见过缺少某些层的情况,推理时突然删层会破坏表示流。
所以这篇论文要解决的问题是:如何训练一个深层 Transformer,使它天然具备“可删层”的鲁棒性?
换句话说,它想让一个模型同时具备两种能力:完整深度时性能强。删掉部分层后仍然能正常工作。
三、核心思想
LayerDrop 的核心思想很简单:
训练时随机丢弃整个 Transformer layer;推理时根据目标深度直接删除部分 layers。
普通 dropout 是随机丢神经元或激活值。LayerDrop 不丢单个神经元,而是丢一个完整的结构单元,也就是 Transformer 的整层。
训练时,每一层以一定概率被跳过。因为 Transformer 有 residual connection,所以跳过一层后,信息仍然可以通过残差路径继续向后传播。
这样训练出来的模型,会经常遇到各种“缺层子网络”。久而久之,它就会学会在不同深度下工作。
论文中把这种做法称为structured dropout,因为它不是随机删除零散权重,而是按结构化单位删除一组权重;作者也明确说明这种 structured dropout 可以作用于 heads、FFN matrices 或 layers,但最终主要聚焦在 layer 级别,因为删层能直接带来深度减少和推理加速。
这里最关键的地方是:
LayerDrop 不是训练后才想办法剪枝,而是在训练阶段就让模型适应剪枝。
四、为什么重点剪 Layer,而不是剪 Head?
论文也讨论了不同结构化 dropout 单元,包括 attention head、FFN 子层、Transformer layer 等。
作者发现,只 drop attention heads 效果不如 drop layer 或 drop sub-layer,而且删 head 不一定带来明显运行时间优势,因为 attention heads 通常是并行计算的。相比之下,删除完整 Transformer layer 可以直接减少深度,降低顺序计算链路,因此更适合做推理加速。
这点很重要。
Head pruning 属于结构化剪枝,但它主要减少注意力内部的并行分支;LayerDrop 关注的是depth pruning,也就是减少 Transformer 的层数。
因此,这篇论文真正做的是:
Transformer layer-level structured pruning。
不是 attention head pruning,也不是 FFN neuron pruning。
五、训练阶段:LayerDrop 怎么做?
训练阶段,LayerDrop 对每个 Transformer layer 进行随机保留或随机丢弃。
如果某一层被保留,就正常执行 self-attention、FFN、residual、LayerNorm 等操作。
如果某一层被丢弃,就直接跳过该层,让输入通过残差路径继续向后传递。
这样,每个 mini-batch 实际看到的网络深度都可能不同。
例如一个 12 层 encoder,如果 LayerDrop rate 为 0.2,那么训练时平均有约 80% 的层被激活,但具体哪些层被激活是随机的。论文实验中多数任务使用LayerDrop rate = 0.2;作者也建议,如果目标是非常小的推理模型,可以使用更大的 LayerDrop rate,比如 0.5。
这带来两个效果。
第一,正则化效果。模型不能过度依赖某一层,因为该层训练时可能被随机丢掉。
第二,剪枝鲁棒性。模型在训练时已经见过很多浅层子网络,因此推理时删层不会突然破坏模型。
六、推理阶段:如何选择保留哪些层?
训练好带 LayerDrop 的模型后,推理阶段要从深层模型中选出一个浅层子网络。
论文讨论了三种策略。
6.1 Every Other
最简单的方法是每隔一层保留一层,也就是均匀地从整个网络中抽层。
例如 12 层模型想剪到 6 层,可以保留第 1、3、5、7、9、11 层,或者类似的均匀间隔策略。
论文发现,这个非常简单的策略效果 surprisingly well,甚至在很多任务上很难被复杂策略明显超过。
它的直觉是:
均匀保留不同深度位置的层,可以让浅层、中层、深层信息都保留一部分。
6.2 Search on Valid
第二种方法是在验证集上搜索不同层组合,找出效果最好的子网络。
这种方法更精细,但计算成本较高,而且可能过拟合验证集。论文也认为,它相比 Every Other 只能带来很小提升。
6.3 Data Driven Pruning
第三种方法是学习每层的 drop rate,然后根据 learned scores 选择保留哪些层。
但作者同样发现,这种更复杂的方法只带来 marginal gains。实际中,简单的 Every Other 已经很强。
所以这篇论文一个很实用的结论是:
训练时用 LayerDrop,推理时直接均匀删层,往往就能得到很好的浅层子网络。
七、实验任务与数据集
论文覆盖了很多 NLP 任务,而不是只在一个数据集上验证。
| 任务 | 数据集 | 模型 / 设置 | 指标 |
|---|---|---|---|
| 机器翻译 | WMT English-German | Transformer Big;WMT16 训练,newstest2013 验证,newstest2014 测试 | BLEU |
| 语言建模 | WikiText-103 | 16 层 / 40 层 Transformer with Adaptive Inputs | Perplexity |
| 摘要 | CNN-DailyMail | Transformer base | ROUGE |
| 长文本问答 | ELI5 | Transformer Big multitask | ROUGE |
| 语言理解 | MNLI、MRPC、QNLI、SST-2 | RoBERTa / RoBERTa + LayerDrop | Accuracy |
论文在实验设置中明确列出了这些任务:WMT14 En-De 机器翻译、WikiText-103 语言建模、CNN-DailyMail 摘要、ELI5 长答案问答,以及多个自然语言理解任务。
八、实验结果解读
8.1 机器翻译:LayerDrop 稳定深层 Transformer,并提升 BLEU
在 WMT En-De 上,普通 Transformer Big 结果为 29.3 BLEU,DynamicConv 为 29.7 BLEU,而 12 层 encoder + 6 层 decoder 的 Transformer + LayerDrop 达到30.2 BLEU。论文还指出,普通 Transformer 在 12 encoder layers 设置下会发散,而 LayerDrop 可以稳定训练更深的模型。
这个结果说明:
LayerDrop 不只是为了剪枝,它本身也是一种有效正则化手段。
更深模型原本难训练,LayerDrop 通过随机跳层降低过拟合和训练不稳定性,使模型能够从更大深度中获益。
8.2 语言建模:WikiText-103 上降低 PPL
在 WikiText-103 上,Adaptive Inputs baseline 的 test PPL 是 18.7,加入 LayerDrop 后 16 层模型达到18.3;进一步训练 40 层 Transformer + LayerDrop,PPL 降到17.7。
论文解释说,WikiText-103 虽然很大,但对于非常深的 Transformer 仍然容易出现过拟合和训练不稳定。LayerDrop 随机减少每次 forward 的活跃层数,能减轻内存压力并增强稳定性。
这个结果强调:
LayerDrop 可以帮助训练更深的 Transformer。
8.3 摘要与长答案问答:ROUGE 有提升
在 CNN-DailyMail 摘要上,Transformer baseline 的 ROUGE-1 / ROUGE-2 / ROUGE-L 是 40.1 / 17.6 / 36.8;加入 LayerDrop 后,6 encoder + 8 decoder 设置达到41.1 / 18.1 / 37.5。在 ELI5 长文本问答上,Transformer Multitask baseline 为 28.9 / 5.4 / 23.1,加入 LayerDrop 后提升到29.4 / 5.5 / 23.4。
这说明:
LayerDrop 的正则化效果不仅适用于翻译和语言建模,也适用于生成式摘要和长答案生成。
8.4 RoBERTa / BERT-like 模型:剪到 6 层、3 层仍有竞争力
论文在 RoBERTa 上也做了实验。RoBERTa Large + LayerDrop 在 MNLI、MRPC、QNLI、SST-2 上与普通 RoBERTa Large 相比表现相当或略有提升。例如 Books + Wiki 数据下,RoBERTa Large 在 MNLI-m / MRPC / QNLI / SST-2 上为 89.0 / 90.2 / 93.9 / 95.3,加入 LayerDrop 后为89.2 / 90.2 / 94.2 / 95.4。
更重要的是,论文把 RoBERTa + LayerDrop 剪到 6 层和 3 层,与从头训练的小模型、DistilBERT 等进行比较。6 层 RoBERTa + LayerDrop 在 MNLI 和 SST-2 上分别达到 82.9 和 92.5;使用更多预训练数据后,6 层模型达到 84.1 和 93.2。3 层 RoBERTa + LayerDrop + more data 在 MNLI 和 SST-2 上达到 82.2 和 92.0。
这个结果说明:
LayerDrop 训练出的深模型,可以直接抽取出浅层 BERT-like 模型,而且效果优于不少从头训练的小模型。
8.5 剪枝实验:LayerDrop 让删层更稳定
论文专门比较了三类模型:
普通 Transformer 训练后直接删层。
每个目标深度单独从头训练小模型。
先训练一个 LayerDrop 深模型,再按目标深度删层。
结果显示,LayerDrop 模型在不同剪枝比例下都明显优于“普通模型直接删层”,并且通常优于“从头训练同等深度的小模型”。论文强调,LayerDrop 模型只训练一次,然后可以抽取不同深度子网络,不需要为每个深度重新训练。
这是这篇论文最核心的实验结论:
LayerDrop 让一个深层模型变成一个可按需裁剪深度的模型族。
九、LayerDrop 与普通 Dropout、Stochastic Depth、模型蒸馏的区别
9.1 与普通 Dropout 的区别
普通 dropout 丢的是神经元或激活值,主要用于正则化。
LayerDrop 丢的是完整 Transformer layer,除了正则化,还能让模型在推理时直接删层。
所以:
普通 dropout 主要改善训练。
LayerDrop 同时服务于训练正则化和推理剪枝。
9.2 与 Stochastic Depth 的区别
Stochastic Depth 最早用于 ResNet,训练时随机跳过 residual blocks,主要是为了训练很深的 CNN。
LayerDrop 的思想与其相似,但目标不同。论文明确说,之前的 Stochastic Depth 主要关注加速和稳定训练,而这篇论文重点关注 Transformer 推理阶段的结构化剪枝。
9.3 与知识蒸馏的区别
DistilBERT 这类方法需要 teacher-student 训练过程。
LayerDrop 不需要额外 teacher,也不需要针对每个目标深度单独蒸馏。它直接从一个训练好的大模型中抽取浅层子模型。
所以:
蒸馏是“大模型教小模型”。
LayerDrop 是“大模型训练时就包含大量浅层子模型”。
十、方法优点
10.1 一个模型支持多个深度
LayerDrop 最大优势是:
只训练一个深层模型,就能在推理时抽取不同深度的子网络。
这对部署很有用。不同设备、不同延迟预算下,可以选择不同层数,而不需要保存和训练多个模型。
10.2 不需要额外 fine-tuning
论文多次强调,生成任务上的 pruned networks 不需要额外 fine-tuning。附录也显示,对语言模型剪到 8 层后再 fine-tune 只带来很小提升。
这说明:
LayerDrop 的训练过程已经让子网络具备较强鲁棒性。
10.3 实现简单
LayerDrop 的实现非常简单,只需要在训练时对每一层加随机保留 / 跳过机制。论文也在摘要和结论中强调,LayerDrop 像 dropout 一样容易实现。(arXiv)
10.4 能稳定训练更深模型
论文在 WMT、WikiText-103、RoBERTa 等任务中都展示了 LayerDrop 的正则化效果。它可以减少每次 forward 中活跃层数,降低内存使用,并提高深层模型训练稳定性。
10.5 属于真正结构化剪枝
LayerDrop 推理时删除的是完整 Transformer layer。
这会直接减少顺序深度、参数访问和计算路径,因此比只 mask 少量权重更有部署意义。
十一、方法局限
11.1 剪枝粒度较粗
LayerDrop 删除的是整层 Transformer。这种粒度非常粗。
如果某一层内部只有部分 attention heads 或 FFN neurons 冗余,LayerDrop 无法精细处理。它适合降低深度,但不适合做细粒度结构压缩。
11.2 Every Other 简单有效,但不一定最优
论文发现 Every Other 策略很强,但它本质上仍然是启发式方法。
对于某些任务或模型,最优保留层组合可能不是均匀间隔。虽然 Search on Valid 和 Data Driven Pruning 可以略微改进,但收益有限且成本更高。
11.3 大幅剪枝仍会损失性能
LayerDrop 能让模型更鲁棒,但不是说删多少层都无损。
当剪掉 50%、75% 层时,性能仍然会下降,只是下降幅度比普通删层或从头训练更可控。
11.4 需要在训练时提前使用 LayerDrop
普通已经训练好的 Transformer,如果训练时没有 LayerDrop,直接删层效果通常很差。
所以 LayerDrop 更像是一种training-time pruning-aware regularization,而不是对任意已有模型都能直接生效的后处理剪枝方法。
11.5 主要适合残差堆叠式 Transformer
LayerDrop 依赖 Transformer 层之间的残差结构。如果模型结构不是标准残差堆叠,直接跳过整层可能不稳定。
对于现代 LLM、ViT、MoE 或多模态模型,LayerDrop 思想可以迁移,但具体跳哪些层、如何保持表示稳定,需要重新设计。
十二、整体评价
这篇论文的核心价值在于,它把“删层”从训练后被动剪枝,变成训练时主动适配。
普通深层 Transformer 直接删层通常会损坏性能,因为模型从未学过缺层推理。LayerDrop 在训练阶段随机丢掉完整层,相当于让模型提前适应各种深度子网络。这样,推理时就可以根据速度、内存、延迟需求直接抽取浅层模型。
它的贡献可以概括为三点:
第一,提出 LayerDrop,用 structured dropout 训练可删层 Transformer。
第二,证明 LayerDrop 既能正则化深层 Transformer,又能稳定训练更深模型。
第三,证明一个大模型可以按需抽取不同深度的子网络,不需要为每个深度重新训练或蒸馏。
这篇论文和 head pruning 的思路不同。Head pruning 问的是:哪些 attention heads 可以删?LayerDrop 问的是:一个 Transformer 能不能在训练时就学会缺少若干层后仍然工作?
所以它的重点不是评估某一层的重要性,而是构造一种训练机制,让整个模型天然适合做depth pruning。
十三、一句话总结
《Reducing Transformer Depth on Demand with Structured Dropout》提出 LayerDrop,在训练时随机跳过完整 Transformer layers,使模型对缺层结构具有鲁棒性;推理时可以直接按需求删除部分层,得到不同深度的子网络,而不需要重新训练或额外微调。它的核心贡献是把 Transformer 的深度剪枝前移到训练阶段,使一个深层模型能够按需裁剪成多个浅层模型,并在机器翻译、语言建模、摘要、问答和 RoBERTa 下游任务中保持较强性能。