池化層(pooling)的反向傳播的實現

在看卷積神經網絡的時候,突然想起來池化是會改變特徵圖的尺寸的,那反向傳播是怎麼實現的呢。於是搜了一些博客,感覺上面這個博客寫得最清晰直觀,就從這個博客裏面搬了點東西過來作爲筆記。
Pooling池化操作的反向梯度傳播
CNN網絡中另外一個不可導的環節就是Pooling池化操作,因爲Pooling操作使得feature map的尺寸變化,假如做2×2的池化,假設那麼第l+1層的feature map有16個梯度,那麼第l層就會有64個梯度,這使得梯度無法對位的進行傳播下去。其實解決這個問題的思想也很簡單,就是把1個像素的梯度傳遞給4個像素,但是需要保證傳遞的loss(或者梯度)總和不變。根據這條原則,mean pooling和max pooling的反向傳播也是不同的。
1、mean pooling
mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那麼反向傳播的過程也就是把某個元素的梯度等分爲n份分配給前一層,這樣就保證池化前後的梯度(殘差)之和保持不變,還是比較理解的,圖示如下 :

mean pooling比較容易讓人理解錯的地方就是會簡單的認爲直接把梯度複製N遍之後直接反向傳播回去,但是這樣會造成loss之和變爲原來的N倍,網絡是會產生梯度爆炸的。
2、max pooling
max pooling也要滿足梯度之和不變的原則,max pooling的前向傳播是把patch中最大的值傳遞給後一層,而其他像素的值直接被捨棄掉。那麼反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是爲0。所以max pooling操作和mean pooling操作不同點在於需要記錄下池化操作時到底哪個像素的值是最大,也就是max id,這個變量就是記錄最大值所在位置的,因爲在反向傳播中要用到,那麼假設前向傳播和反向傳播的過程就如下圖所示 :


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章