【问题标题】:Differences in encoder - decoder models between Keras and PytorchKeras 和 Pytorch 之间编码器 - 解码器模型的差异
【发布时间】:2020-06-09 02:17:58
【问题描述】:

在 keras 和 pytorch 之间的编码器-解码器模型的构建上似乎存在显着的根本差异。这里是keras' enc-dec blog,这里是pytorch's enc-dec blog

我注意到的一些差异如下:

  1. Keras 的模型直接将输入提供给 LSTM 层。而 Pytorch 对编码器和解码器都使用嵌入层。
  2. Pytorch 在编码器中使用没有激活的嵌入层,但在解码器中对嵌入层使用 relu 激活。

鉴于这些观察,我的问题如下:

  1. 我的理解如下,对吗?嵌入层不是严格要求的,但它有助于找到更好和更密集的输入表示。它是可选的,您仍然可以在没有嵌入层的情况下构建一个好的模型(取决于问题)。这就是 Keras 在这个特定示例中选择不使用它的原因。这是一个合理的理由还是还有更多的原因?
  2. 为什么在解码器而不是编码器中对嵌入层使用激活?
  3. 为什么嵌入层使用“relu”而不是“tanh”等作为激活?这里的直觉是什么?我只看到'relu'应用于具有空间关系而不是时间关系的数据。

【问题讨论】:

    标签: keras nlp pytorch lstm


    【解决方案1】:

    您对编码器-解码器模型的理解有误。首先,请注意 Keras 和 Pytorch 是两个深度学习框架,而编码器-解码器是一种神经网络架构。因此,您首先需要了解编码器-解码器的工作原理,然后根据您的需要修改它们的架构。现在,让我回到你的问题。

    1. 嵌入层将 one-hot 编码表示转换为低维向量表示。例如,我们有一个句子I love programming。我们想使用编码器-解码器网络将这句话翻译成德语。因此,第一步是首先将输入句子中的单词转换为一系列向量表示,这可以使用嵌入层来完成。请注意,使用 Keras 或 Pytorch 并不重要。您可以想,如何将自然语言句子作为 LSTM 的输入?显然,你首先需要将它们转换成向量。

    2. 没有这样的规则,您应该在解码器的嵌入层中使用激活层,而不是在编码器中。请记住,激活函数是非线性函数。因此,应用非线性会产生不同的结果,但它与编码器-解码器框架无关。

    3. 同样,激活函数的选择取决于其他因素,而不是编码器或解码器或特定类型的神经网络架构。我建议您阅读神经网络中使用的流行激活函数的特征。另外,不要在观察几个用例后得出结论。这样的结论是危险的。

    【讨论】:

    • 使用 pytorch 的 enc-dec 结构,你的直觉是什么,为什么他们只使用解码器中嵌入层的激活而不是编码器中的激活?
    • 只是为了澄清一下,使用 keras 构建的模型,他们选择不使用嵌入层,因为他们已经将输入转换为 OHE 矢量表示,并且他们认为这就足够了。这是正确的直觉吗?
    猜你喜欢
    • 2019-06-14
    • 2019-09-13
    • 1970-01-01
    • 2020-09-26
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2011-09-02
    相关资源
    最近更新 更多