在神经机器翻译中绑定权重

Tying weights in neural machine translation

我想绑定 embedding 层和解码器的 next_word 预测层的权重。嵌入维度设置为300,解码器的隐藏大小设置为600。NMT中目标语言的词汇量为50000,因此嵌入权重维度为50000 x 300,预测下一个线性层的权重单词是 50000 x 600

那么,我该如何绑定它们呢?在这种情况下实现权重绑定的最佳方法是什么?

权重绑定:在input-to-embedding层和output-to-softmax之间共享权重矩阵层;也就是说,我们只使用一个权重矩阵,而不是使用两个权重矩阵。这样做背后的直觉是为了解决 过度拟合 的问题。因此,权重绑定可以被视为一种正则化形式。

这已在 word language model in PyTorch examples

中实施

你查看kmario23分享的代码了吗?因为它写到如果隐藏大小和嵌入大小不相等则引发异常。所以,这意味着如果你真的想绑定权重,那么你应该将解码器的隐藏大小减少到 300。

另一方面,如果您重新考虑您的想法,您真正想要做的是消除权重绑定。为什么?因为基本上,您想使用需要另一个矩阵的转换。

在应用共享投影之前,您可以使用线性层将 600 维 space 向下投影到 300 维。通过这种方式,您仍然可以获得每个小批量的整个嵌入(可能)具有非零梯度的优势,但存在略微增加网络容量的风险。