zl程序教程

您现在的位置是:首页 >  其它

当前栏目

复盘:池化层(Pooling)的反向传播过程,平均池化,最大值池化都是如何反向传播的

如何 过程 反向 最大值 传播 平均 复盘 池化
2023-09-11 14:15:38 时间

复盘:池化层(Pooling)的反向传播过程,平均池化,最大值池化都是如何反向传播的?

提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性

关于互联网大厂的笔试面试,都是需要细心准备的
(1)自己的科研经历,科研内容,学习的相关领域知识,要熟悉熟透了
(2)自己的实习经历,做了什么内容,学习的领域知识,要熟悉熟透了
(3)除了科研,实习之外,平时自己关注的前沿知识,也不要落下,仔细了解,面试官很在乎你是否喜欢追进新科技,跟进创新概念和技术
(4)准备数据结构与算法,有笔试的大厂,第一关就是手撕代码做算法题
面试中,实际上,你准备数据结构与算法时以备不时之需,有足够的信心面对面试官可能问的算法题,很多情况下你的科研经历和实习经历足够跟面试官聊了,就不需要考你算法了。但很多大厂就会面试问你算法题,因此不论为了笔试面试,数据结构与算法必须熟悉熟透了
秋招提前批好多大厂不考笔试,直接面试,能否免笔试去面试,那就看你简历实力有多强了。


Pooling池化操作的反向梯度传播

CNN网络中另外一个不可导的环节就是Pooling池化操作,
因为Pooling操作使得feature map的尺寸变化,假如做2×22×2的池化,
假设那么第l+1l+1层的feature map有16个梯度,
那么第ll层就会有64个梯度,这使得梯度无法对位的进行传播下去。

其实解决这个问题的思想也很简单,
就是把1个像素的梯度传递给4个像素,
但是需要保证传递的loss(或者梯度)总和不变。

根据这条原则,mean pooling和max pooling的反向传播也是不同的。

mean pooling

mean pooling的前向传播就是把一个patch中的值求取平均来做pooling,
那么反向传播的过程也就是把某个元素的梯度等分为n份分配给前一层,

这样就保证池化前后的梯度(残差)之和保持不变,还是比较理解的,图示如下
在这里插入图片描述
mean pooling比较容易让人理解错的地方就是
会简单的认为直接把梯度复制N遍之后直接反向传播回去,
但是这样会造成loss之和变为原来的N倍,
网络是会产生梯度爆炸的。

max pooling

max pooling也要满足梯度之和不变的原则,

max pooling的前向传播是把patch中最大的值传递给后一层,
而其他像素的值直接被舍弃掉。

那么反向传播也就是把梯度直接传给前一层某一个像素,而其他像素不接受梯度,也就是为0。
当初你从哪里取的max,就返回去传给它

所以max pooling操作和mean pooling操作不同点在于
需要记录下池化操作时到底哪个像素的值是最大
也就是max id,这个变量就是记录最大值所在位置的,
因为在反向传播中要用到,

那么假设前向传播和反向传播的过程就如下图所示 :
在这里插入图片描述


总结

提示:重要经验:

1)很容易,我们的目标就是梯度总和是不能变的,mean池化的话,直接将梯度均分n份,返回去传
2)max池化的话,需要记录当初池化的位置,梯度回传只传给这个位置
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。