一. RNN
1. RNN作用是什麼?
RNN是一種可以具有前後記憶的一種特殊的神經網絡,它不僅考慮當前時刻的輸入,而且賦予了網絡對前面的內容的一種'記憶'功能.當前節點的輸出是基於上一個節點的狀態加上當前節點的輸入。這樣的神經網絡是具有上下文關係對應的,後面的信息是基於前面的信息而得出的,幾乎所有和時間序列有關的數據我們都可以用循環神經網絡進行訓練。
2. RNN的應用
之前已經說過:RNN的應用範圍非常廣泛,凡是考慮時間先後順序的問題都可以使用RNN來解決,這裏主要說一下幾個常見的應用領域:
① 自然語言處理(NLP): 主要有視頻處理, 文本生成, 語言模型, 圖像處理
② 機器翻譯, 機器寫小說
③ 語音識別
④ 圖像描述生成
⑤ 文本相似度計算
⑥ 音樂推薦、網易考拉商品推薦、Youtube視頻推薦等新的應用領域。
3. RNN模型
上圖是一個摺疊起來的RNN,我們看看他展開之後是怎樣。
這裏隱藏層展示了3個神經元節點,第一個節點的狀態是St-1,下一個隱藏層節點的輸出就是由St-1和下一個的輸入Xt決定的。以此類推。 各個節點的參數計算公式:
其中,隱藏層神經元節點的個數代表着這一層神經網絡的輸出維度,同時也是下一層的輸入維度。
假如,現在有一個28*28的矩陣,我設置,隱藏層爲一層,隱藏層節點爲28個,輸入的維度爲28,所以隱藏層的第一個節點輸入爲矩陣的第一行,第二個節點輸入爲矩陣第二行......以此類推,第28個節點的輸入爲矩陣第28行,這樣就得到了28個輸出,下一層假如定義一個全連接層,那麼全連接層的輸入就是28維度的。
二. LSTM(長短時間記憶)改進
1. 爲何改進
我們知道神經網絡的反向傳播算法,RNN也不例外,它運用的也是反向傳播算法,可是問題在於,如果隱藏層節點過多的情況下,如果梯度<1,每一層都小於0,那麼乘起來可能就很接近於0了,那麼就是說前面的因素對於後面的影響是非常小的。這就是梯度消失。相應的,梯度爆炸就是如果梯度>1,那麼乘起來很有可能就是一個無限大的數,這就叫梯度爆炸。爲了預防zhey這樣的情況發生,LSTM應運而生。
2. 原理
普通的RNN只有一個狀態碼h,而LSTM增加了一個狀態碼C,也就是有兩個狀態碼,C這個狀態碼就是可以去遺忘掉一些沒用的信息的:
LSTM的原理就是有了三個門的概念:遺忘門,輸入門,輸出門。也就是說這個模型它可以過濾出前後關聯不大的信息將其忘記掉,而只要前後文關聯比較緊密的信息。
輸入門決定了有多少信息可以保存到下一個Ct;
遺忘門決定了上一個Ct-1有多少信息可以保存到Ct。
3. 模型
(1)細胞狀態:
(2)遺忘門:下圖中輸入的有上一序列的隱藏狀態ht−1和本序列數據xt,通過一個激活函數,一般是sigmoid,得到遺忘門的輸出ft。由於sigmoid的輸出ft在[0,1]之間,因此這裏的輸出ft代表了遺忘上一層隱藏細胞狀態的概率。也可以理解爲有(多少%)的數據可以保留下來。用數學表達式即爲:
(3)輸入門:
(4)細胞更新:正常RNN應該直接是Ct-1+it*at
(5)輸出門: