核心要点

  • 做法:把输入词嵌入矩阵 E(V×d)与输出层投影矩阵(d×V)绑定为同一份权重(转置共享)

  • 省参:词表 V 很大时,embedding 与输出投影各占 V×d 参数,绑定后省掉一整块,常占模型相当比例

  • 正则与质量:共享迫使输入/输出对词的表示一致,起正则作用,多数语言模型上能降低困惑度

  • 语义一致:输入端「词→向量」与输出端「向量→词打分」用同一空间,更自然

标准回答

做法

语言模型有两处大矩阵:输入的词嵌入 E(形状 V×d,把 token 映射为向量)和输出 softmax 前的投影 W(形状 d×V,把隐状态映射为各词的 logits)。Weight Tying 让这两者共享同一份权重——令 W = Eᵀ,只维护一份参数。

为什么有效

一是省参数:词表 V 动辄数万到十万,两块各 V×d 的矩阵在中小模型里能占很大比例,绑定后直接省掉一块,降低显存过拟合风险。二是正则与一致性:输入端「词→向量」和输出端「向量→对该词打分」本质共享同一语义空间,绑定迫使二者一致,相当于结构性正则,在多数语言模型上能降低困惑度。

适用

Transformer 语言模型的常见配置(如 GPT 系列)。前提是输入/输出词表相同、嵌入维度与隐状态维度一致(否则需加投影)。

常见误区

⚠️ 常见踩坑

以为绑定只是省参数的小技巧——它同时是有效的正则手段,常能提升而非仅维持语言模型质量;但要求输入输出词表与维度匹配,机器翻译等输入输出词表不同的场景需谨慎处理。

追问

追问 1维度不匹配时怎么绑定?

若隐状态维度与嵌入维度不同,无法直接转置共享,可在输出前加一个 d_model→d_embed 的投影层,再与嵌入矩阵绑定(即「三向绑定」中常见做法)。机器翻译里源/目标词表不同,通常只在目标侧的解码器嵌入与输出层绑定,或使用共享子词词表后再做绑定。

追问 2权重绑定对训练有什么影响?

共享权重让同一矩阵同时接收来自嵌入查表和输出投影两条路径的梯度,梯度信号更密集,通常收敛更稳。需注意输出 logits 的尺度,常配合对嵌入做缩放(如乘 √d)以平衡两路用途;个别实现还会在绑定后单独保留一个输出 bias 提升灵活性。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。