pooling层是如何反向传播的?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dongfang1984/article/details/76974087

##1 . pooling层不需要反向传播?too Yang !

前几天跟同学聊天,在提到pooling层的时候,提到怎么反向传播?
我当时认为【pooling没有可优化的参数,应该只进行正向传播,反向传播应该是个空的函数,仅仅实现Forward即可】

我原来添加或修改一般都是loss层。一般不涉及中间层的修改、添加。
今天Caffe实现双向LSTM时候,需要添加中间层来修改原来的Caffe中的单向LSTM,发现原来的想法太简单

##2 怎么进行的传播?

如果pooling层不进行反向传播,那整个网络在反向传播的时候,不是很怕遇到pooling。
【因为遇到pooling层,网络梯度就中断了,还传播啥?pooling前面那些层参数直接更新不了】

大概意思:pooling分两种,max,average。
如果是max,以2*2卷积核为例,

max  2*2 kernel,stride=2         average 2*2 kernel,stride=2

--> Forward -->                   --> Forward -->
1 2                               1   2
4 2   max_pool  4                 4   2  average_pool  2.25

<-- Backward <--                  <-- Backward <--
           0  0                   2.25/4   2.25/4
 4         4  0                   2.25/4   2.25/4       2.25
  • average 的源码确实需要除以pool_size
bottom_diff[h * width_ + w] += top_diff[ph * pooled_width_ + pw] / pool_size;
阅读更多

没有更多推荐了,返回首页