Weight Tying¶
Weight Tying(权重共享)是一种优化深度学习模型参数的方法,常用于语言模型(如Transformer和RNN)中,特别是在词嵌入层(Embedding Layer)和输出层之间。
定义¶
在语言模型中,通常有以下两个关键层:
Embedding Layer:将输入的词汇索引映射为一个连续的、高维向量表示。
Output Layer:将模型的最终表示映射回词汇表的概率分布,用于预测下一个词。
这两层会有独立的权重矩阵:
Embedding Layer 权重矩阵(大小为 V × d):词汇表大小为 𝑉,嵌入维度为 𝑑。
Output Layer 权重矩阵(大小为 d × V):从隐藏层映射到词汇表。
备注
Weight Tying 的核心思想是:将 Embedding Layer 和 Output Layer 的权重矩阵设置为相同,即共享权重。
为什么使用 Weight Tying¶
减少模型参数:原本需要两个独立的矩阵(一个大小为 𝑉×𝑑,另一个为 𝑑×𝑉),而 Weight Tying 将它们合并成一个矩阵 𝑊(大小仍为 𝑉×𝑑),从而显著减少参数量,尤其在大词汇表的情况下。
提升模型表现:输入词向量和输出预测之间共享表示,使模型在学习过程中保持一致性。Embedding 表示的质量更高,因为它同时服务于输入编码和输出解码的任务。
更高效的计算:Weight Tying 减少了冗余的矩阵存储需求,使内存利用率更高。
实际运作方式¶
输入的嵌入矩阵是 \(𝑊_{𝑒𝑚𝑏𝑒𝑑}∈𝑅^{𝑉×𝑑}\)
输出层的权重矩阵为 \(𝑊_{𝑜𝑢𝑡𝑝𝑢𝑡}∈𝑅^{𝑑×𝑉}\)
使用 Weight Tying 后: \(𝑊_{𝑜𝑢𝑡𝑝𝑢𝑡}=𝑊_{𝑒𝑚𝑏𝑒𝑑}^⊤\)
- 即:
Embedding 阶段: 输入索引 𝑥 映射为嵌入 \(𝑒_𝑥=𝑊_{𝑒𝑚𝑏𝑒𝑑}⋅𝑜𝑛𝑒\_ℎ𝑜𝑡(𝑥)\)
输出阶段: 使用 \(𝑒_𝑥\) 和 \(𝑊_{𝑒𝑚𝑏𝑒𝑑}^⊤\) 来计算词汇概率分布。
应用场景¶
Transformer 模型:Weight Tying 通常用于 Transformer 的嵌入层和解码器的 Softmax 输出层之间。
语言模型(RNN/LSTM):如经典的 GPT 和语言建模任务中,也普遍采用 Weight Tying。