Keras - 有状态与无状态LSTM

时间:2016-09-24 21:16:45

标签: tensorflow deep-learning keras lstm

我很难概念化Keras中有状态和无状态LSTM之间的区别。我的理解是,在每个批处理结束时,在无状态情况下“重置网络状态”,而对于有状态情况,每个批处理都保留网络状态,然后必须在每个时代的结束。

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

2 个答案:

答案 0 :(得分:18)

我建议您首先学习BPTT(通过时间反向传播)和小批量SGD(随机梯度下降)的概念,然后您将对LSTM的训练程序有进一步的了解。

如有问题,

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

Q2。如上所示,当两个批次中的两个序列具有连接(例如一个股票的价格)时,您最好使用有状态模式,否则(例如,一个序列代表一个完整的句子)您应该使用无状态模式。

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

答案 1 :(得分:5)

  1. 网络仍然在每批中从项目i和项目i + 1学习连接。因此,如果您决定使用无状态RNN,通常会将您的系列分成多个段,每个段的长度为N.如果您将这些段提供给网络,它仍然学会预测下一个元素,因为它知道所有以前的元件。

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