2016-09-24 110 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,那麼在生產中,網絡被迫處理無限長的序列,這可能會很麻煩。