ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ALBERT 通过哪些技术降低参数量?它为何要引入参数共享和分解嵌入?

ALBERT 通过哪些技术降低参数量?它为何要引入参数共享和分解嵌入? ALBERT 降低参数量的技术及设计动机ALBERTALiteBERT由 Google Research 于 2019 年发布核心目标在保持甚至超越 BERT 性能的前提下大幅减少参数量。一、ALBERT 的三项参数削减技术技术一嵌入参数分解问题BERT 的嵌入参数量与隐藏层维度绑定造成浪费。BERT 的设计: 词表大小 V 30,522 嵌入维度 E 隐藏层维度 H 768 嵌入参数量 V × E 30,522 × 768 ≈ 23M 问题: H 通常很大(768/1024)但嵌入层只是查表 lookup 不需要这么大的维度 → 参数浪费ALBERT 的做法将嵌入层分解为两步。ALBERT 的设计: 词表大小 V 30,522 嵌入维度 E 128 ← 小维度先映射到低维 隐藏层维度 H 768 ← 再投影到高维 参数量 V × E E × H 30,522 × 128 128 × 768 3.9M 0.1M ≈ 4M 对比 BERT 的 23M → 降至 4M减少 83%结构对比: BERT: [token] → 查表(V×H) → 768维向量 → Transformer层 ↑ 23M参数 ALBERT: [token] → 查表(V×E) → 128维 → 线性投影(E×H) → 768维 → Transformer层 ↑ 3.9M参数 ↑ 0.1M参数核心思想词嵌入只需要编码词是什么低维就够语义建模的复杂度交给 Transformer 层高维。两者解耦后嵌入参数不再随 H 线性增长。技术二跨层参数共享问题BERT 的 12/24 层 Transformer 各有独立参数层数越多参数越大。BERT-base: 12层 × 每层参数 ≈ 7M 84M仅Transformer部分 BERT-large: 24层 × 每层参数 ≈ 16M 384MALBERT 的做法所有 Transformer 层共享同一组参数。BERT (无共享): Layer1: W1, b1 ← 独立参数 Layer2: W2, b2 ← 独立参数 ... Layer12: W12, b12 ← 独立参数 总参数 12 × 单层参数 ALBERT (全共享): Layer1: W, b ─┐ Layer2: W, b ─┤ ... ├─ 全部共享同一组 W, b Layer12: W, b ─┘ 总参数 1 × 单层参数共享范围ALBERT 默认共享全部参数注意力权重 FFN 权重 LayerNorm。论文也实验了只共享注意力权重等变体全共享效果最好。参数量对比模型层数参数量Transformer部分BERT-base (12层)1284MALBERT-base (12层全共享)127MBERT-large (24层)24316MALBERT-large (24层全共享)2413M技术三句间连贯性任务SOP替代 NSP这不是直接减参技术而是去除无效任务、提升参数效率。BERT 的 NSP 任务: 判断句子B是否是句子A的下一句 正例: A今天下雨 B带把伞 → IsNext 负例: A今天下雨 B股票涨了 → NotNext 问题: 模型只需判断主题是否相关就能做对太简单学不到有用信息ALBERT 的 SOP 任务: 判断句子对是否顺序正确 正例: A今天下雨 B带把伞 → 原序 负例: A带把伞 B今天下雨 → 逆序 优势: 主题完全相同必须理解句间逻辑关系才能做对SOP 不增加参数但让有限的参数学到更有用的表示间接提升了参数效率。二、参数量对比总览模型层数隐藏维度嵌入维度参数共享总参数量对比BERT-base12768768❌108M基准ALBERT-base12768128✅12M↓ 89%BERT-large2410241024❌334M基准ALBERT-large241024128✅18M↓ 95%ALBERT-xxlarge124096128✅235M参数少于BERT-large性能超越关键发现ALBERT-xxlarge 用 12 层但 4096 维隐藏层参数量 235M少于 BERT-large 的 334M性能却全面超越 BERT-large 和 RoBERTa-large。三、为何要引入参数分解动机嵌入维度与隐藏维度不应绑定词嵌入的作用: 把 token ID 映射为向量 → 本质是查表只需要区分这个词是什么 → 低维(如128)就足够编码词级别的信息 Transformer 隐藏层的作用: 建模上下文语义关系 → 需要高维空间表达复杂的语义交互 → 高维(如768/1024/4096)才够用 BERT 的问题: E H嵌入层被迫用高维 → V×H 参数巨大参数分解的本质解耦词表示和上下文建模的维度需求。不分解: V × H 30,522 × 768 23.4M 分解后: V × E E × H 30,522 × 128 128 × 768 4.0M 当 H 增大到 4096 (ALBERT-xxlarge): 不分解: 30,522 × 4096 125M ← 嵌入层就吃掉大量参数 分解后: 30,522 × 128 128 × 4096 4.4M ← 几乎不增长H 越大分解的收益越显著。这让 ALBERT 可以用极大的隐藏维度4096而不被嵌入参数拖累。四、为何要引入参数共享动机一减少冗余BERT 各层学到的表示高度相似存在大量冗余实验发现ALBERT 论文: 测量 BERT 各层输出的余弦相似度 → 相邻层相似度很高 Layer1 ↔ Layer2: 相似度 0.92 Layer2 ↔ Layer3: 相似度 0.90 ... → 各层在做类似的变换独立参数是浪费动机二深层网络难以训练不共享: 24层 → 316M参数 → 训练困难容易过拟合 共享后: 24层 → 13M参数 → 训练稳定可以堆更多层 ALBERT 实验: 24层共享 vs 48层共享 48层参数量与24层相同因为共享 但性能更好 → 免费加深网络动机三参数效率同样参数预算下: BERT: 108M → 12层 × 768维 ALBERT: 12M → 12层 × 768维省下的参数可以加大维度 ALBERT: 235M → 12层 × 4096维用更大的H提升表示能力 → 参数共享让把参数花在刀刃上成为可能五、参数共享的代价方面优势代价参数量大幅减少—训练速度更快收敛—推理速度—无提升仍需前向传播12/24次表示能力—可能降低所有层做相同变换层间多样性—丧失无法学到层次化特征关键权衡ALBERT 用更宽但更少独立层补偿层间多样性丧失——ALBERT-xxlarge 用 12 层 × 4096 维而非 24 层 × 1024 维以宽度换深度。六、性能对比模型参数量MNLISQuAD 2.0 (F1)SST-2BERT-base108M84.676.392.7BERT-large334M86.783.192.7RoBERTa-large355M90.288.994.8ALBERT-base12M81.679.190.3ALBERT-large18M86.584.993.3ALBERT-xxlarge235M90.490.296.0ALBERT-base12M≈ BERT-base108M的 1/9 参数性能略低但可比ALBERT-xxlarge235M BERT-large334M的参数性能全面超越总结ALBERT 降低参数量的三项技术: ① 嵌入参数分解 (V×H → V×E E×H) 动机: 词嵌入不需要高维解耦嵌入维度与隐藏维度 效果: 嵌入参数减少 83% ② 跨层参数共享 (12层共用1组参数) 动机: BERT各层表示高度相似独立参数是冗余 效果: Transformer参数减少至 1/N ③ SOP 替代 NSP (不增参提升参数效率) 动机: NSP 太简单浪费模型容量 效果: 让有限参数学到更有用的表示 设计哲学: 不是更小的模型做同样的事 而是把参数花在更重要的地方—— 省下嵌入和重复层的参数投入到更大的隐藏维度。
返回列表