如何理解卷積神經網路中的權值共享?


你眼睛真實看到的圖像其實是上圖的下半部分。而後經過大腦的層層映射後才出現了你腦中所「看見」的圖像。CNN的卷積層部分可以理解成是學習你的「眼球結構」。

同一個filter內部的權重是相同的,因為它用一個「抓取方式」去偵測特徵。比如說「邊緣偵測」。 你也注意到了,我們的眼睛不只觀看一次,等到掃描完該特徵後,另一個filter可以改變「抓取方式」去偵測另一個特徵。所權重在同一個filter內是共享的理解是

該filter對整個圖片進行了某個特徵的掃描。

提取若干個特徵後,就可以靠這些特徵來判斷圖片是什麼了。


所謂的權值共享就是說,給一張輸入圖片,用一個filter去掃這張圖,filter裡面的數就叫權重,這張圖每個位置是被同樣的filter掃的,所以權重是一樣的,也就是共享

這麼說可能還不太明白,如果你能理解什麼叫全連接神經網路的話,那麼從一個盡量減少參數個數的角度去理解就可以了。

對於一張輸入圖片,大小為W*H,如果使用全連接網路,生成一張X*Y的feature map,需要W*H*X*Y個參數,如果原圖長寬是10^2級別的,而且XY大小和WH差不多的話,那麼這樣一層網路需要的參數個數是10^8~10^12級別。

這麼多參數肯定是不行的,那麼我們就想辦法減少參數的個數對於輸出層feature map上的每一個像素,他與原圖片的每一個像素都有連接,每一個鏈接都需要一個參數。但注意到圖像一般都是局部相關的,那麼如果輸出層的每一個像素只和輸入層圖片的一個局部相連,那麼需要參數的個數就會大大減少。假設輸出層每個像素只與輸入圖片上F*F的一個小方塊有連接,也就是說輸出層的這個像素值,只是通過原圖的這個F*F的小方形中的像素值計算而來,那麼對於輸出層的每個像素,需要的參數個數就從原來的W*H減小到了F*F。如果對於原圖片的每一個F*F的方框都需要計算這樣一個輸出值,那麼需要的參數只是W*H*F*F,如果原圖長寬是10^2級別,而F在10以內的話,那麼需要的參數的個數只有10^5~10^6級別,相比於原來的10^8~10^12小了很多很多。

這還不夠。圖片還有另外一個特性:圖片的底層特徵是與特徵在圖片中的位置無關的。比如說邊緣,無論是在圖片中間的邊緣特徵,還是在圖片邊角處的邊緣特徵,都可以用過類似於微分的特稱提取器提取。那麼對於主要用於提取底層特稱的前幾層網路,把上述局部全連接層中每一個F*F方形對應的權值共享,就可以進一步減少網路中參數的個數。也就是說,輸出層的每一個像素,是由輸入層對應位置的F*F的局部圖片,與相同的一組F*F的參數(或稱權值)做內積,再經過非線性單元計算而來的。這樣的話無論圖片原大小如何,只用F*F個參數就夠了,也就是幾個幾十個的樣子。當然一組F*F的參數只能得到一張feature map,一般會有多組參數,分別經過卷積後就可以有好幾層feature map。

順帶一提,高級特徵一般是與位置有關的,比如一張人臉圖片,眼睛和嘴位置不同,那麼處理到高層,不同位置就需要用不同的神經網路權重,這時候卷積層就不能勝任了,就需要用局部全連接層和全連接層。

網上找的一張圖,示意了局部連接,每一個W只與輸入的一部分連接,如果W1和W2是相同的,那麼就是卷積層,這時參數W1和W2相同,因此說共享


簡單從共享的角度來說:權重共享即filter的值共享

  • input是一維的情況,輸入W = 5,padding = 1

此時的filter是 1 0 -1 最右上角圖,即F = 3左邊stride=1,右邊stride = 2。整個濾波(卷積)的過程中filter從input最左端滑到最右端,值一直保持不變

更明顯的一張圖

filter由固定的紅色、紫色、綠色三種值組成。前一層(白色圓)總是通過相同的filter值得到上一層

  • input是三維的情況,size:W1*H1*D1

此時,每個filter需要F*F*D1個權重值,總共K個filter,需要F*F*D1*K權重值。和一維一樣,整個滑動過程中filter W0和W1值保持不變,可稱作權值共享。而且,補充一句,對於三維的input,權值只是在input的每個depth slice上共享的,詳細可以參考CS231n Convolutional Neural Networks for Visual Recognition的parameter sharing標題下內容

