在深度學習裏經常聽到CNN、RNN、概率圖模型、深度信念等奇怪的詞彙,刀哥最近一段時間就來說道一下。
什麼是RNN呢?
循環神經網絡是1986年Rumelhart等人提出的用於出來序列數據的神經網絡,一般認爲它可以拓展到更長的序列,大部分循環神經網絡都是序列可變長的。
我們來看一下RNN需要應對的問題,假設存在一個時間序列的函數前一刻的輸出結果影響下一刻的輸出。
這種問題可在以下方面上容易遇到:
1.自然語言處理
2.機器翻譯
3.語音識別
4.實時三維重建
遇到這種問題要怎麼解決呢?
首先我們先把時間序列的函數關係搞清楚:
在一個有限長序列中,前一時刻的結果影響下一時刻。假設我們在這種規律下加入輸入:
理論上說,這是最簡單的前饋循環神經網絡。
說完基本概念,我們來說說RNN的幾種基本類型:
1.每個時間步都有輸出,並且隱藏單元之間有循環鏈接的循環網絡。
2.每個時間不都產生一個輸出,只有當前時刻的輸出到下一個時刻的隱藏單元之間有循環鏈接的循環網絡。
3.隱層單元之間存在循環鏈接,但讀取整個序列後產生單個輸出的循環網絡。
這個圖是第一種類型的圖,第二種類型是從輸出直接進入下一個時間的輸出,即把變爲.
第三種類型是沒有前面的輸出,只輸出最後一個。
這種方式的轉變相對於NN來說是比較容易理解到,值得注意的一點是所有序列共享一套權值。
當然,在對其訓練的過程中一般也是使用反向傳播的方式,在RNN中是BPTT(時間序列的反向傳播)。
這是最基本的RNN模型,它能做的事情比較少也並不強大,真正強大的是RNN針對各種應用場景的改進。
接下來我們來了解一下LSTM網絡(long short term memory)也叫長短期記憶法,這是在RNN的基礎上進行一些改進產生的。
他和RNN的區別在於他設置了一個三扇門的結構,分別叫做輸入門、遺忘門和輸出門,分別決定輸入什麼、丟棄什麼和輸出什麼。那麼爲什麼要這麼做呢?
主要是一個長序依賴問題,普通的RNN存在一個比較嚴重的問題就是最前面的信息在傳遞過程中到後面的信息量就比較少了,或者說是感知力有所下降,因此LSTM網絡才應運而生。
LSTM網絡具體做了一下幾件事情:
(爲了便於理解,我們先把三扇門當成三種函數和一些儲存結構)
1.首先RNN在循環的傳遞過程中是把上一個時間節點的信息直接當成輸入傳遞給下一個節點,這是造成長序依賴問題的原因。
爲了解決這個問題,LSTM採用細胞節點來進行信息傳遞,傳遞過程中,各個節點的信息是疊加的,所以損失比較小。
重要的一點是通過遺忘門函數對個點信息做了權重,門函數的輸入是上一個節點的隱層輸出,輸出是一個0-1的權值。
2.其次是這次細胞節點的值是輸入門函數的輸出和遺忘門函數對上次節點的輸入點乘。
3.最後是輸出門函數輸出是這次節點的隱層輸出。
在這種結構下,信息在比較少損失的情況下得到了長期依賴。
2015谷歌通過基於CTC 訓練的 LSTM 程序大幅提升了安卓手機和其他設備中語音識別的能力,也是從那時起各種語音智能應運而生,蓬勃發展開來。這裏刀哥敘述的既沒有公式推導,也沒有給出形象的圖示進行講解,比較差勁,但是思想是將清楚了。如果還沒盡興,刀哥推薦一篇論文,將的非常好。
[1]A. Graves. Supervised Sequence Labelling with Recurrent Neural Networks. Textbook, Studies in Computational Intelligence, Springer, 2012.