Lstm

RNN:何時應用 BPTT 和/或更新權重?

  • June 21, 2016

我試圖通過 Graves 2005 年關於音素分類的論文(除其他外)了解 RNN 在序列標記中的高級應用。

總結一下這個問題:我們有一個大型訓練集,包括(輸入)單句音頻文件和(輸出)專家標記的開始時間、停止時間和單個音素的標籤(包括一些“特殊”音素,如靜音、這樣每個音頻文件中的每個樣本都標有一些音素符號。)

這篇論文的主旨是將隱藏層中帶有 LSTM 記憶單元的 RNN 應用到這個問題上。(他應用了幾種變體和其他幾種技術作為比較。我目前只對單向 LSTM 感興趣,以保持簡單。)

我相信我了解網絡的架構:輸入層對應於音頻文件的 10 毫秒窗口,以音頻工作的標準方式進行預處理;LSTM 單元的隱藏層,以及所有可能的 61 個音素符號的單熱編碼的輸出層。

我相信我理解通過 LSTM 單元的前向傳播和後向傳播的(複雜但簡單的)方程。它們只是微積分和鍊式法則。

在閱讀了這篇論文和幾篇類似的論文之後,我不明白什麼時候準確地應用反向傳播算法以及準確地更新神經元中的各種權重。

有兩種可行的方法:

1)逐幀反向傳播和更新

Load a sentence.  
Divide into frames/timesteps.  
For each frame:
- Apply forward step
- Determine error function
- Apply backpropagation to this frame's error
- Update weights accordingly
At end of sentence, reset memory
load another sentence and continue.

或者,

  1. Sentence-wise backprop 和更新:
Load a sentence.  
Divide into frames/timesteps.  
For each frame:
- Apply forward step
- Determine error function
At end of sentence:
- Apply backprop to average of sentence error function
- Update weights accordingly
- Reset memory
Load another sentence and continue.

**請注意,這是一個關於 RNN 訓練的一般問題,**使用 Graves 論文作為一個有針對性的(和個人相關的)示例:在序列上訓練 RNN 時,是否在每個時間步都應用反向傳播?每個時間步都調整權重嗎?或者,與嚴格前饋架構上的批量訓練做一個鬆散的類比,在應用反向傳播和權重更新之前,誤差是否在特定序列上累積和平均?

還是我比我想像的更困惑?

我假設我們討論的是在每個時間步產生輸出的循環神經網絡 (RNN)(如果輸出僅在序列末尾可用,則只有在末尾運行反向傳播才有意義)。這種設置中的 RNN 通常使用截斷的時間反向傳播 (BPTT) 進行訓練,在序列的“塊”上按順序操作。該過程如下所示:

  1. 前傳:通過下一個時間步長,計算輸入、隱藏和輸出狀態。
  2. 計算損失,對之前的時間步求和(見下文)。
  3. 後向傳遞:計算所有參數的損失梯度,在前一個上累積時間步長(這需要存儲這些時間步長的所有激活)。剪裁梯度以避免梯度爆炸問題(很少發生)。
  4. 更新參數(每個塊發生一次,而不是在每個時間步增量)。
  5. 如果處理較長序列的多個塊,則在最後一個時間步存儲隱藏狀態(將用於初始化隱藏狀態以用於下一個塊的開始)。如果我們已經到達序列的末尾,重置內存/隱藏狀態並移動到下一個序列的開頭(或相同序列的開頭,如果只有一個)。
  6. 從步驟 1 開始重複。

如何對損失求和取決於和. 例如,當,損失是過去的總和時間步長,但過程不同時(見 Williams 和 Peng 1990)。

梯度計算和更新每執行一次時間步,因為它在計算上比在每個時間步更新更便宜。每個序列更新多次(即設置小於序列長度)可以加速訓練,因為權重更新更頻繁。

僅執行反向傳播時間步,因為它在計算上比傳播回序列的開頭更便宜(這需要存儲和重複處理所有時間步)。以這種方式計算的梯度是在所有時間步上計算的“真實”梯度的近似值。但是,由於梯度消失問題,梯度會在一定數量的時間步之後趨於接近零;傳播超出此限制不會帶來任何好處。環境太短會限製網絡可以學習的時間尺度。但是,網絡的內存不限於時間步長,因為隱藏單元可以存儲超出此時間段的信息(例如,參見 Mikolov 2012 和這篇文章)。

除了計算方面的考慮,適當的設置和取決於數據的統計數據(例如,與產生良好輸出相關的結構的時間尺度)。它們可能還取決於網絡的詳細信息。例如,有許多架構、初始化技巧等旨在緩解梯度衰減問題。

您的選項 1 (‘frame-wise backprop’) 對應於設置到和從句子開頭到當前點的時間步數。選項 2 (‘sentence-wise backprop’) 對應於同時設置和到句子長度。兩者都是有效的方法(具有如上所述的計算/性能考慮;對於較長的序列,#1 將是相當計算密集的)。這些方法都不會被稱為“截斷”,因為反向傳播發生在整個序列上。的其他設置和是可能的;我將在下面列出一些示例。

描述截斷 BPTT 的參考文獻(程序、動機、實際問題):

+ 使用 vanilla RNN 將文本數據處理為單詞序列,他建議設置到 10-20 字和到 5 個字 + 每個序列執行多次更新(即小於序列長度)比在序列末尾更新效果更好 + 每個塊執行一次更新優於增量(可能不穩定)

+ 算法的原始(?)提案 + 他們討論選擇和(他們稱之為和)。他們只考慮. + 注意:他們使用短語“BPTT(h; h')”或“改進的算法”來指代其他參考文獻所稱的“截斷 BPTT”。他們使用短語“截斷的 BPTT”來表示特殊情況,其中.

使用截斷 BPTT 的其他示例:

  • (Karpathy 2015)。char-rnn。

+ 描述代碼 + Vanilla RNN 一次處理一個字符的文本文檔。訓練預測下一個字符。人物。網絡用於生成訓練文檔樣式的新文本,結果很有趣。

+ 請參閱有關生成模擬 Wikipedia 文章的部分。LSTM 網絡將文本數據處理為字節序列。訓練預測下一個字節。字節。LSTM 內存每次重置字節。

+ 修改後的 LSTM 網絡,處理聲學特徵序列。.

+ 本文的重點是提出一種不同的學習算法,但他們確實將其與截斷的 BPTT 進行了比較。使用 vanilla RNN 預測符號序列。在這裡只提它是為了說他們用過.

+ 他們描述了 LSTM 的修改程序

引用自:https://stats.stackexchange.com/questions/219914

comments powered by Disqus