Keras-有状态vs无状态LSTM
deep-learning
keras
lstm
tensorflow
7
0

我很难理解Keras中有状态LSTM与无状态LSTM之间的区别。我的理解是,在每个批次的末尾,在无状态情况下“重置网络状态”,而对于有状态情况,将为每个批次保留网络状态,然后必须在该状态下手动重置每个时代的结束。

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

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

我建议您首先学习BPTT(时间反向传播)和小批量SGD(随机梯度下降)的概念,然后再进一步了解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 不会学习整个序列,它首先会在batch1中学习序列,更新参数,然后再在batch2中学习序列。

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

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号