如何理解用CNN替代RNN做影象處理?亞津衡器說生活2018-08-14 08:40:01

CNN:

1)卷積:對影象元素的矩陣變換,是提取影象特徵的方法,多種卷積核可以提取多種特徵。一個卷積核覆蓋的原始影象的範圍叫做感受野(權值共享)。一次卷積運算(哪怕是多個卷積核)提取的特徵往往是區域性的,難以提取出比較全域性的特徵,因此需要在一層卷積基礎上繼續做卷積計算,這也就是多層卷積。

2)池化:降維的方法,按照卷積計算得出的特徵向量維度大的驚人,不但會帶來非常大的計算量,而且容易出現過擬合,解決過擬合的辦法就是讓模型儘量“泛化”,也就是再“模糊”一點,那麼一種方法就是把影象中區域性區域的特徵做一個平滑壓縮處理,這源於區域性影象一些特徵的相似性(即區域性相關性原理)。

3) 全連線:softmax分類

4)訓練過程: 卷積核中的因子(×1或×0)其實就是需要學習的引數,也就是卷積核矩陣元素的值就是引數值。一個特徵如果有9個值,1000個特徵就有900個值,再加上多個層,需要學習的引數還是比較多的。

1、CNN的三個優點:

2、sparse interaction(稀疏的互動)

3、parameter sharing(引數共享)

4、equivalent respresentation(等價表示)。

5、適合於自動問答系統中的答案選擇模型的訓練。

CNN與DNN的區別: DNN的輸入是向量形式,並未考慮到平面的結構資訊,在影象和NLP領域這一結構資訊尤為重要,例如識別影象中的數字,同一數字與所在位置無關(換句話說任一位置的權重都應相同),CNN的輸入可以是tensor,例如二維矩陣,透過filter獲得區域性特徵,較好的保留了平面結構資訊。

filter尺寸計算: Feature Map的尺寸等於 (input_size + 2 * padding_size−filter_size)/stride+1

RNN

為什麼具有記憶功能? 這個是在RNN就解決的問題,就是因為有遞迴效應,上一時刻隱層的狀態參與到了這個時刻的計算過程中,直白一點呢的表述也就是選擇和決策參考了上一次的狀態。

為什麼LSTM記的時間長? 因為特意設計的結構中具有CEC的特點,誤差向上一個狀態傳遞時幾乎沒有衰減,所以權值調整的時候,對於很長時間之前的狀態帶來的影響和結尾狀態帶來的影響可以同時發揮作用,最後訓練出來的模型就具有較長時間範圍內的記憶功能。 誤差回傳的主力還是通過了Memory Cell而保持了下來。所以我們現在用的LSTM模型,依然有比較好的效果。 最後整個梳理一下誤差回傳的過程,誤差透過輸出層,分類器,隱層等進入某個時刻的Block之後,先將誤差傳遞給了Output Gate和Memory Cell兩個地方。 到達輸出門的誤差,用來更新了輸出門的引數w,到達Memory Cell之後,誤差經過兩個路徑, 1是透過這個cell向前一個時刻傳遞或者更前的時刻傳遞, 2是用來傳遞到input gate和block的輸入,用來更新了相應的權值(注意!不會經過這裡向前一個時刻傳遞誤差)。 最關鍵的問題就是,這個回傳的演算法,只通過中間的Memory Cell向更前的時刻傳遞誤差。 在RNN中U、V、W的引數都是共享的,也就是隻需要關注每一步都在做相同的事情,只是輸入不同,這樣來降低引數個數和計算量。

RNN特點: 時序長短可變(只要知道上一時刻的隱藏狀態ht−1ht−1與當前時刻的輸入xtxt,就可以計算當前時刻的隱藏狀態htht。並且由於計算所用到的WxhWxh與WhhWhh在任意時刻都是共享的。遞迴網路可以處理任意長度的時間序列)顧及時間依賴,未來資訊依賴(雙向遞迴)

RNN主要包括LSTM,GRU

GRU對LSTM做了兩個大改動:

將輸入門、遺忘門、輸出門變為兩個門: 更新門(Update Gate)和重置門(Reset Gate)。

將單元狀態與輸出合併為一個狀態: GRU只用了兩個gates,將LSTM中的輸入門和遺忘門合併成了更新門。並且並不把線性自更新建立在額外的memorycell上,而是直接線性累積建立在隱藏狀態上,並靠gates來調控。