一句话定义:权重绑定(Weight Tying,也叫 tied embeddings)是指模型里"把词变成向量"的那张表,和"把向量变回词"的那张表,用的是同一份参数。
原理拆开看
语言模型的基本动作是:读入一个词,预测下一个词。这两个动作各需要一张表:
- 输入嵌入矩阵 E,形状是 V×d。V 是词表大小,d 是向量维度。第 i 行就是第 i 个词的向量。
- 输出层矩阵 W,形状是 d×V。它把最后一层的隐藏向量 h 变成词表上每个词的分数,再经 softmax 得到概率。
两者的形状天然互为转置,所以可以让 W 直接等于 E 的转置。这就是权重绑定。
打个比方:这像一本双向词典。正着查"苹果"能查到它的含义坐标,反着查这个坐标能回到"苹果"。常规做法是编两本词典——一本汉英、一本英汉,各写各的。绑定相当于只用一本,正反两用:纸张省一半,而且绝不会出现两本对不上的情况。
为什么不只是省参数,还能训得更好
1. 参数量减半。嵌入层从 V×d 变成只有一份。词表 5 万、维度 768 时,省下约 3800 万个参数,在小模型里嵌入层占比很高,这笔省得很实在。
2. 梯度信号翻倍。一个词向量在"被读进来"和"被当成预测目标"两个时刻都会收到梯度,两路信息汇到同一个向量上。低频词本来见到的样本就少,这下能多拿一份监督,受益最明显。
3. 自带正则化。参数少了、约束强了,小数据上不容易过拟合。
4. 空间对齐。输入表示和输出表示落在同一个几何空间里,"意思相近的词向量更接近"这件事在两侧同时成立,语义结构更一致。
和相邻概念的区别
| 权重绑定 | 不绑定 | |
|---|---|---|
| 参数量 | V×d | 2×V×d |
| 输入/输出空间 | 共用一套 | 各自独立 |
| 数据较少时 | 通常更稳 | 容易过拟合 |
| 大词表场景 | 省显存 | 输出层容量更大 |
容易混淆的两个:跨层参数共享(比如让每一层 Transformer 用同一套权重)是层与层之间共享,权重绑定是首尾两端共享,不是一回事;低秩分解是压缩单张大矩阵,思路不同。它和迁移学习、微调也没什么关系。
对从业者的意义
调模型时先看一眼配置里有没有 tie 这个开关(很多框架里叫 tie_word_embeddings)。词表特别大——多语言、代码语料——绑定的显存收益很直接;模型小、数据少,它常常还能顺带涨点。但如果输入和输出压根不是同一套词表(比如输入是文本、输出是分类标签),绑定就没有意义,因为两边的行根本对不上号。
对普通人,这类思路其实就是工程里的常识:一个数据源两边引用,永远比维护两份副本更省事、更不容易出错。
具体模型的默认设置与显存开销,以官方文档为准。
