長短期記憶(LSTM(long short term memory)unit)
在上一個筆記中你已經學了GRU(門控循環單元)。它能夠讓你可以在序列中學習非常深的連接。其他類型的單元也可以讓你做到這個,比如LSTM即長短時記憶網絡,甚至比GRU更加有效,讓我們看看。
這裡是上個筆記中的式子,對於GRU我們有a^(
還有兩個門:
更新門Γ_u(the update gate)
相關門Γ_r(the relevance gate)
̃c^(
LSTM是一個比GRU更加強大和通用的版本,這多虧了 Sepp Hochreiter和 Jurgen Schmidhuber,感謝那篇開創性的論文,它在序列模型上有著巨大影響。感覺這篇論文是挺難讀懂的,雖然我認為這篇論文在深度學習社群有著重大的影響,它深入討論了梯度消失的理論,我感覺大部分的人學到LSTM的細節是在其他的地方,而不是這篇論文。
這就是LSTM主要的式子(上圖編號2所示),我們繼續回到記憶細胞c上面來,使用̃c^(
注意了,在LSTM中我們不再有a^(
雖然你可以使用LSTM的變體,然後把這些東西(左邊所示的GRU公式)都放回來,但是在更加典型的LSTM裡面,我們先不那樣做。
我們像以前那樣有一個更新門Γ_u和表示更新的參數W_u,Γ_u=σ(W_u [a^(
然後這裡(上圖編號7所示)用遺忘門(the forget gate),我們叫它Γ_f,所以這個Γ_f=σ(W_f [a^(
然後我們有一個新的輸出門,Γ_o=σ(W_o [a^(
於是記憶細胞的更新值c^(
所以這給了記憶細胞選擇權去維持舊的值c^(
然後這個表示更新門(Γ_u=σ(W_u [a^(
遺忘門(Γ_f=σ(W_f [a^(
最後a^(
再提一下,這些式子就是控制LSTM行為的主要的式子了(上圖編號1所示)。像之前一樣用圖片稍微解釋一下,先讓我把圖畫在這裡(上圖編號2所示)。如果圖片過於複雜,別擔心,我個人感覺式子比圖片好理解,但是我畫圖只是因為它比較直觀。
這個右上角的圖的靈感來自於Chris Ola的一篇博客,標題是《理解LSTM網絡》(Understanding LSTM Network),這裡的這張圖跟他博客上的圖是很相似的,但關鍵的不同可能是這裡的這張圖用了a^(
這裡其中一個元素很有意思,如你在這一堆圖(上圖編號8所示的一系列圖片)中看到的,這是其中一個,再把他們連起來,就是把它們按時間次序連起來,這裡(上圖編號9所示)輸入x^(<1>),然後x^(<2>),x^(<3>),然後你可以把這些單元依次連起來,這裡輸出了上一個時間的a,a會作為下一個時間步的輸入,c同理。
在下面這一塊,我把圖簡化了一下(相對上圖編號2所示的圖有所簡化)。然後這有個有意思的事情,你會注意到上面這裡有條線(上圖編號10所示的線),這條線顯示了只要你正確地設置了遺忘門和更新門,LSTM是相當容易把c^(<0>)的值(上圖編號11所示)一直往下傳遞到右邊,比如c^(<3>)=c^(<0>)(上圖編號12所示)。
這就是為什麼LSTM和GRU非常擅長於長時間記憶某個值,對於存在記憶細胞中的某個值,即使經過很長很長的時間步。
這就是LSTM,你可能會想到這裡和一般使用的版本會有些不同,最常用的版本可能是門值不僅取決於a^(
如你所見LSTM主要的區別在於一個技術上的細節,比如這(上圖編號13所示)有一個100維的向量,你有一個100維的隱藏的記憶細胞單元,然後比如第50個c^(
LSTM前向傳播圖:
LSTM反向傳播計算:
門求偏導:
參數求偏導 :
為了計算db_f,db_u,db_c,db_o 需要各自對dΓ_f^(⟨t⟩),dΓ_u^(⟨t⟩),d̃c^(⟨t⟩),dΓ_o^(⟨t⟩) 求和。
最後,計算隱藏狀態、記憶狀態和輸入的偏導數:
這就是LSTM,我們什麼時候應該用GRU?什麼時候用LSTM?這裡沒有統一的準則。
而且即使先講解了GRU,在深度學習的歷史上,LSTM也是更早出現的,而GRU是最近才發明出來的,它可能源於Pavia在更加複雜的LSTM模型中做出的簡化。研究者們在很多不同問題上嘗試了這兩種模型,看看在不同的問題不同的算法中哪個模型更好,所以這不是個學術和高深的算法,我才想要把這兩個模型展示給你。
GRU的優點是這是個更加簡單的模型,所以更容易創建一個更大的網絡,而且它只有兩個門,在計算性上也運行得更快,然後它可以擴大模型的規模。
但是LSTM更加強大和靈活,因為它有三個門而不是兩個。
如果你想選一個使用,我認為LSTM在歷史進程上是個更優先的選擇,所以如果你必須選一個,我感覺今天大部分的人還是會把LSTM作為默認的選擇來嘗試。雖然我認為最近幾年GRU獲得了很多支持,而且感覺越來越多的團隊也正在使用GRU,因為它更加簡單,而且還效果還不錯,它更容易適應規模更加大的問題。
所以這就是LSTM,無論是GRU還是LSTM,你都可以用它們來構建捕獲更加深層連接的神經網絡。
(Hochreiter S, Schmidhuber J. Long Short-Term Memory[J]. Neural Computation, 1997, 9(8):1735-1780.)
閱讀更多 極客Array 的文章