←上一篇 ↓↑ 下一篇→
1.8 简单卷积网络示例 回到目录 1.10 卷积神经网络示例

池化层 (Pooling Layers)

除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,我们来看一下。


先举一个池化层的例子,然后我们再讨论池化层的必要性。假如输入是一个4×4矩阵,用到的池化类型是最大池化(max pooling)。执行最大池化的树池是一个2×2矩阵。执行过程非常简单,把4×4的输入拆分成不同的区域,我把这个区域用不同颜色来标记。对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。


左上区域的最大值是9,右上区域的最大元素值是2,左下区域的最大值是6,右下区域的最大值是3。为了计算出右侧这4个元素值,我们需要对输入矩阵的2×2区域做最大值运算。这就像是应用了一个规模为2的过滤器,因为我们选用的是2×2区域,步幅是2,这些就是最大池化的超参数。

因为我们使用的过滤器为2×2,最后输出是9。然后向右移动2个步幅,计算出最大值2。然后是第二行,向下移动2步得到最大值6。最后向右移动3步,得到最大值3。这是一个2×2矩阵,即 f=2f=2f=2 ,步幅是2,即 s=2s=2s=2 。


这是对最大池化功能的直观理解,你可以把这个4×4输入看作是某些特征的集合,也许不是。你可以把这个4×4区域看作是某些特征的集合,也就是神经网络中某一层的非激活值集合。数字大意味着可能探测到了某些特定的特征,左上象限具有的特征可能是一个垂直边缘,一只眼睛,或是大家害怕遇到的CAP特征。显然左上象限中存在这个特征,这个特征可能是一只猫眼探测器。然而,右上象限并不存在这个特征。最大化操作的功能就是只要在任何一个象限内提取到某个特征,它都会保留在最大化的池化输出里。所以最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。

必须承认,人们使用最大池化的主要原因是此方法在很多实验中效果都很好。尽管刚刚描述的直观理解经常被引用,不知大家是否完全理解它的真正原因,不知大家是否理解最大池化效率很高的真正原因。

其中一个有意思的特点就是,它有一组超参数,但并没有参数需要学习。实际上,梯度下降没有什么可学的,一旦确定了 fff 和 sss ,它就是一个固定运算,梯度下降无需改变任何值。

我们来看一个有若干个超级参数的示例,输入是一个5×5的矩阵。我们采用最大池化法,它的过滤器参数为3×3,即 f=3f=3f=3 ,步幅为1, s=1s=1s=1 ,输出矩阵是3×3.之前讲的计算卷积层输出大小的公式同样适用于最大池化,即 n+2p−fs+1\frac{n+2p-f}{s}+1sn+2p−f​+1 ,这个公式也可以计算最大池化的输出大小。


此例是计算3×3输出的每个元素,我们看左上角这些元素,注意这是一个3×3区域,因为有3个过滤器,取最大值9。然后移动一个元素,因为步幅是1,蓝色区域的最大值是9.继续向右移动,蓝色区域的最大值是5。然后移到下一行,因为步幅是1,我们只向下移动一个格,所以该区域的最大值是9。这个区域也是9。这两个区域的最大值都是5。最后这三个区域的最大值分别为8,6和9。超参数 f=3,s=1f=3,s=1f=3,s=1 ,最终输出如图所示。


以上就是一个二维输入的最大池化的演示,如果输入是三维的,那么输出也是三维的。例如,输入是5×5×2,那么输出是3×3×2。计算最大池化的方法就是分别对每个通道执行刚刚的计算过程。如上图所示,第一个通道依然保持不变。对于第二个通道,我刚才画在下面的,在这个层做同样的计算,得到第二个通道的输出。一般来说,如果输入是5×5×ncn_cnc​,输出就是3×3×ncn_cnc​ , ncn_cnc​ 个通道中每个通道都单独执行最大池化计算,以上就是最大池化算法。


另外还有一种类型的池化,平均池化,它不太常用。我简单介绍一下,这种运算顾名思义,选取的不是每个过滤器的最大值,而是平均值。示例中,紫色区域的平均值是3.75,后面依次是1.25、4和2。这个平均池化的超级参数 f=2,s=2f=2,s=2f=2,s=2 ,我们也可以选择其它超级参数。


目前来说,最大池化比平均池化更常用。但也有例外,就是深度很深的神经网络,你可以用平均池化来分解规模为7×7×1000的网络的表示层,在整个空间内求平均值,得到1×1×1000,一会我们看个例子。但在神经网络中,最大池化要比平均池化用得更多。

总结一下,池化的超级参数包括过滤器大小 fff 和步幅 sss ,常用的参数值为 f=2,s=2f=2,s=2f=2,s=2 ,应用频率非常高,其效果相当于高度和宽度缩减一半。也有使用 f=3,s=2f=3,s=2f=3,s=2 的情况。至于其它超级参数就要看你用的是最大池化还是平均池化了。你也可以根据自己意愿增加表示padding的其他超级参数,虽然很少这么用。最大池化时,往往很少用到超参数padding,当然也有例外的情况,我们下周会讲。大部分情况下,最大池化很少用padding。目前 ppp 最常用的值是0,即 p=0p=0p=0 。最大池化的输入就是 nH∗nW∗ncn_H*n_W*n_cnH​∗nW​∗nc​ ,假设没有padding,则输出 ⌊nH−fs+1⌋∗⌊nW−fs+1⌋∗nc\lfloor \frac{n_H-f}{s}+1 \rfloor*\lfloor \frac{n_W-f}{s}+1 \rfloor*n_c⌊snH​−f​+1⌋∗⌊snW​−f​+1⌋∗nc​ 。输入通道与输出通道个数相同,因为我们对每个通道都做了池化。需要注意的一点是,池化过程中没有需要学习的参数。执行反向传播时,反向传播没有参数适用于最大池化。只有这些设置过的超参数,可能是手动设置的,也可能是通过交叉验证设置的。


