參考網址:
https://www.zhihu.com/question/36686900/answer/130890492
https://www.cnblogs.com/skyfsm/p/6790245.html
池化層夾在連續的卷積層中間, 用於壓縮數據和參數的量,減小過擬合。
簡而言之,如果輸入是圖像的話,那么池化層的最主要作用就是壓縮圖像。
下采樣層也叫池化層,其具體操作與卷積層的操作基本相同,只不過下采樣的卷積核為只取對應位置的最大值、平均值等(最大池化、平均池化),即矩陣之間的運算規律不一樣,並且不經過反向傳播的修改。
池化層的作用:
個人覺得主要是兩個作用:
1. invariance(不變性),這種不變性包括translation(平移),rotation(旋轉),scale(尺度)
2. 保留主要的特征同時減少參數(降維,效果類似PCA)和計算量,防止過擬合,提高模型泛化能力
A: 特征不變性,也就是我們在圖像處理中經常提到的特征的尺度不變性,池化操作就是圖像的resize,平時一張狗的圖像被縮小了一倍我們還能認出這是一張狗的照片,這說明這張圖像中仍保留着狗最重要的特征,我們一看就能判斷圖像中畫的是一只狗,圖像壓縮時去掉的信息只是一些無關緊要的信息,而留下的信息則是具有尺度不變性的特征,是最能表達圖像的特征。
B. 特征降維,我們知道一幅圖像含有的信息是很大的,特征也很多,但是有些信息對於我們做圖像任務時沒有太多用途或者有重復,我們可以把這類冗余信息去除,把最重要的特征抽取出來,這也是池化操作的一大作用
(1) translation invariance:
這里舉一個直觀的例子(數字識別),假設有一個16x16的圖片,里面有個數字1,我們需要識別出來,這個數字1可能寫的偏左一點(圖1),這個數字1可能偏右一點(圖2),圖1到圖2相當於向右平移了一個單位,但是圖1和圖2經過max pooling之后它們都變成了相同的8x8特征矩陣,主要的特征我們捕獲到了,同時又將問題的規模從16x16降到了8x8,而且具有平移不變性的特點。圖中的a(或b)表示,在原始圖片中的這些a(或b)位置,最終都會映射到相同的位置。
(2) rotation invariance:
下圖表示漢字“一”的識別,第一張相對於x軸有傾斜角,第二張是平行於x軸,兩張圖片相當於做了旋轉,經過多次max pooling后具有相同的特征
池化層用的方法有Max pooling 和 average pooling,而實際用的較多的是Max pooling。這里就說一下Max pooling,其實思想非常簡單。
對於每個2*2的窗口選出最大的數作為輸出矩陣的相應元素的值,比如輸入矩陣第一個2*2窗口中最大的數是6,那么輸出矩陣的第一個元素就是6,如此類推。