GAP(全局平均池化层)操作
轉載的文章鏈接:
為什么使用全局平均池化層?
關于 global average pooling
https://blog.csdn.net/qq_23304241/article/details/80292859
在卷積神經網絡的初期,卷積層通過池化層(一般是 最大池化)后總是要一個或n個全連接層,最后在softmax分類。其特征就是全連接層的參數超多,使模型本身變得非常臃腫。
之后,有大牛在NIN(Network in Network)論文中提到了使用全局平局池化層代替全連接層的思路,以下是摘錄的一部分資料:
global average poolilng。既然全連接網絡可以使feature map的維度減少,進而輸入到softmax,但是又會造成過擬合,是不是可以用pooling來代替全連接。
答案是肯定的,Network in Network工作使用GAP來取代了最后的全連接層,直接實現了降維,更重要的是極大地減少了網絡的參數(CNN網絡中占比最大的參數其實后面的全連接層)。Global average pooling的結構如下圖所示:
由此就可以比較直觀地說明了。這兩者合二為一的過程我們可以探索到GAP的真正意義是:對整個網路在結構上做正則化防止過擬合。其直接剔除了全連接層中黑箱的特征,直接賦予了每個channel實際的內別意義。
實踐證明其效果還是比較可觀的,同時GAP可以實現任意圖像大小的輸入。但是值得我們注意的是,使用gap可能會造成收斂速度減慢。
但是,全局平均池化層比較全連接層,為什么會收斂速度變慢,它們對模型的訓練有什么差異呢?我沒有找到相關的文章的介紹。以下是發揮我自己的想象(很有可能是錯誤的)來理解的幾個點:
1.全連接層結構的模型,對于訓練學習的過程,可能壓力更多的在全連接層。就是說,卷積的特征學習的低級一些,沒有關系,全連接不斷學習調整參數,一樣能很好的分類。
此處是完全猜測,沒有道理。
2.全局平均池化層代替全連接層的模型,學習訓練的壓力全部前導到卷積層。卷積的特征學習相較來說要更為"高級"一些。(因此收斂速度變慢?)
為什么這么想呢?我的理解是,全局平均池化較全連接層,應該會淡化不同特征間的相對位置的組合關系(“全局”的概念即如此)。因此,卷積訓練出來的特征應該更加“高級”。
3. 以上的兩個觀點聯合起來,可以推導出,全局平均池化層代替全連接層雖然有好處,但是不利于遷移學習。因為參數較為“固化”在卷積的諸層網絡中。增加新的分類,那就意味著相當數量的卷積特征要做調整。而全連接層模型則可以更好的遷移學習,因為它的參數很大一部分調整在全連接層,遷移的時候卷積層可能也會調整,但是相對來講要小的多了。
這3點完全是我個人的理解,希望有大牛留言批評指正。
global average pooling 與 average pooling 的差別就在 “global” 這一個字眼上。global與 local 在字面上都是用來形容 pooling 窗口區域的。 local 是取 feature map 的一個子區域求平均值,然后滑動這個子區域; global 顯然就是對整個 feature map 求平均值了。
因此,global average pooling 的最后輸出結果仍然是 10 個 feature map,而不是一個,只不過每個feature map 只剩下一個像素罷了。這個像素就是求得的平均值。 官方 prototxt 文件 里寫了。網絡進行到最后一個average pooling 層的時候,feature map 就剩下了 10 個,每個大小是 8 * 8。順其自然地作者就把pooling 窗口設成了 8 個像素,意會為 global average pooling 。可見,global averagepooling 就是窗口放大到整個 feature map 的 average pooling 。
每個講到全局池化的都會說GAP就是把avg pooling的窗口大小設置成feature map的大小,這雖然是正確的,但這并不是GAP內涵的全部。GAP的意義是對整個網絡從結構上做正則化防止過擬合。既要參數少避免全連接帶來的過擬合風險,又要能達到全連接一樣的轉換功能,怎么做呢?直接從feature map的通道上下手,如果我們最終有1000類,那么最后一層卷積輸出的feature map就只有1000個channel,然后對這個feature map應用全局池化,輸出長度為1000的向量,這就相當于剔除了全連接層黑箱子操作的特征,直接賦予了每個channel實際的類別意義。
總結
以上是生活随笔為你收集整理的GAP(全局平均池化层)操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 办理执照多少钱啊?
- 下一篇: 《蜀四贤咏》第十句是什么