Keras - 有状态与无状态 LSTM
Keras - stateful vs stateless LSTMs
我很难概念化 Keras 中有状态和无状态 LSTM 之间的区别。我的理解是,在每批结束时,"state of the network is reset" 在无状态情况下,而对于有状态情况,网络状态会为每批保留,然后必须在每批结束时手动重置纪元.
我的问题如下:
1. 在无状态的情况下,如果批次之间不保留状态,网络如何学习?
2. 什么时候会使用 LSTM 的无状态模式与有状态模式?
网络仍然在每个批次中从项目 i 和项目 i+1 学习连接。因此,如果您决定使用无状态 RNN,通常您会将序列分成多个部分,每个部分的长度为 N。如果您将这些部分输入网络,它仍然会根据其对所有先前元素的了解来学习预测下一个元素元素.
我相信大多数人在实践中使用无状态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 中学习序列.
我很难概念化 Keras 中有状态和无状态 LSTM 之间的区别。我的理解是,在每批结束时,"state of the network is reset" 在无状态情况下,而对于有状态情况,网络状态会为每批保留,然后必须在每批结束时手动重置纪元.
我的问题如下: 1. 在无状态的情况下,如果批次之间不保留状态,网络如何学习? 2. 什么时候会使用 LSTM 的无状态模式与有状态模式?
网络仍然在每个批次中从项目 i 和项目 i+1 学习连接。因此,如果您决定使用无状态 RNN,通常您会将序列分成多个部分,每个部分的长度为 N。如果您将这些部分输入网络,它仍然会根据其对所有先前元素的了解来学习预测下一个元素元素.
我相信大多数人在实践中使用无状态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 中学习序列.