在神经机器翻译中绑定权重[关闭]

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。

以上是关于在神经机器翻译中绑定权重[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

机器学习算法及代码实现–神经网络

机器学习算法简介人工神经网络算法

简单易学的机器学习算法——极限学习机(ELM)

机器学习--感知器数据分类算法步骤(慕课网-实现简单的神经网络)

在扑克机器人中使用遗传算法训练神经网络可行吗?

机器学习之神经网络的公式推导与python代码(手写+pytorch)实现