1. 程式人生 > >深度學習筆記-卷積神經網路CNN與迴圈神經網路RNN有什麼區別?

深度學習筆記-卷積神經網路CNN與迴圈神經網路RNN有什麼區別?

CNN與RNN本質的不同就是所基於的假設不同,由於核心假設的不同,導致實現方式的差異。

CNN

首先理解什麼叫做卷積,或者說為什麼要翻譯為卷積神經網路。

卷積的定義:https://baike.baidu.com/item/%E5%8D%B7%E7%A7%AF/9411006?fr=aladdin

簡單來說,卷積就是兩個相對運動的幾何圖形,在相交到相離之間,重疊的面積。

對於CNN神經網路,有一個基礎的假設——人類的視覺總是會關注視線內特徵最明顯的點

而CNN神經網路是模仿人類處理資訊的過程,我們首先來看一下人類處理資訊的幾個特點。

1)從空間頻率域來看,人眼是一個低通型線性系統,即人眼受幾何尺寸和視覺細胞大小的影響,人眼對太高的頻率不敏感。

2) 人眼對亮度訊號的空間分別率大於對色度訊號的空間解析度。

3) 由於人眼受神經系統的調節,從空間頻率的角度來說,人眼又具有帶通性線性系統的特性。由訊號分析的理論可知,人眼視覺系統對訊號進行加權求和運算,相當於使訊號通過一個帶通濾波器,結果會使人眼產生一種邊緣增強感覺——側抑制效應。

4)影象的邊緣資訊對視覺很重要,特別是邊緣的位置資訊。

5)人眼的視覺掩蓋效應使一種區域性效應,受背景照度,紋理複雜性和訊號頻率的影響。具有不同區域性特性的區域,在保證不被人眼察覺的前提下,允許改變的訊號強度不同。人眼的視覺特性是一個多通道模型。

總結來說就是,人眼對明顯的特徵最敏感,人眼解析食物的時候,相當於用濾鏡掃過影象。

CNN正是利用了這樣的一種特性,來掃描並記錄圖片資訊。

首先生成一個濾鏡,並對影象整體進行掃描過濾,通過這個濾鏡filter解析,得到很多個掃描後的圖片分支結果。


(圖片來源https://en.wikipedia.org/wiki/Convolutional_neural_network#/media/File:Typical_cnn.png)

上圖中的convolutions 就是在進行影象疊加濾鏡掃描,得到一系列結果的工作。

接下來,在得到一系列卷積之後的結果後,我們進行特徵的提取,也就是上圖中的subsampling。


(圖片來源https://en.wikipedia.org/wiki/Convolutional_neural_network)

這裡有個max pool的概念,也就是提取每個小特徵當中,值最大的那個。(值越大說明特徵越明顯,越符合上文說的人眼特性)

通過不停的特徵抽取,得到最後的結果,如果這個結果與我們的預期不符,則計算誤差值,反饋給每一層的卷積網路,進行微調整,再重複上面的步驟。

CNN過程中,對於邊界值的處理。

第一種是在邊界之外填充0,以保證濾鏡可以像多次掃過中間值一樣的掃過邊界值。但是這樣做容易產生噪聲(後新增進去的值)。

第二種是邊界停止,即濾鏡邊緣觸碰到圖片邊界就認為這一側過濾結束。

RNN

RNN的假設——事物的發展是按照時間序列展開的,即前一刻發生的事物會對未來的事情的發展產生影響。

所以,在處理過程中,每一刻的輸出都是帶著之前輸出值加權之後的結果。


(圖片來源 http://d3kbpzbmcynnmx.cloudfront.net/wp-content/uploads/2015/09/rnn.jpg)

公式表示t時刻的輸出:

s_t=f(Ux_t + Ws_{t-1})

st為當前時刻的輸出,xt為當前時刻的輸入,U為當前時刻輸入值的加權計算,st-1為上一時刻的輸出,W為上一時刻輸出的權重。

通過這樣的計算方式,我們可以認為,當前的結果包含之前的結果,或者說受到之前結果的影響。

但是,RNN對於短期記憶的模型效果很好,卻無法進行長期記憶的輸出,因為權重累加過於龐大,可能導致結果失真、運算效率低下。

所以LSTM應運而生。


(圖片來源https://en.wikipedia.org/wiki/Long_short-term_memory#/media/File:Peephole_Long_Short-Term_Memory.svg)

整個單元內主要包含異或門和與門。

1 異或 1 = 0  認為是相同的資訊,捨棄

1 與 0 = 1  將不同的資訊疊加

通過這兩部運算就能減少我們的資料量,將重複資訊遺忘,將未知資訊記錄下來,將結果更新之後,再輸出。