Tensorflow Keras-有状态与无状态LSTM

Tensorflow Keras-有状态与无状态LSTM,tensorflow,deep-learning,keras,lstm,Tensorflow,Deep Learning,Keras,Lstm,我很难概念化Keras中有状态和无状态LSTM之间的区别。我的理解是,在每个批次结束时,无状态情况下的“网络状态重置”,而对于有状态情况,网络状态为每个批次保留,然后必须在每个历元结束时手动重置 我的问题如下: 1.在无状态的情况下,如果在批处理之间没有保留状态,网络将如何学习? 2.什么时候可以使用LSTM的无状态与有状态模式 网络仍然在每批中从项目i和项目i+1学习连接。因此,如果您决定使用无状态RNN,通常您会将序列分割为多个段,每个段的长度为N。如果您将这些段输入网络,它仍然会学习预测下

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

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

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

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


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

    对于你的问题

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

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


    顺便说一句,@vu.pham说
    如果我们使用有状态RNN,那么在生产中,网络必须处理无限长的序列。这似乎不正确,实际上,正如您在第1季度所看到的,LSTM不会学习整个序列,它首先学习batch1中的序列,更新参数,然后学习batch2中的序列。

    关于@vu.pham所说的注释。。。如果LSTM是有状态的,则有关以前批处理的信息存储在隐藏状态中,因此batch2上的更新应该取决于batch1,不是吗?(这将被视为vanilla RNN的截断BPTT,我认为,在那里backprop只使用了几个时间步,但RNN仍然可以学习较长的依赖关系,比计算梯度的序列长度更长)