在神经机器翻译中绑定权重[关闭]
Posted
技术标签:
【中文标题】在神经机器翻译中绑定权重[关闭]【英文标题】:Tying weights in neural machine translation [closed] 【发布时间】:2018-08-24 06:33:34 【问题描述】:我想绑定解码器的embedding
层和next_word
预测层的权重。嵌入维度设置为300,解码器的隐藏大小设置为600。NMT中目标语言的词汇量为50000,因此嵌入权重维度为50000 x 300
,预测下一个单词的线性层的权重为50000 x 600
。
那么,我怎样才能把它们绑起来呢?在这种情况下,实现重量捆绑的最佳方法是什么?
【问题讨论】:
【参考方案1】:Weight Tying :在 input-to-embedding 层和 output-to-softmax 层之间共享权重矩阵;也就是说,我们只使用一个权重矩阵,而不是使用两个权重矩阵。这样做背后的直觉是为了解决过拟合的问题。因此,权重绑定可以被认为是一种正则化形式。
这已经在word language model in PyTorch examples实现了
【讨论】:
我看过那个例子,我知道你提到的事情。我想知道,特别是在我提到的场景中,捆绑重量的最佳方法是什么?请注意形状,在我的情况下打结不是直截了当的。 我认为真正的直觉是它们在理论上是相同的。 IE。来自和到 1-hot 表示的投影。 “在这两个矩阵中,我们希望与相似词对应的行是相似的:对于输入嵌入,我们希望网络对同义词做出类似的反应,而在输出嵌入中,我们希望可以互换的词的分数相似”aclweb.org/anthology/E17-2025.pdf【参考方案2】:您是否检查了 kmario23 共享的代码?因为它写道,如果隐藏大小和嵌入大小不相等,则引发异常。所以,这意味着如果你真的想绑定权重,那么你应该将解码器的隐藏大小减少到 300。
另一方面,如果你重新考虑你的想法,你真正想做的是消除重量捆绑。为什么?因为基本上,您想使用需要另一个矩阵的转换。
【讨论】:
【参考方案3】:在应用共享投影之前,您可以使用线性层将 600 维空间向下投影到 300。这样您仍然可以获得优势,即整个嵌入(可能)对于每个小批量都具有非零梯度,但存在略微增加网络容量的风险。
【讨论】:
【参考方案4】:我认为您可以使用 PCA 技术来实现这一点,这意味着仅将嵌入权重矩阵的主要组件绑定到线性层。但是,我不确定这是否有意义。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于在神经机器翻译中绑定权重[关闭]的主要内容,如果未能解决你的问题,请参考以下文章