一、论文基本信息
论文题目:Length-Adaptive Transformer: Train Once with Length Drop, Use Anytime with Search
作者:Gyuwan Kim、Kyunghyun Cho
发表会议:ACL-IJCNLP 2021 Long Papers
官方代码:clovaai/length-adaptive-transformer,官方仓库说明这是该论文的 PyTorch 实现。(GitHub)
这篇论文可以看作是PoWER-BERT 的进一步扩展。PoWER-BERT 的问题是:如果要适配不同推理预算,通常需要为不同预算训练不同模型。Length-Adaptive Transformer 的目标是:只训练一次模型,然后推理时根据不同计算预算搜索不同长度配置,不需要重新训练或微调。论文摘要也明确说,它通过LengthDrop训练一个可以适配多种推理场景的模型,再用多目标进化搜索寻找最优 length configuration。(ACL Anthology)
二、论文要解决的问题
PoWER-BERT 已经证明:BERT 推理时不一定每层都需要处理完整序列,逐层删除冗余 word-vectors 可以加速推理。
但是 PoWER-BERT 有两个明显限制。
第一,它需要为不同计算预算训练不同模型。
比如你想要 2× 加速、3× 加速、4× 加速,可能要分别训练不同的 retention configuration。这在真实部署中不方便,因为设备算力、延迟要求、batch size 都可能变化。
第二,PoWER-BERT 主要适合句级分类任务。
因为它会直接删除中间层 token 表示,最终只保留部分 token。如果任务需要每个 token 的最终表示,例如 SQuAD 这种 span-based question answering,直接删除 token 就会有问题。论文也指出,原始 PoWER-BERT 因为逐层消除 word-vectors,所以不适合需要完整 token-level hidden sequence 的任务。(ACL Anthology)
所以这篇论文要解决的问题是:
能不能训练一个模型,让它在推理时支持任意长度配置、任意计算预算,并且还能用于 token-level 任务?
三、核心思想
这篇论文的核心思想可以概括为:
训练时随机改变每层保留的 token 数量,让模型适应各种长度配置;推理时用进化搜索找到满足预算的最优长度配置。
它包含三个关键部分:
第一,LengthDrop。
训练时随机采样每层保留多少 word-vectors,让模型见过各种序列长度逐层缩短的情况。
第二,Drop-and-Restore。
中间层暂时丢掉一些 word-vectors 以减少计算,但到最后一层前把它们恢复回来,从而支持 SQuAD 这类 token-level 任务。
第三,Evolutionary Search。
训练完成后,不再重新训练模型,而是搜索一组每层保留 token 数量的配置,在给定 FLOPs 或延迟预算下尽可能提升精度。
一句话说:
PoWER-BERT 是“给定一个预算,训练一个删 token 模型”。
Length-Adaptive Transformer 是“训练一次,搜索出多个预算下可用的删 token 子模型”。
四、它剪的是什么?
它剪的不是参数,而是中间层的 token 表示长度。
也就是说,它不会删除:
attention head。
FFN neuron。
Transformer layer。
模型权重。
它删除的是:
某些 token 在中间层继续向后计算的资格。
更准确地说,它做的是sequence length pruning / token-level pruning / word-vector dropping。
例如原始 BERT 每一层都处理 128 个 token。Length-Adaptive Transformer 可以让前几层处理较多 token,后几层处理较少 token。这样后续 self-attention 和 FFN 的计算量都会下降。
所以它和你前面看的方法区别很明显:
Movement Pruning:剪权重。
Head Pruning:剪 attention heads。
LayerDrop / Poor Man’s BERT:剪层。
CoFi:剪 MHA / FFN / heads / dimensions。
PoWER-BERT 和 Length-Adaptive Transformer:剪中间层 token 表示。
五、LengthDrop:训练一次适配多种长度
LengthDrop 是这篇论文最核心的训练机制。
它的作用是:让模型在训练阶段随机经历不同的长度压缩路径。
假设输入长度是 128。训练时模型不会总是固定每层保留同样数量的 token,而是随机采样一个 length configuration,例如:
128 → 100 → 80 → 64 → 48 → 32
或者:
128 → 115 → 100 → 90 → 75 → 60
不同 mini-batch 可能对应不同的长度配置。论文中明确说,LengthDrop 在每次 SGD 更新前随机生成一个 length configuration,并把 Length-Adaptive Transformer 看成由一个 full model 和很多不同长度配置的 sub-models 组成。(ACL Anthology)
这样训练的结果是:
模型不会只适应一种 token 删除比例。
模型会对多种长度配置都比较鲁棒。
推理时可以直接抽取不同长度配置,不需要重新 fine-tuning。
这和 LayerDrop 的思想很像,只不过 LayerDrop 随机丢的是Transformer layer,LengthDrop 随机缩短的是sequence length。
六、为什么还要加入 LayerDrop、Sandwich Rule 和 Inplace Distillation?
论文发现,单纯用 LengthDrop 训练并不稳定,所以借鉴了可伸缩网络训练中的几个技巧。
6.1 LayerDrop
由于 word-vector 可能在中间层被 drop,然后最后又被 restore,这意味着某些 token 会“跳过”若干层。为了让模型适应这种跳层行为,作者加入了 LayerDrop,让模型训练时也随机跳过 layer。论文说明,LayerDrop 可以鼓励每个 word-vector 对跳过任意数量层更加鲁棒。(ACL Anthology)
6.2 Sandwich Rule
每次训练不只训练一个随机子模型,而是同时训练:
完整模型。
最小子模型。
若干随机长度子模型。
这和 US-Net 里的 Sandwich Rule 类似。它的意义是:保证最大模型和最小模型都被充分训练,同时随机子模型覆盖中间预算。
6.3 Inplace Distillation
完整模型作为 teacher,小长度子模型作为 student。小子模型不只是学真实标签,还要模仿完整模型预测。论文明确说,随机采样的 sub-models 和 smallest sub-model 会通过 inplace distillation 学习 full model 的预测。(ACL Anthology)
所以 Length-Adaptive Transformer 的训练不是简单 dropout,而是:
LengthDrop + LayerDrop + Sandwich Rule + Inplace Distillation。
这几个组合保证了不同长度子模型都能工作。
七、Drop-and-Restore:为什么它能支持 SQuAD?
PoWER-BERT 的原始问题是:被删掉的 token 表示就没了。
对于句子分类,这没问题,因为最终只需要 [CLS]。
但对于 SQuAD,模型需要判断每个 token 是否是答案的 start / end。如果中间层把某些 token 直接删掉,最后就没法给它们预测答案边界。
Length-Adaptive Transformer 提出Drop-and-Restore:
中间层把低重要性 word-vectors 暂时放到一边,不参与后续 Transformer 计算。
到最后 hidden layer 时,再把这些被放到一边的 word-vectors 恢复回来。
恢复后的完整序列再送入任务层,比如 SQuAD 的 start/end classifier。
论文明确说,Drop-and-Restore 不是永久删除 word-vectors,而是在中间层把它们 set aside,到最后 hidden layer 再恢复成完整 hidden sequence。(ACL Anthology)
这个设计很关键,因为它让 token pruning 从句级分类任务扩展到了token-level 任务。
也就是说:
PoWER-BERT:删掉 token 后不再回来。
Length-Adaptive Transformer:中间层暂时不算它,最后需要时再恢复。
八、Evolutionary Search:为什么需要搜索?
训练好 Length-Adaptive Transformer 后,还有一个问题:
给定一个计算预算,每层到底应该保留多少 token?
比如目标是 FLOPs 降到 40%,可能有很多配置:
前面多删、后面少删。
前面少删、后面多删。
均匀删。
某几层重点删。
这些配置的精度和计算量不同,不能简单靠人工设定。
所以论文使用multi-objective evolutionary search。搜索目标是同时考虑:
精度最大化。
计算量最小化。
最终得到一条 Pareto frontier,也就是不同计算预算下的最优 accuracy-efficiency trade-off。论文摘要和方法部分都强调,进化搜索用于寻找在任意计算预算下最大化准确率、最小化效率指标的 length configuration。(ACL Anthology)
搜索过程大致是:
先生成若干 length configurations。
在验证集上评估精度和 FLOPs。
保留 Pareto 较优配置。
通过 mutation 和 crossover 生成新配置。
迭代搜索更好的长度配置。
论文实验中使用最多 30 次搜索迭代,每轮包含 mutated configurations 和 crossover configurations。(ACL Anthology)
九、实验设置
论文主要在三个任务上验证:
| 任务 | 类型 | 指标 |
|---|---|---|
| SQuAD 1.1 | span-based question answering | F1 |
| MNLI-m | 自然语言推理 | Accuracy |
| SST-2 | 情感分类 | Accuracy |
模型包括:
BERTBase
DistilBERT
论文使用 SQuAD 1.1 作为 token-level 任务,MNLI-m 和 SST-2 作为 sequence-level classification 任务。它还说明,SQuAD 1.1 的最大序列长度是 384,MNLI-m 和 SST-2 的最大序列长度是 128。(ACL Anthology)
效率指标主要使用FLOPs。论文也额外分析了 FLOPs 与 GPU / CPU wall-clock latency 的关系,发现对于它们的长度配置变化,FLOPs 和真实延迟有较强相关性;尤其在 GPU batch size ≥ 16 时,以及 CPU 上基本都呈近似线性相关。(ACL Anthology)
十、主要实验结果
10.1 BERTBase 可以在不降精度的情况下大幅减少 FLOPs
论文 Table 1 给出了代表性结果。
| 模型 | 方法 | SQuAD F1 / FLOPs | MNLI-m Acc / FLOPs | SST-2 Acc / FLOPs |
|---|---|---|---|---|
| BERTBase | Standard | 88.5 / 1.00× | 84.4 / 1.00× | 92.8 / 1.00× |
| BERTBase | Length-Adaptive† | 88.7 / 0.45× | 84.4 / 0.35× | 92.8 / 0.35× |
| BERTBase | Length-Adaptive? | 89.6 / 0.89× | 85.0 / 0.58× | 93.1 / 0.36× |
这里的Length-Adaptive†表示在精度不低于 standard model 的前提下,尽量减少 FLOPs。可以看到,BERTBase 在 SQuAD 上 FLOPs 降到 0.45×,MNLI-m 和 SST-2 上降到 0.35×,基本不损失精度。(ACL Anthology)
这说明:
Length-Adaptive Transformer 能在保持原始精度的同时,将计算量减少一半以上。
10.2 它有时还能比原模型更准
论文中Length-Adaptive?表示同时追求更高精度和更低 FLOPs 的配置。结果中,BERTBase 在 SQuAD 上从 88.5 提升到 89.6,同时 FLOPs 仍然只有 0.89×;MNLI-m 从 84.4 提升到 85.0,FLOPs 为 0.58×;SST-2 从 92.8 提升到 93.1,FLOPs 为 0.36×。(ACL Anthology)
这说明 token dropping 不只是加速,有时还有一定正则化效果。
可以理解为:
删掉部分冗余 token 表示,可能减少噪声传播。
LengthDrop 训练本身也有正则化作用。
10.3 DistilBERT 上也有效
Length-Adaptive Transformer 不只适用于 BERTBase,也适用于 DistilBERT。
论文中 DistilBERT standard 在 SQuAD / MNLI-m / SST-2 上分别是 85.8、80.9、90.6;Length-Adaptive† 在不降精度的前提下,FLOPs 分别降到 0.59×、0.54×、0.54×;Length-Adaptive? 还能把精度提升到 86.3、81.5、92.0,同时 FLOPs 仍然低于标准 DistilBERT。(ACL Anthology)
这说明:
Length-Adaptive Transformer 可以叠加到已经压缩过的模型上。
这和 PoWER-BERT 能叠加 ALBERT 的思想类似:只要模型中间 token 表示存在冗余,就可以进一步做长度自适应。
10.4 相比 PoWER-BERT,单个模型就能覆盖多个预算
论文和 PoWER-BERT 做了对比。PoWER-BERT 在 MNLI-m 和 SST-2 上损失 1% accuracy 时分别获得 2.6× 和 2.4× speedup;Length-Adaptive Transformer 在 MNLI-m 和 SST-2 上不损失 accuracy,就能在 FLOPs 上获得约 2.9× speedup。论文也指出,考虑到 FLOPs 与延迟的关系,这在同类 batch size 的 GPU 设置下会接近真实执行时间上的 2.9× 加速。(ACL Anthology)
更重要的是:
PoWER-BERT 不是 anytime model。
Length-Adaptive Transformer 是一个训练好的模型,通过搜索可以适配多个预算。
所以它的实际部署灵活性更强。
十一、它和 PoWER-BERT 的区别
两者关系非常近,但差别也很明显。
PoWER-BERT:
针对一个目标预算训练一个 retention configuration。
主要用于句级分类。
删除的 token 不再恢复。
如果换预算,通常需要重新训练。
Length-Adaptive Transformer:
用 LengthDrop 训练一次。
推理时通过搜索支持多个预算。
用 Drop-and-Restore 支持 token-level 任务。
同一个模型可以产生多个长度子模型。
所以这篇论文真正解决的是 PoWER-BERT 的两个短板:
预算不灵活。
任务类型受限。
十二、它和 DynaBERT 的区别
DynaBERT 是动态宽度和动态深度模型。
它调整的是:
attention heads 数量。
FFN intermediate neurons。
Transformer layers。
Length-Adaptive Transformer 调整的是:
每一层保留的 token 数量。
两者压缩维度不同。
DynaBERT 是width/depth adaptive。
Length-Adaptive Transformer 是sequence-length adaptive。
论文也强调,sequence length、depth、attention head、hidden dimension 等不同自适应方向是可以组合的;Length-Adaptive Transformer 不一定要取代其他方法,而可以与它们互补。(ACL Anthology)
这点很重要,因为 Transformer 的计算冗余不是单一维度:
参数有冗余。
heads 有冗余。
layers 有冗余。
tokens 也有冗余。
Length-Adaptive Transformer 主要处理最后一种。
十三、它是不是剪枝?
从广义上说,是一种动态 token pruning。
但它不是传统模型参数剪枝。
它的特点是:
不减少模型权重数量。
不改变 Transformer 层数。
不改变 hidden size。
不删除 attention head。
只改变每层实际参与计算的 token 数量。
所以如果论文分类,建议写成:
Token-level dynamic pruning / sequence length adaptive inference。
而不是写成 weight pruning 或 head pruning。
它的部署收益来自:
序列变短后,self-attention 和 FFN 处理的 token 数减少。
尤其对长输入任务,比如 SQuAD,序列长度较长,因此收益更明显。
十四、方法优点
第一,一个模型支持多个计算预算。
训练一次后,可以用搜索得到不同 FLOPs / latency 目标下的 length configuration,不需要为每个预算重新训练。论文摘要明确强调这一点。(ACL Anthology)
第二,扩展了 PoWER-BERT 的任务范围。
Drop-and-Restore 让它可以用于 SQuAD 这类 token-level 任务,而不只是句级分类。(ACL Anthology)
第三,速度—精度折中更灵活。
通过 evolutionary search 可以得到 Pareto frontier,而不是只能使用固定比例长度缩减。
第四,可以和其他压缩方法叠加。
实验显示它能应用在 DistilBERT 上;理论上也可以和宽度剪枝、层剪枝、量化结合。
第五,真实延迟相关性较好。
论文额外验证了 FLOPs 和 wall-clock latency 的关系,说明它减少的 FLOPs 在实际 CPU/GPU 推理中能较好转化为速度收益。(ACL Anthology)
十五、方法局限
第一,它不减少模型文件大小。
参数仍然保留,因此模型存储占用不会像 weight pruning、distillation 那样明显下降。
第二,需要支持动态长度操作。
每层 token 数量变化,需要 gather、scatter、restore 等操作。不同推理框架对动态 shape 的支持不同,实际速度收益可能受工程实现影响。
第三,搜索阶段仍然有成本。
虽然不需要重新训练,但每个目标预算需要做 evolutionary search。论文也承认,它需要为每个目标预算进行单独搜索。(ACL Anthology)
第四,不是 per-instance 自适应。
它搜索出的是某个预算下固定的 length configuration,而不是每个输入样本动态决定保留多少 token。论文结论中也把 per-instance length configuration 作为未来方向。(ACL Anthology)
第五,主要实验集中在理解任务。
论文实验是 SQuAD 1.1、MNLI-m、SST-2。对于机器翻译、文本生成、长文本生成等 sequence generation 任务,论文明确说还没有研究,留作未来工作。(ACL Anthology)
十六、整体评价
Length-Adaptive Transformer 的核心价值在于,它把 PoWER-BERT 的 token elimination 从“单预算训练”推进到“训练一次,多预算使用”。
它解决的不是“某个模型能不能删 token”,而是更实际的问题:
不同设备、不同延迟要求、不同计算预算下,能不能用同一个模型?
通过 LengthDrop,模型在训练阶段适应各种长度配置;通过 evolutionary search,推理阶段可以根据预算自动找到合适配置;通过 Drop-and-Restore,它又能支持 SQuAD 这类需要 token-level 输出的任务。
这篇论文在 Transformer 高效推理中的位置很清楚:
PoWER-BERT 证明 token-level redundancy 可以用于加速。
Length-Adaptive Transformer 证明 token-level pruning 可以做成一次训练、多预算部署。
它和 DynaBERT、CoFi、LayerDrop 这类方法互补,因为它压缩的是 sequence length,而不是 depth、width 或参数。
十七、一句话总结
《Length-Adaptive Transformer: Train Once with Length Drop, Use Anytime with Search》提出一种长度自适应 Transformer:训练时用 LengthDrop 随机缩短各层序列长度,使模型适应多种 token 保留配置;推理时用多目标进化搜索找到满足预算的 length configuration;同时通过 Drop-and-Restore 把中间层丢弃的 token 在最后恢复,使方法可用于 SQuAD 这类 token-level 任务。它的核心贡献是让 PoWER-BERT 式 token pruning 从“一个预算训练一个模型”变成“训练一次,多个预算直接使用”。