当前位置: 首页 > news >正文

机器学习:Pooling层作用及反向传播

在这里插入图片描述

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 倍,造成梯度爆炸。)

max pooling

max pooling在前向传播中,把一个patch中最大的值传递给下一层,其他值会被舍弃掉。因此,在反向传播中,就是将当前梯度直接传递给前一层的某个像素,而让同一个patch中的其他像素值为0

所以,max pooling和average pooling不同的是,max pooling在前向传播的时候要记录池化操作时哪个像素的值是最大的,即max_id,在反向传播中才能将其对应起来。

总结: pooling层没有可学习的参数,在CNN的反向传播中,pooling层需要做的仅仅是将误差传递到上一层,而没有计算梯度的过程。

Pooling层的作用

两种pooling层的原理其实很容易就理解了,那它的作用又是什么呢, CNN中为什么要加pooling层?下面汇总一下几位大佬的解释:

1、增加非线性

2、保留主要的特征同时减少参数(降维,效果类似PCA)和计算量,防止过拟合,提高模型泛化能力

3、invariance(不变性),这种不变性包括translation(平移),rotation(旋转),scale(尺度)

①translation invariance(平移不变性):

例如下面一个数字识别的例子,左边下图(大小为16×16)中的数字 1 比上图中的向右偏了一个单位,但是经过max pooling层之后,都变成了8×8的feature map。平移不变性体现在,max pooling之后,原图中的a(或b)最终都会映射到相同的位置(这句话的应该可以理解为原来feature map中的特征保持不变?比如a和b的位置不会错开,而是保持了相对位置从而保持了原来的主要特征)。

此外,图像主要的特征捕获到了,同时又将问题的规模从16×16降到了8×8(降维)。

②rotation invariance(旋转不变性):

下图表示汉字“一”的识别,第一张相对于x轴有倾斜角,第二张是平行于x轴,两张图片相当于做了旋转,经过多次max pooling后具有相同的特征。

③scale invariance(尺度不变性):

下图表示数字“0”的识别,第一张的“0”比较大,第二张的“0”进行了较小,相当于作了缩放,同样地,经过多次max pooling后具有相同的特征。

对③scale invariance(尺度不变性)的补充理解:(来自另一位大佬,作为参考)

增大了感受野!!! 怎么理解?比如上图中16×16的“0”,经过max pooling之后,可以用4×4的图表示了。

另外我们知道,CNN中利用卷积核进行卷积操作后,图像的的感受野会增大,那是不是一开始就用和图像大小一样的卷积核,获得的感受野更大,这样就更好呢?不是。因为卷积层越深模型的表征能力越强,如果直接用图像大小的卷积核就会得到1×1的feature map,一下子降维这么多,会导致很多重要信息丢失。

那如果多次卷积到最后也是要降维到1×1大小,信息不是一样丢失了吗?跟直接一次降维到1×1有什么区别吗?有区别的。因为如果每次只降维一些,逐渐降维虽然信息每次都会丢失一些,但每次卷积后表征的能力就会更强一些,到最后降到1×1的时候相比于直接降到1×1还是会强一些的。

pooling的缺点:

pooling能够增大感受野,让卷积能看到更多的信息,但是在降维的过程中也会丢失一部分信息(只留下了它认为重要的信息)。比如对segmentation要求的精度location会有一定的影响。

其他的pooling方法

overlapping pooling(重叠池化)

重叠池化,就是相邻池化窗口之间会有重叠,即窗口大小大于步长sizeX>stride。

Spatial Pyramid Pooling(空间金字塔池化)

空间金字塔池化的思想来源于SPPNet,用大小不同的池化窗口来作用于feature map,得到1×1、2×2和4×4的池化结果,如下图所见,假设卷积层有256个filter,那么可以得到1个256维的特征、4个256维的特征、16个256维的特征。

注意:这里的1×1、2×2和4×4不是池化窗口本身的大小,而是池化后将feature map分别划分为1×1、2×2和4×4个相同大小的子区域,而要得到这样的结果,就需要根据图像的大小动态地计算出池化窗口的大小和步长
计算方法:假设 c o n v 层输出为 a ∗ a ,要得到 n ∗ n 的池化结果,则有: s i z e X = a n , s t r i d e = a n 计算方法:假设conv层输出为a*a,要得到n*n的池化结果,则有:\\ \\sizeX=\frac{a}{n},\ \ stride=\frac{a}{n} 计算方法:假设conv层输出为aa,要得到nn的池化结果,则有:sizeX=na,  stride=na

a n \frac{a}{n} na 刚好取得整数,自然没有问题,例如假设a=13,要得到1×1pooling结果,只需令sizeX=13,stride=13即可。

但是当 a n \frac{a}{n} na 不能取整时,例如要得到2×2pooling结果,论文中给的sizeX=7,stride=6。(应该是对窗口大小sizeX稍作调整吧,然后采用重叠池化overlapping pooling的方法进行操作)

作用:CNN中加入SPP层之后,可以让CNN处理任意大小的输入,因而模型可以变得更加灵活。

参考资料

深度学习笔记(3)——CNN中一些特殊环节的反向传播

CNN网络的pooling层有什么用?

深度学习—之pooling层的作用与缺陷

池化方法总结

相关文章:

  • 【前端高频面试题--git篇】
  • python从入门到精通(十六):python爬虫的BeautifulSoup4
  • 自动化专业英语词汇积累【第一期】
  • npm install 安装依赖如何加速
  • 软件测试-测试用例研究-如何编写一份优秀的测试用例
  • 力扣[面试题 01.02. 判定是否互为字符重排(哈希表,位图)
  • java中事务的使用
  • JVM(2)实战篇
  • Redis相关介绍
  • 【PyTorch】改变张量(Tensor)形状操作
  • 2. Maven 继承与聚合
  • 小游戏和GUI编程(4) | 基于 SFML 的黑客帝国字符雨
  • 机器学习3----决策树
  • Android java基础_多态性
  • [ubuntu]split命令分割文件
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 2017年终总结、随想
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • CSS魔法堂:Absolute Positioning就这个样
  • JS题目及答案整理
  • JS字符串转数字方法总结
  • Less 日常用法
  • node.js
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • passportjs 源码分析
  • SegmentFault 2015 Top Rank
  • Travix是如何部署应用程序到Kubernetes上的
  • 安装python包到指定虚拟环境
  • 笨办法学C 练习34:动态数组
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 区块链共识机制优缺点对比都是什么
  • 数组的操作
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​低代码平台的核心价值与优势
  • ​力扣解法汇总946-验证栈序列
  • !!Dom4j 学习笔记
  • ###C语言程序设计-----C语言学习(3)#
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)bark-ml
  • (14)Hive调优——合并小文件
  • (C语言)球球大作战
  • (多级缓存)多级缓存
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计高校学生选课系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • .form文件_一篇文章学会文件上传
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库