卷積層
CNN中卷積層的作用:
CNN中的卷積層,在很多網路結構中會用conv來表示,也就是convolution的縮寫。
卷積層在CNN中扮演著很重要的角色——特徵的抽象和提取,這也是CNN區別於傳統的ANN或SVM的重要不同。
對於圖片而言,圖片是一個二維度資料,我們怎樣才能通過學習圖片正確的模式來對於一張圖片有正確的對於圖片分類呢。這個時候,有人就提出了一個觀點,我們可以這樣,對於所有的像素,全部都串連上一個權值,我們也分很多層,然後最後進行分類,這樣也可以,但是對於一張圖片來說,像素點太多,參數太多了。然後就有人提出來,我們只看一部分怎麼樣,就是對於一張圖片來說,我們只看一個小視窗就可以了,對於其他的地方,我們也提供類似的小視窗,我們知道,當我們對圖片進行卷積的時候,我們可以對圖片進行很多操作,比如說圖片整體模糊,或者是邊緣的提取,卷積操作對於圖片來說可以很好的提取到特徵,而且通過BP誤差的傳播,我們可以根據不同任務,得到對於這個任務最好的一個參數,學習出相對於這個任務的最好的卷積核,之所以權值共用的邏輯是:如果說一個卷積核在圖片的一小塊兒地區可以得到很好的特徵,那麼在其他的地方,也可以得到很好的特徵。
填充(Padding)
valid:也就是不填充。
same:在映像邊緣填充,使得輸入和輸出大小相同。
不採用padding的後果: 邊緣資訊採樣小 輸出映像變小
而paddding通常可以保證卷積過程中輸入和輸出的維度是一樣的。它還可以使映像邊緣附近的幀對輸出的貢獻和映像中心附近的幀一樣。
假設輸入的映像大小為:n*n,過濾器大小為f*f,填充的大小為p,步長為s;
那麼,輸出的大小為
①假設步長stride大小為1,並且沒有填充,則輸出為:
(n−f+1)∗(n−f+1) (n-f+1)*(n-f+1)
②假設步長stride大小為1,並且填充的大小為p,則輸出為:
(n+2p−f+1)∗(n+2p−f+1) (n+2p-f+1)*(n+2p-f+1)
根據以上公式可以看出,加入我們沒有填充的話,輸出的大小會小於輸入的大小,然而在實際中,我們往往希望,輸出的大小能夠與輸入的大小相同,於是,我們可以得到下面這個等式:
(n+2p−f+1)∗(n+2p−f+1)=n∗n (n+2p-f+1)*(n+2p-f+1)=n*n
解得:
p=f−12 p=\frac{f-1}{2}
由以上式子可知,當f為奇數時,填充的大小也隨之確定。也許你會問,難道過濾器的大小一定要為奇數嗎。理論上,f為偶數也是可以的。但是在實際工程應用中,f一般會取奇數(很多情況下取3),原因如下: 若為偶數,則有可能是不對稱填充,顯然我們不喜歡這樣的操作 奇數有中心像素點,便於我們定位過濾器的位置
步長(Stride)
③假設步長大小為s,並且填充的大小為p,則輸出為:
⌊n+2p−fs⌋+1 \biggl\lfloor\frac{n+2p-f}{s}\biggr\rfloor+1
需要注意的是,當結果不為整數時,我們一般採取下取整操作。
池化(Pooling):卷積層是對映像的一個鄰域進行卷積得到映像的鄰域特徵,池化層就是使用pooling技術將小鄰域內的特徵點整合得到新的特徵。
優點: 顯著減少參數數量 池化單元具有平移不變性
在實際中經常使用的是最大池化。
卷積神經網路減少參數的手段:
1)稀疏串連
一般認為人對外界的認知是從局部到全域的,而映像的空間聯絡也是局部的像素聯絡較為緊密,而距離較遠的像素相關性則較弱。因而,每個神經元其實沒有必要對全域映像進行感知,只需要對局部進行感知,然後在更高層將局部的資訊綜合起來就得到了全域的資訊。網路部分連通的思想,也是受啟發於生物學裡面的視覺系統結構。視覺皮層的神經元就是局部接受資訊的(即這些神經元只響應某些特定地區的刺激)。如下圖所示:左圖為全串連,右圖為稀疏串連。
在上右圖中,假如每個神經元只和10×10個像素值相連,那麼權值資料為1000000×100個參數,減少為原來的千分之一。而那10×10個像素值對應的10×10個參數,其實就相當於卷積操作。
2)參數共用
但其實這樣的話參數仍然過多,那麼就啟動第二級神器,即權值共用。在上面的局部串連中,每個神經元都對應100個參數,一共1000000個神經元,如果這1000000個神經元的100個參數都是相等的,那麼參數數目就變為100了。
怎麼理解權值共用呢。我們可以這100個參數(也就是卷積操作)看成是提取特徵的方式,該方式與位置無關。這其中隱含的原理則是:映像的一部分的統計特性與其他部分是一樣的。這也意味著我們在這一部分學習的特徵也能用在另一部分上,所以對於這個映像上的所有位置,我們都能使用同樣的學習特徵。
更直觀一些,當從一個大尺寸映像中隨機選取一小塊,比如說 8×8 作為樣本,並且從這個小塊樣本中學習到了一些特徵,這時我們可以把從這個 8×8 樣本中學習到的特徵作為探測器,應用到這個映像的任意地方中去。特別是,我們可以用從 8×8 樣本中所學習到的特徵跟原本的大尺寸映像作卷積,從而對這個大尺寸映像上的任一位置獲得一個不同特徵的啟用值。
如下圖所示,展示了一個33的卷積核在55的映像上做卷積的過程。每個卷積都是一種特徵提取方式,就像一個篩子,將映像中符合條件(啟用值越大越符合條件)的部分篩選出來。
參考文獻:
技術向:一文讀懂卷積神經網路CNN
卷積神經網路工作原理直觀的解釋。