卷積層得名於卷積運算,但卷積層中用到的並非卷積運算而是互相關運算。我們將核陣列上下翻轉、左右翻轉,再與輸入陣列做互相關運算,這一過程就是卷積運算。由於卷積層的核陣列是可學習的,所以使用互相關運算與使用卷積運算並無本質區別。
二維卷積層輸出的二維陣列可以看作是輸入在空間維度(寬和高)上某一級的表徵,也叫特徵圖(feature map)。影響元素 x 的前向計算的所有可能輸入區域(可能大於輸入的實際尺寸)叫做 x 的感受野(receptive field)。
以圖1為例,輸入中陰影部分的四個元素是輸出中陰影部分元素的感受野。我們將圖中形狀為 2×2 的輸出記為 y ,將 y 與另乙個形狀為 2×2 的核陣列做互相關運算,輸出單個元素 z 。那麼, z 在 y 上的感受野包括 y 的全部四個元素,在輸入上的感受野包括其中全部9個元素。可見,我們可以通過更深的卷積神經網路使特徵圖中單個元素的感受野變得更加廣闊,從而捕捉輸入上更大尺寸的特徵。
填充和步幅
我們介紹卷積層的兩個超引數,即填充和步幅,它們可以對給定形狀的輸入和卷積核改變輸出形狀。
填充填充(padding)是指在輸入高和寬的兩側填充元素(通常是0元素),圖2裡我們在原輸入高和寬的兩側分別新增了值為0的元素。
如果原輸入的高和寬是 nh 和 nw ,卷積核的高和寬是 kh 和 kw ,在高的兩側一共填充 ph 行,在寬的兩側一共填充 pw 列,則輸出形狀為:
(nh+ph−kh+1)×(nw+pw−kw+1)
我們在卷積神經網路中使用奇數高寬的核,比如 3×3 , 5×5 的卷積核,對於高度(或寬度)為大小為 2k+1 的核,令步幅為1,在高(或寬)兩側選擇大小為 k 的填充,便可保持輸入與輸出尺寸相同。
步幅在互相關運算中,卷積核在輸入陣列上滑動,每次滑動的行數與列數即是步幅(stride)。此前我們使用的步幅都是1,圖3展示了在高上步幅為3、在寬上步幅為2的二維互相關運算。
一般來說,當高上步幅為 sh ,寬上步幅為 sw 時,輸出形狀為:
⌊(nh+ph−kh+sh)/sh⌋×⌊(nw+pw−kw+sw)/sw⌋
如果 ph=kh−1 , pw=kw−1 ,那麼輸出形狀將簡化為 ⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋ 。更進一步,如果輸入的高和寬能分別被高和寬上的步幅整除,那麼輸出形狀將是 (nh/sh)×(nw/sw) 。
當 ph=pw=p 時,我們稱填充為 p ;當 sh=sw=s 時,我們稱步幅為 s 。
多輸入通道和多輸出通道
之前的輸入和輸出都是二維陣列,但真實資料的維度經常更高。例如,彩色影象在高和寬2個維度外還有rgb(紅、綠、藍)3個顏色通道。假設彩色影象的高和寬分別是 h 和 w (畫素),那麼它可以表示為乙個 3×h×w 的多維陣列,我們將大小為3的這一維稱為通道(channel)維。
多輸入通道
卷積層的輸入可以包含多個通道,圖4展示了乙個含2個輸入通道的二維互相關計算的例子。
假設輸入資料的通道數為 ci ,卷積核形狀為 kh×kw ,我們為每個輸入通道各分配乙個形狀為 kh×kw 的核陣列,將 ci 個互相關運算的二維輸出按通道相加,得到乙個二維陣列作為輸出。我們把 ci 個核陣列在通道維上鏈結,即得到乙個形狀為 ci×kh×kw 的卷積核。
多輸出通道
卷積層的輸出也可以包含多個通道,設卷積核輸入通道數和輸出通道數分別為 ci 和 co ,高和寬分別為 kh 和 kw 。如果希望得到含多個通道的輸出,我們可以為每個輸出通道分別建立形狀為 ci×kh×kw 的核陣列,將它們在輸出通道維上鏈結,卷積核的形狀即 co×ci×kh×kw 。
對於輸出通道的卷積核,我們提供這樣一種理解,乙個 ci×kh×kw 的核陣列可以提取某種區域性特徵,但是輸入可能具有相當豐富的特徵,我們需要有多個這樣的 ci×kh×kw 的核陣列,不同的核陣列提取的是不同的特徵。
1x1卷積層
最後討論形狀為 1×1 的卷積核,我們通常稱這樣的卷積運算為 1×1 卷積,稱包含這種卷積核的卷積層為 1×1 卷積層。圖5展示了使用輸入通道數為3、輸出通道數為2的 1×1 卷積核的互相關計算。
1×1 卷積核可在不改變高寬的情況下,調整通道數。 1×1 卷積核不識別高和寬維度上相鄰元素構成的模式,其主要計算發生在通道維上。假設我們將通道維當作特徵維,將高和寬維度上的元素當成資料樣本,那麼 1×1 卷積層的作用與全連線層等價。
卷積層與全連線層的對比
二維卷積層經常用於處理影象,與此前的全連線層相比,它主要有兩個優勢:
一是全連線層把影象展平成乙個向量,在輸入影象上相鄰的元素可能因為展平操作不再相鄰,網路難以捕捉區域性資訊。而卷積層的設計,天然地具有提取區域性資訊的能力。
二是卷積層的參數量更少。不考慮偏置的情況下,乙個形狀為 (ci,co,h,w) 的卷積核的參數量是 ci×co×h×w ,與輸入影象的寬高無關。假如乙個卷積層的輸入和輸出形狀分別是 (c1,h1,w1) 和 (c2,h2,w2) ,如果要用全連線層進行連線,引數數量就是 c1×c2×h1×w1×h2×w2 。使用卷積層可以以較少的引數數量來處理更大的影象。
通過增加相同的block來進行
其中block中為什麼進行多次相同的卷積呢
原因如下:
我們先看看小卷積和大卷積的區別:
3×3的小卷積為了與5×5的大卷積有相同大小的輸出和感受野,所以2個3×3的卷積才能代替1個5×5的卷積,怎麼理解呢?
假設影象大小為n×n,5×5卷積核輸出影象大小為(n-5+1)/1=n-4
第一次3×3卷積核輸出影象大小為(n-3+1)/1=n-2,第二次(n-2-3+1)/2=n-4
同理三個3×3的卷積才能代替乙個7×7的卷積,以此類推。 但是在相同的輸出和感受野下,3×3的小卷積有更多的好處:
1 . 網路層數增加,非線性啟用函式變多,增加了非線性表達能力,使得分割平面更具有可分性
2 . 引數變少,兩個3×3和乙個5×5的引數比例為3×3×2/(5×5)=0.72,同樣三個3×3×3/(7×7)=0.52,引數大大減少
3 . 能捕捉到各個方向的最小尺寸
深度學習 Caffe編譯測試的小總結
1.搭建的環境和 win7 64bit vs2013 cuda7.5 遇到的問題 遇到很多很多問題。如 1.check failed error cudasuccess 35 vs.0 cuda driver version is insufficient for cuda runtime vers...
深度學習 Caffe編譯測試的小總結
1.搭建的環境和 win7 64bit vs2013 cuda7.5 遇到的問題 遇到很多很多問題。如 1.check failed error cudasuccess 35 vs.0 cuda driver version is insufficient for cuda runtime vers...
深度學習學習總結
北京大學人工智慧實踐 tensorflow2.0 學習1 6章 複習1 4章 第4章需要寫乙個部落格 寫4,5,6章 吳恩達深度學習第四步 卷積神經網路 學習1 2周 複習1 2周 殘差網路和inception網路不太懂,目前用不到 三四周是目標定位,人臉識別,神經風格轉換目前用不到 油管最新最熱t...