我很难概念化 Keras 中有状态 LSTM 和无状态 LSTM 之间的区别。我的理解是,在每个批处理结束时,在无状态情况下“网络状态被重置”,而对于有状态情况,网络状态会为每个批处理保留,然后必须在每个纪元的结束。
我的问题如下: 1. 在无状态的情况下,如果批处理之间不保留状态,网络将如何学习? 2. 什么时候使用 LSTM 的无状态模式和有状态模式?
最佳答案
我建议您首先学习BPTT(Back Propagation Through Time)和小批量SGD(Stochastic Gradient Descent)的概念,然后您将对LSTM的训练过程有进一步的了解。
对于您的问题,
Q1。在无状态情况下,LSTM 更新批处理 1 上的参数,然后为批处理 2 启动隐藏状态和单元状态(通常全为零),而在有状态情况下,它使用批处理 1 的最后输出隐藏状态和单元状态作为批处理 2 的初始状态。
第二季度。从上面可以看出,当两批中的两个序列有联系时(例如一只股票的价格),最好使用有状态模式,否则(例如一个序列代表一个完整的句子)则应该使用无状态模式。
顺便说一句,@vu.pham 说如果我们使用有状态 RNN,那么在生产中,网络将被迫处理无限长的序列
。这似乎不正确,实际上,正如您在 Q1 中看到的,LSTM 不会学习整个序列,它首先学习批处理 1 中的序列,更新参数,然后学习批处理 2 中的序列。
关于tensorflow - Keras - 有状态 LSTM 与无状态 LSTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681046/