在神经机器翻译中绑定权重
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之间共享权重矩阵层;也就是说,我们只使用一个权重矩阵,而不是使用两个权重矩阵。这样做背后的直觉是为了解决 过度拟合 的问题。因此,权重绑定可以被视为一种正则化形式。
中实施
你查看kmario23分享的代码了吗?因为它写到如果隐藏大小和嵌入大小不相等则引发异常。所以,这意味着如果你真的想绑定权重,那么你应该将解码器的隐藏大小减少到 300。
另一方面,如果您重新考虑您的想法,您真正想要做的是消除权重绑定。为什么?因为基本上,您想使用需要另一个矩阵的转换。
在应用共享投影之前,您可以使用线性层将 600 维 space 向下投影到 300 维。通过这种方式,您仍然可以获得每个小批量的整个嵌入(可能)具有非零梯度的优势,但存在略微增加网络容量的风险。
我想绑定 embedding
层和解码器的 next_word
预测层的权重。嵌入维度设置为300,解码器的隐藏大小设置为600。NMT中目标语言的词汇量为50000,因此嵌入权重维度为50000 x 300
,预测下一个线性层的权重单词是 50000 x 600
。
那么,我该如何绑定它们呢?在这种情况下实现权重绑定的最佳方法是什么?
权重绑定:在input-to-embedding层和output-to-softmax之间共享权重矩阵层;也就是说,我们只使用一个权重矩阵,而不是使用两个权重矩阵。这样做背后的直觉是为了解决 过度拟合 的问题。因此,权重绑定可以被视为一种正则化形式。
中实施你查看kmario23分享的代码了吗?因为它写到如果隐藏大小和嵌入大小不相等则引发异常。所以,这意味着如果你真的想绑定权重,那么你应该将解码器的隐藏大小减少到 300。
另一方面,如果您重新考虑您的想法,您真正想要做的是消除权重绑定。为什么?因为基本上,您想使用需要另一个矩阵的转换。
在应用共享投影之前,您可以使用线性层将 600 维 space 向下投影到 300 维。通过这种方式,您仍然可以获得每个小批量的整个嵌入(可能)具有非零梯度的优势,但存在略微增加网络容量的风险。