Keras - 有状态与无状态 LSTM

Keras - stateful vs stateless LSTMs

我很难概念化 Keras 中有状态和无状态 LSTM 之间的区别。我的理解是,在每批结束时,"state of the network is reset" 在无状态情况下,而对于有状态情况,网络状态会为每批保留,然后必须在每批结束时手动重置纪元.

我的问题如下: 1. 在无状态的情况下,如果批次之间不保留状态,网络如何学习? 2. 什么时候会使用 LSTM 的无状态模式与有状态模式?

  1. 网络仍然在每个批次中从项目 i 和项目 i+1 学习连接。因此,如果您决定使用无状态 RNN,通常您会将序列分成多个部分,每个部分的长度为 N。如果您将这些部分输入网络,它仍然会根据其对所有先前元素的了解来学习预测下一个元素元素.

  2. 我相信大多数人在实践中使用无状态RNN,因为如果我们使用有状态RNN,那么在生产中,网络被迫处理无限长的序列,这可能处理起来很麻烦。

我建议你先学习一下BPTT(Back Propagation Through Time)和mini-batch SGD(Stochastic Gradient Descent)的概念,然后你会对LSTM的训练过程有进一步的了解。

对于您的问题,

Q1。在无状态情况下,LSTM 更新 batch1 上的参数,然后为 batch2 启动隐藏状态和单元状态(通常全为零),而在有状态情况下,它使用 batch1 最后输出的隐藏状态和单元状态作为 batch2 的初始状态。

Q2。上面可以看到,当两个批次中的两个序列有联系时(比如一只股票的价格),你最好使用有状态模式,否则(比如一个序列代表一个完整的句子)你应该使用无状态模式。

顺便说一句,@vu.pham 说 if we use stateful RNN, then in production, the network is forced to deal with infinite long sequences。这似乎不正确,实际上,正如您在 Q1 中看到的那样,LSTM WON'T learn on the whole sequence,它首先在 batch1 中学习序列,更新参数,然后在 batch2 中学习序列.