徐海蛟教學
卷積
卷積就是對矩陣(圖像)應用的滑動窗口函數。
圖中綠色爲一個二值圖像,每個值代表一個像素(0是黑,1是白)。(更典型的是像素值爲0-255的灰階圖像)
圖中黃色的滑動窗口叫卷積核、過濾器或者特徵檢測器,也是一個矩陣。
我們將這個大小是3x3的過濾器中的每個元素(紅色小字)與圖像中對應位置的值相乘,然後對它們求和,得到右邊粉紅色特徵圖矩陣的第一個元素值。
我們在整個圖像矩陣上滑動這個過濾器來得到完整的卷積特徵圖:
Convolution_schematic.gif
直覺理解
對每個像素點,與它的周邊像素一起平均得到模糊效果。
模糊效果的卷積核
(1就相當於權重,新像素點包含對應像素點與其周邊像素點的綜合信息,“人人有份”)應用該卷積核模糊後的圖像
取一個像素與它周邊像素的差值來檢測邊緣
檢測邊緣的卷積核
(如果圖像某區域是平滑的,那麼中心點像素值應該與四周的像素都差不多相等,卷積後得到的就是0,即黑色。如果這裏有銳邊、顏色的突變,就會得到一個很大的差異和卷積後相應的非零值,對應下圖的白色)應用該卷積核檢測邊緣後的圖像
卷積的其它資料
補零
如何對圖片矩陣的第一個元素(它在頂部和左邊並沒有相鄰的元素)應用過濾器?
我們可以採用零填充,在對第一個元素應用過濾器時落在矩陣之外的所有元素都取爲零。
這樣就可以獲得更大或者相同大小的輸出了。輸出尺寸的大小計算公式爲:
n_{out} = n_{in}+2*n_{padding}-n_{filter}+1
以第一張圖爲例,它的輸入尺寸爲5x5,沒有補零,過濾器尺寸爲3x3,輸出尺寸就是(5-3+1)x(5-3+1)即3x3的尺寸。
池化層
英文名pooling (subsampling) layer
典型的,池化層通常在卷積層之後應用。
最常見的方式是對過濾器的結果取最大值。
如下是一個2x2的最大池化窗口,取出4箇中最大的。最大池化
池化有一般池化(非重疊池化)、重疊池化、空金字塔池化,上圖爲一般池化。
池化可以減少輸出維數,同時一定程度上保持了最突出的信息。
池化可以提供基本的平移、旋轉不變性。最大化操作會提取出相同的值而不管你是否有一定程度內的平移或旋轉。
池化可以提供一個固定大小的輸出矩陣。如果你有1000個過濾器,然後你對每一個的結果應用最大池化,不論你過濾器的尺寸和輸入的尺寸是多少,你會得到1000維的輸出。這意味着我們可以使用可變大小的輸入和可變大小的過濾器,並且總可以得到相同尺寸的輸出,來饋入分類器。
其它參考
過濾器的值
在訓練階段,一個卷積神經網絡會基於你要執行的任務,自動學習它的過濾器的值,實現相應的變換。
比如說,一個處理圖像分類任務的卷積神經網絡會學習到在第一層從原始像素中檢測邊緣,然後在第二層使用這些邊緣來檢測出簡單的形狀,之後在更高的層次使用這些形狀來發現更高級別的特徵,比如臉部特徵。最後一層則是一個使用這些高級特徵的分類器。
多層卷積自學習
多通道
很多時候,我們輸入的是多通道圖像。如RGB三通道圖像,下圖就是。也有可能我們出於特定目的,將幾張圖組成一組一次性輸入處理。
對於這種情況,這時一個過濾器或卷積核其實對應的是x個卷積核(對應x通道)和一個偏置量,如下圖中的
W0
和W1
。一個通道中的某個區域(藍框)和它對應的卷積核(紅框)做卷積,多個通道的卷積結果線性相加,再加上偏置量(最下的單個紅框),得到卷積結果(最右列中心的綠色框)。下圖的卷積層包含2個多通道卷積核W0
和W1
,所以結果爲2個綠色矩陣。而該卷積層的輸出對於下一卷積層一定程度上也就可以說是2通道,處理方式也是類似。
多通道
常用激活函數
ReLU —— f(x) = max(0, x) | -oo<x<+oo
藍色爲原函數,綠色爲平滑後的
Tanh —— 雙曲正切
雙曲正切