哪位高手能解釋一下卷積神經網路的卷積核?
剛學CNN,關於卷積核的概念不是很懂,比如A是原始的圖像矩陣,B是filter,我看很多人都是將A與B的對應元素相乘求和了,但是卷積不是要旋轉B嗎?那通常大家稱呼的卷積核是B呢還是B的旋轉呢?
對於這個問題,我的理解是,如果正規說起卷積操作,確實要把卷積核旋轉180度才算是真正的卷積。但是在CNN網路中,貌似沒有進行旋轉操作的,原因是這個卷積核只不過是一個特徵提取器,說白了就是最後經過學習得到的權重參數,是否旋轉無關大礙。正常來講,對應到數字信號處理領域,CNN中的這個操作應該稱之為「相關」,由於數字信號處理中的卷積對應著一些有關於時序問題(具體有點忘了,但應該是這樣的),因此需要翻轉,但是這裡只是借用了這一加權疊加的概念,所以也就無所謂了。一點淺見,希望大牛指正!
剛寫完相關的文章,轉載一部分過來。
來自自己的專欄:當我們在談論數據挖掘 - 知乎專欄
Convolution Kernel
卷積
說起 Convolution Kernel,首先需要說明一下卷積。一般我們我們接觸過的都是一維信號的卷積,也就是
在信號處理中, 是輸入信號, 是單位響應。於是輸出信號 就是輸入信號 的延遲響應的疊加。這也就是一維卷積本質:加權疊加/積分。
那麼對於二維信號,比如圖像,卷積的公式就是
假設現在 Convolution Kernel 大小是 ,我們就可以化簡上式為
看公式不太容易明白,我們畫個圖看看,假如 Convolution Kernel 如下圖
那麼,從 Input Image 到 Output Image 的變化如下
可以看出,其實二維卷積一樣也是加權疊加/積分。需要注意的是,其中 Convolution Kernel 進行了水平和豎直方向的翻轉。
Convolution Kernel 的意義
Convolution Kernel 其實在圖像處理中並不是新事物,Sobel 運算元等一系列濾波運算元,一直都在被用於邊緣檢測等工作中,只是以前被稱為 Filter。做圖像處理的同學應該有印象。
Convolution Kernel 具有的一個屬性就是局部性。即它只關注局部特徵,局部的程度取決於 Convolution Kernel 的大小。比如用 Sobel 運算元進行邊緣檢測,本質就是比較圖像鄰近像素的相似性。
也可以從另外一個角度理解 Convolution Kernel 的意義。學過信號處理的同學應該記得,時域卷積對應頻域相乘。所以原圖像與 Convolution Kernel 的卷積,其實是對頻域信息進行選擇。比如,圖像中的邊緣和輪廓屬於是高頻信息,圖像中某區域強度的綜合考量屬於低頻信息。在傳統圖像處理里,這是指導設計 Convolution Kernel 的一個重要方面。
CNN 的 Convolution Kernel
CNN 中的 Convolution Kernel 跟傳統的 Convolution Kernel 本質沒有什麼不同。仍然以圖像為例,Convolution Kernel 依次與 Input 不同位置的圖像塊做卷積,得到 Output,如下圖。
同時,CNN 有一些它獨特的地方,比如各種定義:
- CNN 可以看作是 DNN 的一種簡化形式,即這裡 Convolution Kernel 中的每一個權值就可以看成是 DNN 中的 ,且與 DNN 一樣,會多一個參數 Bias
- 一個 Convolution Kernel 在與 Input 不同區域做卷積時,它的參數是固定不變的。放在 DNN 的框架中理解,就是對同一層 Layer 中的神經元而言,它們的 和 是相同的,只是所連接的節點在改變。因此在 CNN 里,這叫做 Shared Weights and Biases
- 在 CNN 中,Convolution Kernel 可能是高維的。假如輸入是 維的,那麼一般 Convolution Kernel 就會選擇為 維,也就是與輸入的 Depth 一致
- 最重要的一點,在 CNN 中,Convolution Kernel 的權值不需要提前設計,而是跟 DNN 一樣利用 GD 來優化,我們只需要初始化
- 如上面所說,其實 Convolution Kernel 卷積後得到的會是原圖的某些特徵(如邊緣信息),所以在 CNN 中,Convolution Kernel 卷積得到的 Layer 稱作 Feature Map
- 一般 CNN 中兩層之間會含有多個 Convolution Kernel,目的是學習出 Input 的不同特徵,對應得到多個 Feature Map。又由於 Convolution Kernel 中的參數是通過 GD 優化得到而非我們設定的,於是初始化就顯得格外重要了
對 CNN 還有想要更多了解的可以參考原專欄文章:
當我們在談論 Deep Learning:CNN 其常見架構(上)我認為這個問題是因為這裡的應用情景與我們之前學的不一樣。(假設你懂一點點信號處理)本科學過的是標準的信號卷積,(我舉個不恰當的例子)其含義為信號延時的疊加,舉個例子的話,加入有個信號是1 2 3 4 5 6,但是這個信號經過多徑影響,會疊加多次,我們將前後補0,比如是 0 0 0 0 1 2 3 4 5 6 0 0 0 0,「第一個徑」由於反射次數最少,最先傳回來,所以強度也高,我們將其強度定義為1,第二個徑反射次數多,回來的慢,強度有低,所以就是0 0 0 0 0 1 2 3 4 5 6 0 0 0,強度假設為0.9,那麼你收到的信號是發射時是同一個信號,接收時是疊加後的信號,我們簡單描述一下疊加的情形0 0 0 0 1 2 3 4 5 6 0 0 0 00 0 0 0 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 0 0
0 0 0 0 0 0 0 1 2 3 4 5 6 0
...............↑接收到的四個信號的強度分別是1 0.9 0.8 0.7,那麼你如何計算最終收到的信號?就是(0 0 0 0 1 2 3 4 5 6 0 0 0 0)卷積(1 0.9 0.8 0.7)假設你要計算第六個位置的信號強度(我在上面用箭頭指示了一下),很明顯應該是0*0.7+0*0.8+1*0.9+2*1,這個過程總結成低智商的規律,就是把(1 0.9 0.8 0.7)翻轉,在找對位置和源信號相乘。這個規律在很多地方都有講的。怎樣通俗易懂地解釋卷積? - 數學 - 知乎--------------------------------------------------------然後再說圖像的。圖像卷積的目的是比對兩幅圖像是否相同。最簡單的方法是求均方差,就是兩幅圖像相減,平方,再求和。假設我們有三幅圖像,大小均為2*2,看後兩幅哪個跟前一個更相似,其像素為1 20 | 2 20 45 870 5 | 0 5 78 3第一幅圖跟第二幅圖相差 sqrt(((1-2)^2+(20-20)^2+(0-0)^2+(5-5)^2))/4=0.25,第一幅圖跟第三幅圖也是同理。我們處理圖像常用的過程是在一幅較大的圖像中搜索一個目標,我們使用的方法中最基礎的就是這個均方差,再舉例子,有個小的目標圖和大的搜索範圍圖5 6
11 12----1 2 3 4 5 67 8 9 10 11 1213 14 15 16 17 18那麼我們用什麼辦法搜索呢?就是掃窗法,原圖的(5 6 11 12)和(1 2 7 8)比對,(5 6 11 12)和(2 3 8 9)比對,原圖的(5 6 11 12)和(3 4 9 10)比對(原諒我橫著寫了。。)。很明顯,在這種應用情景下,確實也大致符合卷積的概念,但是不需要翻轉了,翻轉了反而導致不夠直觀。------------------那麼假如強行套用卷積的概念,翻轉後再相乘會怎麼樣?比如你要在一個有一堆公式的截圖中搜索出數字3所在的位置,那麼你看到的你的濾波器就是ε(意會),這樣做沒這個必要。。。。。------------------再想一下為什麼會有這個區別?原來的卷積應用情形是信號的疊加,描述方式是先說第一個信號的強度。現在的情形是圖像信號的提取,不是一個東西。假如說我改成原來信號的提取,就是在(0 0 0 0 1 2 3 4 5 6 0 0 0 0)中找出信號(3 4 5)所在的位置,用的辦法肯定是不用翻轉的這種卷積。假如我在(0 0 0 0 1 2 3 4 5 6 0 0 0 0)中找出信號(1 0.9 0.8 0.7)所在的位置,用的辦法肯定還是現在的這種不用翻轉的卷積。只不過最終肯定是找不出來這個信號罷了是B喲,而不是flipped B(雖然也可以),但在dl里大家都是用B,在signal.processing之類的,會進行flipping operation是因為需要保持associativity的property (A*B)*C=A*(B*C),而在CNN中不需要這個所以就不需要flipping啦
好啦,要睡午覺了,=_=困
其實就是濾波
推薦閱讀:
※如何作用和理解神經網路在電力電子方向的運用?
※神經網路中的退火是什麼概念?
※人工智慧深度學習的不斷發展對地質學這樣的經驗學科的影響會有多少??
※為什麼神經網路在考慮梯度下降的時候,網路參數的初始值不能設定為全0,而是要採用隨機初始化思想?