【问题标题】: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

那么,我怎样才能把它们绑起来呢?在这种情况下,实现重量捆绑的最佳方法是什么?

【问题讨论】:

    标签: python deep-learning recurrent-neural-network pytorch seq2seq


    【解决方案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
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 2020-11-26
        • 2021-05-23
        • 2021-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多