LSTM 查询方法

数据挖掘 lstm
2022-03-13 03:43:55

我刚刚意识到我对 LSTM 的预测方法可能不正确。

我试图通过阅读这本书来逐个字符地预测。我解决问题的方法如下:

   b                                    c                d                e
   ^     carry cell state forward       ^                ^                ^
LSTM_t0  ------------------------->  LSTM_t1  ----->  LSTM_t2  ----->  LSTM_t3
   ^                                    ^                ^                ^
   a                                    b                c                d

这意味着我有 4 个时间步,在每个时间步中,我将下一个字母输入 LSTM,期望它立即预测下一个字母。

我应该这样做:

ignore          ignore           ignore             e
  ^               ^                ^                ^
LSTM_t0  ---->  LSTM_t1  ----->  LSTM_t2  ----->  LSTM_t3
  ^               ^                ^                ^
  a               b                c                d

在第一种情况下,我可以获得 4 个损失值,但在第二个例子中,我只有 1 个梯度源,位于 _t3

我主要关心的是在第一个示例中,我要求 LSTM 在没有提供足够的先前上下文的情况下对“b”和“c”进行预测。'd' 和 'e' 没问题,但是在时间步 0 和 1 要求答案有点不公平?

对于这个特定的例子,什么是最好的?

1个回答

您的第一个示例基本上不是顺序模型。你有一个输入和一个输出,就是这样。你不需要一个循环层......

我建议你做的是:

    e               f               g                         
    ^               ^               ^ 
 LSTM_t1  ---->  LSTM_t2  -----> LSTM_t3  ----->  ...
    ^               ^               ^  
  abcd            bcde            cdef               

显然,您将失去预测第一个字符的能力,但希望您的数据集将包含更多使用这些特定字符的示例,以便最终学习如何使用它们。我想说这是生成字符到字符文本生成模型的最通用方法。几个例子,包括实现:herehere