除了这些,池化的内容就全部讲完了。最大池化只是计算神经网络某一层的静态属性,没有什么需要学习的,它只是一个静态属性。

关于池化我们就讲到这儿,现在我们已经知道如何构建卷积层和池化层了。下节课,我们会分析一个更复杂的可以引进全连接层的卷积网络示例。

课程板书





←上一篇 ↓↑ 下一篇→
1.8 简单卷积网络示例 回到目录 1.10 卷积神经网络示例

1.9 池化层-深度学习第四课《卷积神经网络》-Stanford吴恩达教授相关推荐

  1. 深度学习第四课——卷积神经网络(week 1)

    目录 一.前言 1.1 卷积 1.2 其他滤波器 1.3 Padding 1.3.1 解释 1.3.2 填充多少像素的选择 1.4 卷积步长 1.5 三维卷积 1.6 单层卷积网络 1.7 深度卷积神 ...

  2. 2.12 总结-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.11 计算机视觉现状 回到目录 3.1 目标定位 总结 习题 第 111 题 在典型的卷积神经网络中,随着网络的深度增加,你能看到的现象是? A. nHn_HnH​ 和 ...

  3. 2.2 经典网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.1 为什么要进行实例探究? 回到目录 2.3 残差网络 经典网络 (Classic Networks) 这节课,我们来学习几个经典的神经网络结构,分别是LeNet-5.A ...

  4. 2.19 总结-深度学习-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.18 Logistic 损失函数的解释 回到目录 3.1 神经网络概览 文章目录 总结 习题 第 11 题 第 12 题 第 13 题 第 14 题 第 15 题 第 1 ...

  5. 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  6. 0.0 目录-深度学习第五课《序列模型》-Stanford吴恩达教授

    文章目录 目录 第五课 第四课 第三课 第二课 第一课 目录 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1. ...

  7. 2.7 Inception 网络-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.6 谷歌 Inception 网络简介 回到目录 2.8 使用开源的实现方案 Inception 网络 (Inception Network) 在上节视频中,你已经见到了 ...

  8. 2.4 残差网络为什么有用-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.3 残差网络 回到目录 2.5 网络中的网络以及1x1卷积 残差网络为什么有用 (Why ResNets work?) 为什么ResNets能有如此好的表现,我们来看个例 ...

  9. 1.8 简单卷积网络示例-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.7 单层卷积网络 回到目录 1.9 池化层 简单卷积网络示例 (A Simple Convolution Network Example) 上节课,我们讲了如何为卷积网络 ...

最新文章

  1. 机器人建模中移动关节如何建立坐标系_机器人工程师进阶之路(八)指数积(PoE)建立机械臂模型及正运动...
  2. 二叉排序树(二叉搜索树,二叉查找树)
  3. 3_6 CommandMode 命令模式
  4. c语言平面向量加法考点,平面向量的加减法怎么死活都不会?有没有什么口诀?例如:向量AB+BC=?向量OA-OB=?向量AB-CB=?有没有什么口诀!...
  5. Webpack实战(五):轻松读懂Webpack如何分离样式文件
  6. 家人重病什么心情都没了
  7. HALCON 21.11:深度学习笔记---术语表(7)
  8. CentOS7下让Asp.Net Core的网站自动运行
  9. pandas.DataFrame对根据某些列对某些列进行修改
  10. 转存文章— 网游加速器实现原理解析
  11. pythonpptx模块详解_详解 Python 操作 PPT 的各种骚操作!
  12. PPT幻灯片放映计时器
  13. FPGA之JESD204B接口——总体概要 实例 下
  14. 用javascript实现点击按钮删除一个文本框
  15. java 第七章 数组
  16. 请求服务器显示非法请求,请求被服务器识别为非法请求, 但使用 postman/curl 可以正常通过...
  17. C#轻量级 restful http 服务实践初探
  18. linux串口工具 kermit,ubuntu串口工具(minicom、kermit)的使用
  19. 如何用PPT画出好看的科研图
  20. AEJoy —— 详解 AE 如何将 png 序列帧导出为 SVGA 动画文件

热门文章

  1. 四、Java多人博客系统-2.0版本
  2. 并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究
  3. php5权限控制修饰符,interface和abstract
  4. 基于jquery的bootstrap在线文本编辑器插件Summernote (转)
  5. Android MagicIndicator系列之一 —— 使用MagicIndicator打造千变万化的ViewPager指示器...
  6. 北邮校园网自动登录 python
  7. C#-Home / 详解Asp.Net Sql数据库连接字符串
  8. mapreduce 算法
  9. C语言a+++b的问题
  10. 利用emu8086学习汇编int 10h功能