啥是卷積核?動畫演示
共 4815字,需瀏覽 10分鐘
·
2024-07-12 11:29
在機器學習篇章中,我們簡單介紹了卷積核,今天,我們借助知乎的一篇文章,梳理一下對卷積核一些基本情況。
什么是卷積核
在數(shù)學上,卷積核的標準定義是兩個函數(shù)在反轉和移位后的乘積的積分:
其中,函數(shù)g一般稱為過濾器(filters),函數(shù)f指的是信號/圖像。在卷積神經(jīng)網(wǎng)絡里,卷積核其實就是一個過濾器,但在深度學習里,它不做反轉,而是直接執(zhí)行逐元素的乘法和加法,我們把這個又稱為互相關,在深度學習里稱為卷積。
那為什么在圖像處理上,需要進行卷積處理呢。實際上是借鑒于科學家的研究結果——上個世紀科學家就發(fā)現(xiàn),視覺皮層的很多神經(jīng)元都有一個小的局部感受野,神經(jīng)元只對有限區(qū)域的感受野上的刺激物做出反應。不同的感受野可以重疊,他們共同鋪滿整個視野。并且發(fā)現(xiàn),一些神經(jīng)元僅僅對橫線有反應,有一些神經(jīng)元對其他方向的線條有反應,有些神經(jīng)元的感受野比較大。因此,高級別的神經(jīng)元的刺激是源于相鄰低級別神經(jīng)元的反應。
利用這個觀點,經(jīng)過不斷的努力,逐漸發(fā)展成了現(xiàn)在的卷積神經(jīng)網(wǎng)絡。通過卷積核提取圖像的局部特征,生成一個個神經(jīng)元,再經(jīng)過深層的連接,就構建出了卷積神經(jīng)網(wǎng)絡。
我們已經(jīng)知道,一個卷積核一般包括核大小(Kernel Size)、步長(Stride)以及填充步數(shù)(Padding),我們逐一解釋下。
卷積核大小:卷積核定義了卷積的大小范圍,在網(wǎng)絡中代表感受野的大小,二維卷積核最常見的就是 3*3 的卷積核。一般情況下,卷積核越大,感受野越大,看到的圖片信息越多,所獲得的全局特征越好。但大的卷積核會導致計算量的暴增,計算性能也會降低。
步長:卷積核的步長代表提取的精度, 步長定義了當卷積核在圖像上面進行卷積操作的時候,每次卷積跨越的長度。對于size為2的卷積核,如果step為1,那么相鄰步感受野之間就會有重復區(qū)域;如果step為2,那么相鄰感受野不會重復,也不會有覆蓋不到的地方;如果step為3,那么相鄰步感受野之間會有一道大小為1顆像素的縫隙,從某種程度來說,這樣就遺漏了原圖的信息。
填充:卷積核與圖像尺寸不匹配,會造成了卷積后的圖片和卷積前的圖片尺寸不一致,為了避免這種情況,需要先對原始圖片做邊界填充處理。
卷積的通道形式
所謂的通道數(shù),可以理解為有多少張二維矩陣圖。
單通道形式
對于具有1個通道的圖像,下圖演示了卷積的運算形式:
這里的filter是一個3*3矩陣,步長是1,填充為0。filter在輸入數(shù)據(jù)中滑動。在每個位置,它都在進行逐元素的乘法和加法。每個滑動位置以一個數(shù)字結尾,最終輸出為3 x 3矩陣。
多通道形式
多通道也很容易理解,最典型的就是處理彩色圖片,一般有三個通道(RGB):
實際上,一個filter也可以包含多個矩陣,也即kernels,比如一個包含三個kernels的filter,對于輸入是三個通道的圖像:
這里輸入層是一個5 x 5 x 3矩陣,有3個通道,filters是3 x 3 x 3矩陣。首先,filters中的每個kernels分別應用于輸入層中的三個通道,執(zhí)行三次卷積,產(chǎn)生3個尺寸為3×3的通道。
然后,將這三個通道相加(逐個元素相加)以形成一個單個通道(3 x 3 x 1),該通道是使用filters(3 x 3 x 3矩陣)對輸入層(5 x 5 x 3矩陣)進行卷積的結果:
由此,我們引出卷積核的另外一個參數(shù)——輸入輸出通道數(shù)。
輸入和輸出通道數(shù):卷積核的輸入通道數(shù)由輸入矩陣的通道數(shù)所決定(輸入深度);輸出矩陣的通道數(shù)由卷積核的輸出通道數(shù)(卷積層深度,即多少個filters)所決定。
2D卷積與3D卷積
上面的多通道過程解釋的詳細點:
假設輸入層有 Din 個通道,而想讓輸出層的通道數(shù)量變成 Dout,我們需要做的僅僅是將 Dout個filters應用到輸入層中。每一個filters都有Din個卷積核,都提供一個輸出通道。在應用Dout個filters后,Dout個通道可以共同組成一個輸出層。
我們把上面的卷積過程稱為2D-卷積——通過使用Dout個filters,將深度為Din的層映射為另一個深度為Dout的層。
進一步,我們給出2D-卷積的公式:
特別的,對于卷積核,如果w=h=1,那么就退化為1*1卷積核,它具有以下三個優(yōu)點:
降維以實現(xiàn)高效計算
高效的低維嵌入特征池
卷積后再次應用非線性
下圖是一個例子:
在一個維度為 H x W x D 的輸入層上經(jīng)過大小為 1 x 1 x D 的filters的 1 x 1 卷積,輸出通道的維度為 H x W x 1。如果我們執(zhí)行 N 次這樣的 1 x 1 卷積,然后將這些結果結合起來,我們能得到一個維度為 H x W x N 的輸出層。
通過將2D-卷積的推廣,在3D-卷積定義為filters的深度小于輸入層的深度(即卷積核的個數(shù)小于輸入層通道數(shù))
因此,3D-filters需要在三個維度上滑動(輸入層的長、寬、高)。在filters上滑動的每個位置執(zhí)行一次卷積操作,得到一個數(shù)值。當filters滑過整個3D空間,輸出的結構也是3D的:
2D-卷積和3D-卷積的主要區(qū)別為filters滑動的空間維度,3D-卷積的優(yōu)勢在于描述3D空間中的對象關系,它的計算過程是:
卷積核的種類
除了普通的卷積操作外,也有一些變種,本文我們先介紹概念,對于每一種卷積的作用,我們會再出文章介紹。
轉置卷積(反卷積)
一般正常卷積稱為下采樣,相反方向的轉換稱為上采樣。轉置卷積是相對正常卷積的相反操作,但它只恢復尺寸,因為卷積是一個不可逆操作。下面通過一個例子來說明轉置卷積的具體操作過程。
假設一個3*3的卷積核,其輸入矩陣是4*4的形狀,經(jīng)過步長為1,填充為0的卷積結果為:
轉置卷積過程為,第一步,將卷積核矩陣重新排列為4*16形狀:
第二步,將卷積結果重新排列為1維行向量:
第三步,將重排矩陣轉置后與行向量轉置后相乘,得到16個元素的1維列向量:
第四步,對列向量進行重排為4*4的矩陣,得到最終結果:
這樣就通過轉置卷積將2x2的矩陣反卷為一個4x4的矩陣,但從結果也可以看出反卷積的結果與原始輸入信號不同。只是保留了位置信息,以及得到了想要的形狀。
空洞卷積(擴張卷積)
空洞卷積也叫擴張卷積,指的是在正常的卷積核的點之間插入空洞。它是相對正常的離散卷積而言的,對于步長為2,填充為1的正常卷積如下圖:
插入空洞后,卷積過程變?yōu)椋?/span>
空洞卷積通過空洞率(dilation_rate)控制,上圖是空洞率為2的情況。
可分離卷積
可分離卷積分為空間可分離卷積和深度可分離卷積。
空間可分離卷積有個前提條件,就是卷積核可以表示為兩個向量的乘積:
這樣,3x1的kennel首先與圖像進行卷積,然后應用1x3的kennel。在執(zhí)行相同操作時,可以減少參數(shù)數(shù)量。所以,空間可分離卷積節(jié)省了成本,但是一般不使用它做訓練,而深度可分離卷積是更常見的形式。
深度可分離卷積包括兩個步驟:深度卷積和1*1卷積.下面是一個深度可分離卷積的例子:
對于形狀是7*7*3的輸入層,有3個通道。
第一步在輸入層上應用深度卷積。我們在2D-卷積中分別使用 3 個卷積核(每個filter的大小為3*3*1),每個卷積核僅對輸入層的 1 個通道做卷積,這樣的卷積每次都得到大小為5*5*1 的映射,之后再將這些映射堆疊在一起創(chuàng)建一個 5*5*3 的特征圖:
第二步進行擴大深度。我們用大小為1*1*3的卷積核做1x1卷積。每個卷積核對5*5*3輸入圖像做卷積后都得到一個大小為5*5*1的特征圖,重復做128次1*1卷積,就得到了最終的結果:
從本質上說,深度可分離卷積就是3D卷積kernels的分解(在深度上的分解),而空間可分離卷積就是2D卷積kernels的分解(在WH上的分解)
分組卷積
分組卷積,顧名思義,filters被拆分為不同的組,每一個組都負責具有一定深度的傳統(tǒng) 2D 卷積的工作。
比如下面這張圖就展示了分組卷積的原理:
上圖表示的是被拆分為 2 個filters組的分組卷積。在每一組中,其深度僅為傳統(tǒng)2D-卷積的一半——Din/2,而每個filters組都包含Dout/2個filters。第一個filters組(紅色)對輸入層的前半部分做卷積([:,:,0:Din/2]),第二個filters組(藍色)對輸入層的后半部分做卷積([:,:,Din/2:Din])。最終,每個filters組都輸出了Dout/2個通道。整體上,兩個組輸出的通道數(shù)為Dout ,之后,我們再將這些通道堆疊到輸出層.
分組卷積有三個優(yōu)點:有效的訓練;模型參數(shù)隨著filters組數(shù)的增加而減少;可以提供比標準2D卷積更好的模型。
參考資料:
https://www.zhihu.com/question/30888762
https://www.jianshu.com/p/1c9fe3b4dc55
我“參加了”阿里巴巴全球數(shù)學競賽決賽,分享一下經(jīng)驗
搭建機器學習開發(fā)環(huán)境及Python基礎,108頁PDF
