跳转到内容

ELECTRA — 把猜词题改成判真假题,训练效率 4 倍

是什么

ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)是 Stanford × Google 在 2020 年 ICLR 提的一个改训练目标的方法。它没动 bert 的 Transformer encoder,只把 MLM(猜被遮的词)换成 RTD(判每个词是不是被换过)。

日常类比:

老办法是「完形填空」——出题人挖 15% 空,你只为这 15% 个位置写答案。新办法是「找茬」——出题人偷偷把句子里某些词换成相似但不对的词,你要给每个位置打勾或打叉。

同样一段文本,老办法只训了 15% 的位置,新办法训了 100%。同样的算力,学到的东西多 6 倍以上。

读懂这两段就读懂了 ELECTRA 的核心:让训练信号覆盖到每个 token,而不是只在被遮的位置上算 loss

为什么重要

不理解 ELECTRA,下面这些事都没法解释:

  • 为什么 2020 年开始小模型论文都拿 ELECTRA-small 当基线——14M 参数、单卡 4 天,效果接近 GPT-1
  • 为什么 bert / roberta-2019 时代「想训得好就要堆 GPU」的共识被打破——同等性能 ELECTRA 只要 RoBERTa 1/4 算力
  • 为什么后续 DeBERTa-v3 / NLU 类闭源模型都用 RTD 替代 MLM——它不是替换 bert,而是替换 BERT 的训练目标
  • 为什么 GAN 思路在文本预训练里走不通,但 ELECTRA「看似像 GAN」却走通了——里面有一个微妙的「不让梯度回传」的工程决定

引用数 5k+。这是少数几篇「不靠 scale、只换损失函数」就把 SOTA 推前一步的论文。

核心要点

ELECTRA 用 两个网络 联合训练:

  1. Generator G(小 MLM):还是干 BERT 的活——对随机 mask 的 15% 位置预测原词。但 G 故意做小(1/4~1/2 D 的尺寸),它的输出不是最终模型,只是用来「造假货」。

  2. Discriminator D(主模型):拿 G 输出的句子(有些位置已经被 G 的预测词替换掉),对每一个 token 做二分类——「这个词是原文吗?还是被换过?」。这个任务叫 Replaced Token Detection (RTD)

关键工程细节

  • 训完只用 D,G 直接扔掉——G 是「陪练」
  • G 和 D 共享 embedding 层(token + position),减参又互利
  • 总 loss = L_MLM(G) + λ · L_RTD(D),λ=50(D 的梯度被放大 50 倍才能盖过 G 的 MLM)
  • 梯度不在 G 和 D 之间回传:D 的 loss 不会反向影响 G。文本是离散的,采样不可微,硬通会要 REINFORCE 或 Gumbel-softmax,作者试了发现不稳定,索性砍掉

为什么 RTD 比 MLM 高效

  • MLM 只在 15% mask 位置上计 loss,剩下 85% 位置「白训」
  • RTD 在 100% 位置上计 loss,每个 token 都贡献训练信号
  • 这就是 4× 效率提升的来源——不是更聪明,是不浪费

实践案例

案例 1:RTD 在做什么

原句: 我 爱 吃 鱼
Mask: 我 爱 [M] 鱼
G 预测: 吃 → "看"(G 不准,给了个错的)
拼回: 我 爱 看 鱼 ← 拿这个去训 D
D 输出: 原 原 替 原 ← D 要判每个位置「真/假」

D 必须学会:「我爱看鱼」里「看」放在「爱」和「鱼」之间不太对劲(应该是吃 / 钓 / 养这一类)。这种细粒度的语义合理性判断就是 D 学到的能力。

注意 G 的预测有时候会蒙对——G 输出「吃」,那这个位置 D 看到的就是原词。这种情况 D 应该判「原」。也就是说 D 看到的「假货」其实只占 G 错预测的那部分,在实际训练里通常 ~85% 位置是原词、~15% 是被替换过的。

案例 2:和 BERT MLM 对比

维度BERT (MLM)ELECTRA (RTD)
训练任务预测 15% 被 mask 词二分类 100% 位置
每 step loss 算几个位置15%100%
模型结构1 个 encoderG(小) + D(主)
算力效率baseline~4×
训完用什么整个 encoder只用 D
下游用法一样(都是 encoder)一样

对下游使用者完全无感——拿来 fine-tune 跟 BERT 一模一样。差别全在预训练阶段。

案例 3:「这不就是 GAN 吗」的辩护

读者第一反应:G 造假、D 鉴假,这就是 GAN。论文专门有一节解释为什么不是

  • GAN 的 G 用 D 的 loss 反向更新(对抗训练)
  • ELECTRA 的 G 用 MLE(最大似然)训练,跟 BERT 的 MLM 一模一样,完全不看 D 的 loss
  • 真 GAN 在文本上要解决离散采样不可微的问题,ELECTRA 直接绕开

作者实验过「真对抗」版本(用 REINFORCE 让 G 接 D 的反馈),效果反而差。判别器的存在是为了让 D 拿到密集训练信号,不是为了对抗

案例 4:小模型时代的开山

