小语言模型 · 高效 AI · 语言模型

BERT、DistilBERT、MobileBERT 压缩路线对比

DistilBERT 砍半深度保住约 97% 的 GLUE;MobileBERT 压到四分之一大、提速 5.5 倍、GLUE 只掉 0.6 分。三篇论文,三种压缩思路。

BERT、DistilBERT、MobileBERT 压缩路线对比

三篇论文在回答同一个问题

BERT 让一个预训练的双向编码器成为所有理解类任务的默认起点,但也留下一个悬而未决的问题:这个同时在 11 个任务上刷榜的模型,对很多想跑 NLP 的场景来说太重了。之后两篇论文,DistilBERT 和 MobileBERT,从相反的方向动手。DistilBERT 砍深度:层数减半、宽度不变、在预训练阶段一次性蒸馏。MobileBERT 砍宽度:带瓶颈结构的瘦长模型,从一个为它专门造出来的大教师里挤出来。把三篇放在一起读,BERT 压缩的完整菜单(输出层蒸馏、去深度、瓶颈压宽度、教师模型工程)就齐了。

关键数字

指标BERTDistilBERTMobileBERT口径
参数量110M(BERT-base)66M,少 40%,约 207MB比 BERT_BASE 小 4.3 倍前两篇给绝对值,MobileBERT 给相对比例
结构改动12 层,完整隐藏维度6 层,隐藏维度不变BERT_LARGE 的瘦版,带瓶颈结构一个砍深度,一个砍宽度
推理速度基准CPU 上约快 60%,iPhone 上约快 71%比 BERT_BASE 快 5.5 倍,Pixel 4 延迟 62 毫秒基准各不相同
GLUEBERT-large 80.5(比之前最好高 7.7)平均保留 BERT-base GLUE 的约 97%(9 个任务平均)77.7,比同设置的 BERT_BASE 低 0.6三套设置,别当同一张榜
SQuAD v1.1测试集 F1 93.2(BERT-large)非主打指标验证集 F1 90.0,比 BERT_BASE 高 1.5测试集对验证集,large 对 base
SQuAD v2.0测试集 F1 83.1(BERT-large)非主打指标验证集 F1 79.2,比 BERT_BASE 高 2.1测试集对验证集,large 对 base
训练配方掩码语言模型(掩 15%)+ 下一句预测,BooksCorpus 加英文维基三重损失:软标签蒸馏 + MLM + 余弦嵌入对齐,同语料,去掉下一句预测从专门设计的倒置瓶颈 BERT_LARGE 教师(IB-BERT)蒸馏,任务无关三个都预训练一次,再逐任务微调

这张表的价值有一半在于它没给什么。GLUE 那一列混着三种口径:BERT 的 80.5 是 BERT-large 在原始 GLUE 榜上的成绩;DistilBERT 的 97% 是相对 BERT-base 的保留率,不是绝对分;MobileBERT 的 77.7 是对照它自己复现的 BERT_BASE 臂测出来的绝对分,低 0.6。能站住的跨模型结论很窄:DistilBERT 只丢 BERT-base 约 3% 的 GLUE,MobileBERT 对同尺寸教师家族只丢 0.6 个绝对分,两者精度落点相近,体型差得远。SQuAD 行更要小心:BERT 的 93.2 和 83.1 是 BERT-large 的测试集 F1,MobileBERT 的 90.0 和 79.2 是比自己小 4.3 倍的模型的验证集 F1。同一任务、不同数据划分、不同教师尺寸,只能读出”压缩没有牺牲 SQuAD 精度”,读不出排名。

每种压缩到底在做什么

BERT 本身是无压缩的参照:12 层双向 Transformer 编码器,用掩码语言模型和下一句预测在 BooksCorpus 加英文维基上预训练。它的贡献是配方而不是结构(无标注文本预训练一次,每个任务只加一个输出层微调),2018 年的成绩(GLUE 80.5、多 7.7 绝对分;MultiNLI 86.7;SQuAD v1.1 测试集 93.2)是两个压缩模型各自的起点。

DistilBERT 砍深度。学生模型 6 层,用训练好的教师每隔一层做初始化,隐藏维度和注意力设计原样保留,再去掉 token-type 嵌入和池化层,彻底弃用下一句预测。真正的功夫在训练:三重损失同时做三件事,分别是带温度的软标签蒸馏、真实文本上的标准 MLM、对齐师生隐藏状态方向的余弦损失。软标签重要,因为它带着教师对”哪些错误答案更接近正确”的判断,6 层模型全靠这个信号贴住 BERT。结果是 66M 参数,CPU 推理约快 60%、设备上约快 71%,9 个 GLUE 任务平均保住 BERT-base 约 97% 的分数。关键是它在预训练阶段只蒸馏一次:一个通用检查点,像 BERT 一样逐任务微调,不用每个任务重做蒸馏。

MobileBERT 砍宽度,而且配了一个为它量身定做的教师。学生是 BERT_LARGE 的瘦版,靠瓶颈结构在自注意力和前馈网络之间做精细配比,既压窄又不牺牲深度。普通 BERT_LARGE 与瘦学生尺寸不匹配,所以作者先训练一个中间教师(倒置瓶颈版 BERT_LARGE,即 IB-BERT),再从这个教师向 MobileBERT 传知识。收益:比 BERT_BASE 小 4.3 倍、快 5.5 倍,Pixel 4 实测延迟 62 毫秒,GLUE 77.7 只比同设置的 BERT_BASE 低 0.6,SQuAD v1.1 和 v2.0 验证集 F1 分别是 90.0 和 79.2,反比那条 BERT_BASE 臂高 1.5 和 2.1。和 DistilBERT 一样任务无关:一个压缩检查点,到处微调。

