Golbal Average Pooling 第一次出現(xiàn)在論文Network in Network中,后來又很多工作延續(xù)使用了GAP,實(shí)驗(yàn)證明:Global Average Pooling確實(shí)可以提高CNN效果。
Traditional Pooling Methods
要想真正的理解Global Average Pooling,首先要了解深度網(wǎng)絡(luò)中常見的pooling方式,以及全連接層。
眾所周知CNN網(wǎng)絡(luò)中常見結(jié)構(gòu)是:卷積、池化和激活。卷積層是CNN網(wǎng)絡(luò)的核心,激活函數(shù)幫助網(wǎng)絡(luò)獲得非線性特征,而池化的作用則體現(xiàn)在降采樣:保留顯著特征、降低特征維度,增大kernel的感受野。深度網(wǎng)絡(luò)越往后面越能捕捉到物體的語義信息,這種語義信息是建立在較大的感受野基礎(chǔ)上。已古人的例子來做解釋,想必大家都知道盲人摸象這個(gè)成語的來歷,每個(gè)盲人只能觸摸到大象的一部分,也就是只能獲得local response,基于這些local response,盲人們很難猜對(duì)他們到底在摸什么。即使是一個(gè)明眼人,眼睛緊貼這大象后背看,也很難猜到看的是什么。這個(gè)例子告訴我們局部信息很難提供更高層的語義信息,因此對(duì)feature map降維,進(jìn)而增大后面各層kernel的感受野是一件很重要的事情。另外一點(diǎn)值得注意:pooling也可以提供一些旋轉(zhuǎn)不變性。
Fully Connected layer
很長(zhǎng)一段時(shí)間以來,全連接網(wǎng)絡(luò)一直是CNN分類網(wǎng)絡(luò)的標(biāo)配結(jié)構(gòu)。一般在全連接后會(huì)有激活函數(shù)來做分類,假設(shè)這個(gè)激活函數(shù)是一個(gè)多分類softmax,那么全連接網(wǎng)絡(luò)的作用就是將最后一層卷積得到的feature map stretch成向量,對(duì)這個(gè)向量做乘法,最終降低其維度,然后輸入到softmax層中得到對(duì)應(yīng)的每個(gè)類別的得分。
全連接層如此的重要,以至于全連接層過多的參數(shù)重要到會(huì)造成過擬合,所以也會(huì)有一些方法專門用來解決過擬合,比如dropout。
Global Average Pooling
有了上面的基礎(chǔ),再來看看global average poolilng。既然全連接網(wǎng)絡(luò)可以使feature map的維度減少,進(jìn)而輸入到softmax,但是又會(huì)造成過擬合,是不是可以用pooling來代替全連接。
答案是肯定的,Network in Network工作使用GAP來取代了最后的全連接層,直接實(shí)現(xiàn)了降維,更重要的是極大地減少了網(wǎng)絡(luò)的參數(shù)(CNN網(wǎng)絡(luò)中占比最大的參數(shù)其實(shí)后面的全連接層)。Global average pooling的結(jié)構(gòu)如下圖所示:
每個(gè)講到全局池化的都會(huì)說GAP就是把a(bǔ)vg? pooling的窗口大小設(shè)置成feature map的大小,這雖然是正確的,但這并不是GAP內(nèi)涵的全部。GAP的意義是對(duì)整個(gè)網(wǎng)絡(luò)從結(jié)構(gòu)上做正則化防止過擬合。既要參數(shù)少避免全連接帶來的過擬合風(fēng)險(xiǎn),又要能達(dá)到全連接一樣的轉(zhuǎn)換功能,怎么做呢?直接從feature map的通道上下手,如果我們最終有1000類,那么最后一層卷積輸出的feature map就只有1000個(gè)channel,然后對(duì)這個(gè)feature map應(yīng)用全局池化,輸出長(zhǎng)度為1000的向量,這就相當(dāng)于剔除了全連接層黑箱子操作的特征,直接賦予了每個(gè)channel實(shí)際的類別意義。
下一篇將會(huì)針對(duì)GAP做進(jìn)一步地探索,主要關(guān)注GAP給神經(jīng)網(wǎng)絡(luò)帶來的定位能力。
作者簡(jiǎn)介:醫(yī)學(xué)圖像分割方向碩士研究生,開源深度框架dynet contributor,github賬號(hào): sunalbert,每周定期干貨。