ELECTRA 论文给了三档:

模型 参数 算力 GLUE 分
ELECTRA-Small 14M 1× V100, 4 天 79.9(GPT 是 78.8)
ELECTRA-Base 110M 16× V100, 4 天 85.1(BERT 是 82.2)
ELECTRA-Large 335M 16× V100, 24 天 89.4(RoBERTa 88.5)

Small 这一档第一次让单卡能训出可用预训练模型——这之前 BERT-base 训一遍要 16 TPU × 4 天。ELECTRA-Small 让大学实验室、小公司、个人开发者重新进入「能预训练」的圈子。

踩过的坑

  1. G 太大反而变差:直觉上 G 越强、造的假越像,D 学得越多。但实验里 G 的 size 是 D 的 1/4 时最优。G 太强,所有「假货」都变成「合理替换」,D 失去判别梯度(全判替换)。这跟 GAN 的「Discriminator 不能太强」是镜像版本的问题。

  2. λ=50 是经验值:D 的 loss 在数值上比 MLM 小一个数量级,不放大就训不出来。这个 λ 没有理论根据,作者试出来的。换数据集要重试。

  3. 共享 embedding 是性能关键:消融里去掉「embedding 共享」会掉 1.6 分。两个原因——参数省一半 + G 的 MLM 训练同时也在更新这些 embedding,相当于 D 免费蹭到 MLM 的语义信息。

  4. G/D 不能不同 vocabulary:写实现时容易踩——G 和 D 必须用同一份 tokenizer 同一份 vocab,否则 G 的输出 D 看不懂。HuggingFace 早期 ELECTRA 实现就掉过这个坑。

  5. 下游不一定全场景胜出:ELECTRA 在判别类任务(GLUE / SQuAD)涨得多,在生成相关任务上没优势——它本来就是 encoder-only 路线,强在「分类 / 抽取」。别把它当生成模型用

历史小故事(可跳过)

  • 2018-10bert 发布,MLM + 双向 encoder + 预训练范式
  • 2019-07roberta-2019 用更大数据 + 更久训练把 BERT 推到极限,「scale 派」声势浩大
  • 2019-12:ALBERT / DistilBERT 走「让 BERT 变小」路线,但都在 MLM 框架内
  • 2020-03ELECTRA 发布——不堆 scale、不缩参数,改训练任务就把效率提 4 倍
  • 2020-06:DeBERTa-v3(微软)把 ELECTRA 的 RTD + 自己的解耦注意力结合,刷 SuperGLUE
  • 2022+:decoder-only 大模型(LLaMA / GPT-3+)兴起,encoder 路线整体降温。但做检索 / 分类 embedding 的领域 ELECTRA 系仍在用
  • 2024+:ModernBERT 等新一代 encoder 论文重新审视训练目标,RTD 仍是候选之一

学到什么

  1. 训练信号密度比训练时间更值钱——同样的算力,把 loss 算在 100% 位置而非 15% 位置,效果差 4 倍。找哪里在浪费比「再加一倍机器」高效得多
  2. 看似像 GAN 不一定要做 GAN——ELECTRA 的 G 不接 D 的反馈,就避开了离散文本对抗训练的所有坑。判断器的存在是为了制造稠密信号,不是非要对抗
  3. 小模型论文比大模型论文更难做——堆 scale 谁都能堆,但 14M 参数赢 GPT-1 要在每个细节抠效率。资源受限是研究真正的过滤器
  4. 「换损失函数」是被低估的杠杆——架构改一点效果有限,但损失函数换一种思路(bert MLM → ELECTRA RTD → MAE 的图像版本 → SimCLR 的对比版本)能直接带来代际差异
  5. G/D 平衡感和 GAN 是同一个直觉——ELECTRA 不是 GAN,但「弱 G 强 D」「λ 平衡两边」这些工程感来自整个对抗学习社区。不同领域的工程直觉是可以迁移的
  6. 写消融要把『反直觉』写出来——「G 越大反而越差」「真对抗反而不如假对抗」这两个反直觉发现是论文最有价值的部分,比 SOTA 数字更让人记得住

延伸阅读

关联

  • bert — ELECTRA 严格在 BERT encoder 之上换损失函数,架构没动
  • roberta-2019 — 同期对手,「调训练配方」派,ELECTRA 是「换训练目标」派
  • mae — 把「遮一部分 + 重建」搬到图像,跟 ELECTRA 是同一类「任务设计」论文
  • xlnet-2019 — 另一种「改训练目标」的尝试(permutation LM),但工程复杂度比 ELECTRA 高
  • t5 — 用 text-to-text 统一所有任务,与 ELECTRA「换损失」是不同方向的统一思路

反向链接

  • bert —— BERT — 双向 Transformer 预训练
  • mae —— MAE — Masked Autoencoders
  • roberta-2019 —— RoBERTa — 把 BERT 重训一遍就能拿 SOTA
  • t5 —— T5 — Text-to-Text Transfer Transformer
  • xlnet-2019 —— XLNet — 把句子打乱顺序读,借此同时拿到 AR 和双向