2016-09-24 109 views
7

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

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

回答

7

,我建议你先学习BPTT的概念(后退中的传播时间)和小批量SGD(随机梯度下降),那么你就必须LSTM的训练过程的进一步理解。

对于你的问题,

Q1。在无状态的情况下,LSTM更新batch1上的参数,然后启动batch2的隐藏状态和单元状态(通常全为零),而在有状态情况下,它使用batch1的最后输出隐藏状态和单元状态作为batch2的初始状态。 Q2302。正如你在上面看到的,当两个批次中的两个序列有连接时(例如一个股票的价格),你最好使用有状态模式,否则(例如一个序列表示一个完整的句子),你应该使用无状态模式。

顺便说一句,@ vu.pham说if we use stateful RNN, then in production, the network is forced to deal with infinite long sequences。这看起来不正确,实际上,正如您在Q1中所看到的,LSTM 不会在整个序列上学习,它首先在batch1中学习序列,更新参数,然后在batch2上学习序列。

+0

关于@ vu.pham所说的内容......如果LSTM是'有状态的',有关以前批次的信息将以隐藏状态存储,因此batch2上的更新应该取决于batch1,不是吗? ? (这被认为是香草RNN的截断BPTT,我认为那里的反向传播只使用了几个时间步长,但RNN仍然可以学习长依赖性,长于计算梯度的序列的长度) –

4
  1. 网络仍然从每个批次中的项目i和项目i + 1获悉连接。所以如果你决定使用无状态的RNN,通常你会把你的系列分成多段,每段长度为N.如果你将这些段馈入网络,它仍然学会预测下一个元素,元素。

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