圖片出自 CS231n Convolutional Neural Networks for Visual Recognition(侵刪)


As stated earlier, all the units in a feature map share the same set of 25 weights and the same bias so they detect the same feature at all possible locations on the input.

Gradient-Based Learning Applied to Document Recognition里的原文, 簡單來說,每種(個)filter學習一種feature,同一種filter權值當然是共享,所以就每個卷積層需要很多種filter,也就是depth來學習很多種不同的特徵.

有機會的話可以多讀一下這類經典論文,網上很多教程都不會講到這些原理性的東西.大神的論文講問題還是非常透徹的,往往比二手的要好.


權值共享意味著每一個過濾器在遍歷整個圖像的時候,過濾器的參數(即過濾器的參數的值)是固定不變的,比如我有3個特徵過濾器,每個過濾器都會掃描整個圖像,在掃描的過程中,過濾器的參數值是固定不變的,即整個圖像的所有元素都「共享」了相同的權值。

另外,換個角度理解為什麼權值要固定,比如我有個曲線的特徵過濾器,那麼這個過濾器在掃描全圖的時候,我們想要提取出所有的曲線區域,是不是這個過率器不能變?如果在上半部分過濾器是曲線,到下半部分變成了直線,那麼在圖像上下區域內提取出來的曲線特徵是真正的曲線嗎?個人認為從這個直白的角度更容易理解。


其實啊,卷積核就是個模板,來看圖片上那一塊像不像這個模版。

前面的層模板很簡單,一些邊緣啊,結構啊,顏色啊什麼的。後面的模板是前面模板的非線性組合,所以越到後面模板越有意義,越抽象。舉個例子,前面層有一個模板是「圓形」,有一個是「《」這樣的尖角,還有一個是「》」這樣的尖角。下一層模板是左邊有一個尖角,右邊有一個尖角,中間是圓形。這樣,後一層模板就對眼睛這樣的《o》的圖中的一塊感興趣,這樣就組合成了一個眼睛檢測器。(這樣大概理解一下)

權值共享在直觀上很符合處理圖像的邏輯,然後是減少了參數。


權值共享是指用相同的filter去掃一遍圖像,相當於提一次特徵,得到一個feature map,為什麼用filter是因為假設圖像具有局部相關性,即一個pixel和周圍離的近的pixels的相關性大,遠的pixels相關性小


卷積核、濾波,這些都是傳統圖像處理就有的概念,它兩是一個意思。假如有一張輸入圖像,先假定它是單通道的灰度圖像,現在有一個[3 × 3]的卷積核,卷積核權重假如是[1,0,1;0,1,0;0,0,1]。我現在從左到右,從上到下,用這個卷積核在輸入圖像上滑動,每到一處,都是用同樣的權重(如上),對圖像進行濾波,得到一個特徵圖。這就是所謂的權值共享,依次再推廣到多通道多卷積核的情況。

多提一點,卷積究竟有什麼作用呢?效果是什麼呢?我覺得可以多了解了解傳統的圖像處理理論,尤其是那本岡薩雷斯的《數字圖像處理》。當然還有那篇著名的講卷積可視化的paper。

手機碼字原來真的不容易。


卷積可以認為是在進行濾波,只是這裡的卷積核中的參數是通過訓練得到的。可以類別圖像的中的濾波器,那個時候的運算元是人為設定的。所謂權值共享,共享的就是卷積核,一旦訓練完成,這個核也就確定了。

參考博客:一張圖理解卷積層的參數共享 - ture_dream的博客 - CSDN博客


我的理解是,從圖像角度出發,所謂的權重共享就是固定核濾波。比如,我用[-1 0 1]這個濾波核去對圖像進行濾波,在濾波過程中,我的濾波核是不變的[-1 0 1].這就是所謂的權重共享。


有限的濾波器模板(權重模式)、有限的鏈接總量

而不是巨量神經元之間的巨量鏈接權重


一個點是先驗的認為圖像每個像素只和周圍的像素強相關~


推薦閱讀:

ICML 2016上哪些論文值得關注?
如何比較Keras, TensorLayer, TFLearn ?
寫一個像Keras的深度學習框架需要學習哪些知識?
對於一個可以窮舉的問題,比如五子棋,深度學習得到的模型和窮舉的演算法有啥異同?

TAG:深度學習DeepLearning | 卷積神經網路CNN |