精度图景里诚实的那部分

“BERT 的 97%“和”比 BERT_BASE 低 0.6 分”听起来是一类话,量的是两件事。DistilBERT 是相对值,在 9 个任务上取平均,摊平了逐任务的方差,越偏推理的任务掉得越多。MobileBERT 是绝对差值,对照自己复现的 BERT_BASE,口径干净,但只说明那一套设置。两者都没和 RoBERTa 这类更强的教师比过,所以”几乎不丢 BERT 的本事”这句话的上限就是 BERT 自己。两篇论文真正确立的是:编码器精度对激进压缩的容忍度远超 2018 年的直觉,深度砍半或宽度压到四分之一,GLUE 代价都在一分上下,在 SQuAD 上压缩后的模型甚至可以反超同尺寸基线。

怎么选

  • **精度是硬约束、延迟无所谓:**留在全尺寸编码器。BERT 本身,或者实践中它的现代后裔,因为检索、排序、抽取这类质量关键场景仍需要 GLUE 和 SQuAD 的余量。
  • **想在服务器或桌面上最简单地提速:**DistilBERT。隐藏维度不变、用法不变、微调流程不变,体型减 40%、CPU 提速约 60%,平均代价约 3% 的 GLUE。整个压缩文献把它当基线读,是有道理的。
  • **目标是手机或边缘设备:**MobileBERT。4.3 倍缩小、5.5 倍提速,GLUE 只掉 0.6 分,62 毫秒是 Pixel 4 上实测的,不是外推的。代价是管线更重(需要那个倒置瓶颈教师,而不只是学生本身),但这笔账只在训练时付一次。
  • **2026 年做新系统怎么选:**把三篇当成设计空间的参照点,而不是当前前沿。真正值得继承的是机制菜单(软标签蒸馏、去深度、瓶颈压宽度、教师工程),今天高效编码器和小语言模型的工作仍在同一张菜单上点菜。

局限与存疑

这个对比只在每一行内部诚实。没有一项研究把 BERT、DistilBERT、MobileBERT 放在同一套设置里训练,所以跨模型一两分的差异在设置噪声之内;表最后一列的存在,就是为了提醒别把 80.5 和 77.7 当排名读。三篇都只有英文,多语言压缩的结论一概没有。DistilBERT 的提速在推理侧(教师该付的 BERT 级训练成本一次也少不了),97% 是平均数,难任务可以掉得远低于此。MobileBERT 的成绩依赖专门训练的 IB-BERT 教师,复现这套配方比模型尺寸看起来要重。最深的一条提醒是时间:三篇都是经典,今天的主要价值在于它们是把编码器压缩讲透的最清楚案例。

常见问题

DistilBERT 和 MobileBERT 谁更小?

MobileBERT 小得多。DistilBERT 66M 参数,比 BERT-base 小 40%;MobileBERT 比 BERT_BASE 小 4.3 倍,大约只有 base 的四分之一,因为它用瓶颈结构砍宽度而不是层数减半。如果硬约束是体型或手机级延迟,选 MobileBERT;只需要适度提速、希望改动最小,DistilBERT 更简单。

DistilBERT 的精度和 BERT 一样吗?

接近,不相等。9 个 GLUE 任务平均保留 BERT-base 约 97% 的分数。这是平均数:偏推理的任务掉得更多,而且比较对象只有 BERT-base,不含更强的教师。对延迟不敏感、质量关键的活儿,全尺寸模型仍然更好;其他场景,平均 3% 的代价通常是划算的。

两个都是蒸馏出来的 BERT,MobileBERT 和 DistilBERT 差在哪?

压缩的轴和教师都不同。DistilBERT 砍深度:12 层变 6 层,宽度不变,用教师每隔一层初始化,以 BERT-base 为教师,三重损失是蒸馏、MLM、余弦对齐。MobileBERT 砍宽度:带瓶颈的 BERT_LARGE 瘦版,教师是专门设计的倒置瓶颈 BERT_LARGE(IB-BERT)。砍深度配方简单;砍宽度加教师工程,才换来 4.3 倍的缩小。

MobileBERT 的确切成绩是什么?

对照它自己的 BERT_BASE 臂:GLUE 77.7,低 0.6;SQuAD v1.1 验证集 F1 90.0(高 1.5)、SQuAD v2.0 验证集 F1 79.2(高 2.1)。模型比 BERT_BASE 小 4.3 倍、快 5.5 倍,Pixel 4 延迟 62 毫秒。BERT 自己的头条数字(GLUE 80.5、SQuAD v1.1 测试集 93.2)来自 BERT-large,数据划分也不同,所以只在行内比,别跨行比。

今天还值得用这些模型吗?

当参照点,绝对值得:这三篇连起来是现存的讲透编码器压缩的最佳案例。当生产默认选项,要先看过现代替代再定:同样的蒸馏和瓶颈思路如今已经活在更强的多语言、长上下文编码器里。DistilBERT 尤其仍然是最便宜的英文分类与排序部署选择之一。