問題
CNN網路在反向傳播中需要逐層向前求梯度,然而pooling層沒有可學習的引數,那它是如何進行反向傳播的呢?
此外,CNN中為什么要加pooling層,它的作用是什么?
Pooling層
CNN一般采用average pooling或max pooling來進行池化操作,而池化操作會改變feature map的大小,例如大小為64×64的feature map使用2×2的步長池化后,feature map大小為32×32,因此,這會使得在反向傳播中,pooling層的梯度無法與前一層相對應,
那怎么解決這個問題呢?其實也很簡單,可以理解為就是pooling操作的一個逆程序,把一個像素的梯度傳遞給4個像素,保證傳遞的loss(或梯度)總和不變,下面分別來看average pooling和max pooling的反向傳播操作程序,
average pooling
average pooling在前向傳播中,就是把一個patch中的值取平均傳遞給下一層的一個像素,因此,在反向傳播中,就是把某個像素的值平均分成 n 份分配給上一層,(!!注意這里是分成 n 份,而不是將該元素的值復制 n 份,不然會使得loss之和變為原來的 n 倍,造成梯度爆炸,)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299055.html
標籤:其他
