2017-06-06 30 views
4

在Tensorflow的RNN教程中:https://www.tensorflow.org/tutorials/recurrent 。它提到了兩個參數:批量大小和時間步長。我對這些概念感到困惑。在我看來,RNN引入批次是因爲訓練序列可能非常長,反向傳播不能計算這麼長的時間(爆炸/消失梯度)。所以我們將長序列序列分成更短的序列,每個序列是一個小批量,其大小稱爲「批量大小」。我在這裏嗎?有關RNN批量大小和時間步驟的疑問

關於時間步長,RNN只包含一個小區(LSTM或GRU小區或其他小區),並且該小區是連續的。我們可以通過展開它來理解順序概念。但是展開順序單元是一個概念,不是真實的,這意味着我們不會以展開方式實現它。假設訓練序列是一個文本語料庫。然後,我們每次向RNN小區輸入一個詞,然後更新權重。那麼,爲什麼我們在這裏有時間步驟?結合我對上述「批量大小」的理解,我更加困惑。我們是否給單元格提供一個單詞或多個單詞(批量大小)?

回答

4

批量大小與更新網絡權重時要考慮的培訓樣本數量有關。所以,在一個前饋網絡,讓我們說你要基於在時間計算從一個字的梯度,以更新您的網絡的權重,你的batch_size = 1 由於梯度從單一樣本計算,這在計算上是非常低廉。另一方面,這也是非常不穩定的訓練。

要了解在培訓這樣的前饋網絡期間發生了什麼, 我會告訴你這個very nice visual example of single_batch versus mini_batch to single_sample training

但是,您想了解您的num_steps變量會發生什麼情況。這與你的batch_size不一樣。正如您可能已經注意到的,到目前爲止,我已經提到了前饋網絡。在一個前饋網絡中,輸出從網絡輸入確定和輸入 - 輸出關係是通過所學習的網絡關係映射:

hidden_​​activations(T)= F(輸入(t))的

輸出(T)= G(hidden_​​activations(T))= G(F(輸入(T)))

大小的batch_size,你的損失函數的梯度相對於每個的的訓練過程後計算網絡參數並更新您的權重。

在迴歸神經網絡(RNN),然而,網絡功能一點點不同的:

hidden_​​activations(T)= F(輸入(T),hidden_​​activations(T-1))

輸出(T)= G(hidden_​​activations(T))= G(F(輸入(T),hidden_​​activations(T-1)))

= G(F(輸入(T)中,f(輸入(T-1),hidden_​​activations(T-2))))= G(F(INP(T)中,f(INP(T-1),...,F(INP(T = 0),hidden_​​initial_state) )))

正如你可能從命名意義上推測的那樣,網絡保留了其先前狀態的記憶,並且神經元激活現在也依賴於以前的網絡狀態,並且通過對網絡所發現的所有狀態進行擴展進來。大多數RNN採用遺忘因子來更加重視更近期的網絡狀態,但這不僅僅是您的問題。

然後,你可能會猜測,這是計算非常,非常昂貴相對於網絡參數來計算損失函數的梯度,如果你要考慮反向傳播通過自創立網絡的所有狀態,有整潔的小技巧來加速您的計算:用歷史網絡狀態的子集近似您的漸變num_steps

如果這個概念性討論還不夠清晰,你也可以看一下more mathematical description of the above

+0

不是計算所有狀態,我們可以計算所有狀態的一個子集,這意味着我們只需要最後一個「num_steps」存儲器。爲了實現,每個內存都是一個數組。所以在這種情況下,我們需要一個「num_steps」x「每個內存大小」的矩陣。我的理解是正確的嗎? – derek

+0

我仍然感到困惑,每個批次的訓練樣例究竟如何工作。假設我們在一批中有5個訓練樣例。這是否意味着每個訓練示例將被饋送到隱藏的神經元細胞中,因此RNN中總共有5個細胞? – derek

+0

假設您的數據大小爲100,批量大小爲5,以便在每個紀元期間進行20次網絡參數更新。它首先傳播前5個訓練示例,根據您提供的優化方法更新其參數,然後採用下一個5,直到它完全傳遞數據。 num_steps決定了您展開的單元格數量,從而決定了梯度計算中使用的數據量。由於每個單元/層共享參數,這不會導致要優化的參數增加,但它可以實現上下文學習,這就是爲什麼您首先需要RNN。 – Uvar

0

我發現這個圖幫助我可視化數據結構。

Data Structure

從圖像中,「批量」是你想用那批訓練你的RNN序列的實例的個數。 '每個時間步數值'是你的輸入。' (在我的情況下,我的RNN需要6個輸入),最後,你的時間步長是你正在訓練的序列的'長度'

我還學習復發神經網絡以及如何爲我的一個項目準備批次(並且偶然發現了這個線索試圖找出它)。

前饋網絡和經常性網絡的批處理略有不同,並且在查看不同的論壇時,兩者的術語都會被拋出並且變得非常混亂,因此對其進行可視化非常有幫助。

希望這會有所幫助。

+0

我爲您嵌入了圖像。你應該盡力總結圖像如何回答OP的問題。僅鏈接答案在堆棧溢出時被認爲是低質量的。 –

+0

它看起來像我編輯嵌入圖像被拒絕,當你進行編輯。如果你喜歡,我可以再做一次。 –

+0

@JoeyHarwood請。謝謝 – derek