代码之家  ›  专栏  ›  技术社区  ›  alliedtoasters

在MLSTM概念斗争中嵌入字节

  •  2
  • alliedtoasters  · 技术社区  · 7 年前

    我正试图跟随 OpenAI "Sentiment Neuron" experiment 通过阅读 PyTorch code posted on Github 从零开始训练模型。

    我不理解的一件事是代码中使用的字节级嵌入。我知道lstm为下一个字节的值输出一个概率分布,我假设“嵌入”只是对字节值的一个热编码。

    查看代码,我发现在进入模型之前,模型的输入经历了(可训练的)密集嵌入。令人困惑的是,损失的输出是在模型输出和即将到来的字节值之间计算的,即 嵌入的。

    我的问题是:
    1。如何计算交叉熵损失?n.crossEntropyLoss是否接受其输入的SoftMax并将目标扩展为“引擎盖下”的一个热向量?

    2。如果我们想从这个lstm生成字节字符串,我们如何嵌入输出以反馈到模型中,以便进行下一步?我们是嵌入最大的可能性,还是采用输出的SoftMax并使用某种加权嵌入?

    我是新来的LSTM,我正在努力学习,但我就是不明白!谢谢你的帮助!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Davis Yoshida    7 年前

    即使相同的符号被用于输入和输出,在每一端使用不同的表示也是完全可以接受的。交叉熵是两个概率分布的函数。在这种情况下,这两个分布是模型给出的SoftMax分布,以及“正确”字节上的点质量。

    对于问题1,是的,这就是在输入和输出方面正在做的事情(尽管实现可能会被优化)。

    要回答问题2,最常见的是在每个步骤形成SoftMax分布,然后从中进行采样。