2.5-2.7 1×1 卷积 Inception 吴恩达 第四门课 卷积神经网络 第二周 深度卷积网络

2.5 网络中的网络以及 1×1 卷积(Network in Network and

1×1 convolutions

其中一个比较有帮助的想法是使用 1×1 卷积。过滤器为 1×1,这里是数字 2,输入一张 6×6×1 的图片,然后对它做卷积,起过滤器大小为 1×1×1,结果相当于把这个图片乘以数字 2,所以前三个单元格分别是 2、4、6 等等。用 1×1 的过滤器进行卷积,似乎用处不大,只是对输入矩阵乘以某个数字。但这仅仅是对于6×6×1 的一个通道图片来说,1×1 卷积效果不佳。

如果是一张 6×6×32 的图片,那么使用 1×1 过滤器进行卷积效果更好。具体来说,1×1 卷积所实现的功能是遍历这 36 个单元格,计算左图中 32 个数字和过滤器中 32 个数字的元素积之和,然后应用 ReLU 非线性函数

它是这个输入层上的某个切片,用这 36 个数字乘以这个输入层上 1×1 切片,得到一个实数,像这样把它画在输出中。这个 1×1×32 过滤器中的 32 个数字可以这样理解,一个神经元的输入是 32 个数字(输入图片中左下角位置 32 个通道中的数字),即相同高度和宽度上某一切片上的 32 个数字,这 32 个数字具有不同通道,乘以 32 个权重(将过滤器中的 32 个数理解为权重),然后应用 ReLU 非线性函数,在这里输出相应的结果。

举个 1×1 卷积的例子,相信对大家有所帮助,这是它的一个应用。

假设这是一个 28×28×192 的输入层,你可以使用池化层压缩它的高度和宽度,这个过程我们很清楚。但如果通道数量很大,该如何把它压缩为 28×28×32 维度的层呢?你可以用 32个大小为 1×1 的过滤器,严格来讲每个过滤器大小都是 1×1×192 维,因为过滤器中通道数量必须与输入层中通道的数量保持一致。但是你使用了 32 个过滤器,输出层为 28×28×32,这就是压缩通道数(𝑜 𝑑 )的方法,对于池化层我只是压缩了这些层的高度和宽度。

 

在之后我们看到在某些网络中 1×1 卷积是如何压缩通道数量并减少计算的。当然如果你想保持通道数 192 不变,这也是可行的,1×1 卷积只是添加了非线性函数,当然也可以让网络学习更复杂的函数,比如,我们再添加一层,其输入为 28×28×192,输出为 28×28×192。

1×1 卷积层就是这样实现了一些重要功能的(doing something pretty non-trivial),它给神经网络添加了一个非线性函数,从而减少或保持输入层中的通道数量不变,当然如果你愿意,也可以增加通道数量。后面你会发现这对构建 Inception 网络很有帮助,我们放在下节课讲。这节课我们演示了如何根据自己的意愿通过 1×1 卷积的简单操作来压缩或保持输入层中的通道数量,甚至是增加通道数量。

2.6 谷歌 Inception 网络简介(Inception network motivation)

构建卷积层时,你要决定过滤器的大小究竟是 1×1(原来是 1×3,猜测为口误),3×3 还是 5×5,或者要不要添加池化层。而 Inception 网络的作用就是代替你来决定,虽然网络架构因此变得更加复杂,但网络表现却非常好,我们来了解一下其中的原理。

例如,这是你 28×28×192 维度的输入层,Inception 网络或 Inception 层的作用就是代替人工来确定卷积层中的过滤器类型,或者确定是否需要创建卷积层或池化层

基本思想是 Inception 网络不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。

Inception 层有一个问题,就是计算成本。

降低计算成本,瓶颈层

这里还有另外一种架构,其输入为 28×28×192,输出为 28×28×32。其结果是这样的,对于输入层,使用 1×1 卷积把输入值从 192 个通道减少到 16 个通道。然后对这个较小层运行5×5 卷积,得到最终输出。请注意,输入和输出的维度依然相同,输入是 28×28×192,输出是 28×28×32,和上一页的相同。但我们要做的就是把左边这个大的输入层压缩成这个较小的的中间层,它只有 16 个通道,而不是 192 个。

有时候这被称为瓶颈层,瓶颈通常是某个对象最小的部分,假如你有这样一个玻璃瓶,这是瓶塞位置,瓶颈就是这个瓶子最小的部分。

所需要乘法运算的总次数是这两层的计算成本之和。

总结一下,如果你在构建神经网络层的时候,不想决定池化层是使用 1×1,3×3 还是 5×5的过滤器,那么 Inception 模块就是最好的选择。我们可以应用各种类型的过滤器,只需要把输出连接起来。之后我们讲到计算成本问题,我们学习了如何通过使用 1×1 卷积来构建瓶颈层,从而大大降低计算成本。

你可能会问,仅仅大幅缩小表示层规模会不会影响神经网络的性能?事实证明,只要合

理构建瓶颈层,你既可以显著缩小表示层规模,又不会降低网络性能,从而节省了计算。这就是 Inception 模块的主要思想。

2.7 Inception 网络(Inception network )

学习如何将这些模块组合起来,构筑你自己的 Inception 网络。Inception 模块会将之前层的激活或者输出作为它的输入,作为前提。

这是一个28×28×192 的输入,和我们之前视频中的一样。我们详细分析过的例子是,先通过一个 1×1层,再通过一个 5×5 的层,1×1 的层可能有 16 个通道,而 5×5 的层输出为 28×28×32,共

32 个通道。

为了在这个 3×3 的卷积层中节省运算量,你也可以做相同的操作,这样的话 3×3 的层将会输出 28×28×128。

或许你还想将其直接通过一个 1×1 的卷积层,这时就不必在后面再跟一个 1×1 的层了,这样的话过程就只有一步,假设这个层的输出是 28×28×64。

最后是池化层。

这里我们要做些有趣的事情,为了能在最后将这些输出都连接起来,我们会使用 same类型的 padding 来池化,使得输出的高和宽依然是 28×28,这样才能将它与其他输出连接起来。但注意,如果你进行了最大池化,即便用了 same padding,3×3 的过滤器,stride 为 1,其输出将会是 28×28×192,其通道数或者说深度与这里的输入(通道数)相同。所以看起来它会有很多通道,我们实际要做的就是再加上一个 1×1 的卷积层,去进行我们在 1×1 卷积层的视频里所介绍的操作,将通道的数量缩小,缩小到 28×28×32。也就是使用 32 个维度为1×1×192 的过滤器,所以输出的维度其通道数缩小为 32。这样就避免了最后输出时,池化层占据所有的通道。

最后,将这些方块全都连接起来。在这过程中,把得到的各个层的通道都加起来,最后得到一个 28×28×256 的输出。通道连接实际就是之前视频中看到过的,把所有方块连接在一起的操作。这就是一个 Inception 模块,而 Inception 网络所做的就是将这些模块都组合到一起。

这是一张取自 Szegety et al 的论文中关于 Inception 网络的图片,你会发现图中有许多重复的模块,可能整张图看上去很复杂,但如果你只截取其中一个环节(编号 1),就会发现这是在前一页 ppt 中所见的 Inception 模块

我们深入看看里边的一些细节,这是另一个 Inception 模块(编号 2),这也是一个nception 模块(编号 3)。这里有一些额外的最大池化层(编号 6)来修改高和宽的维度。这是另外一个 Inception 模块(编号 4),这是另外一个最大池化层(编号 7),它改变了高和宽。而这里又是另一个 Inception 模块(编号 5)。

所以 Inception 网络只是很多这些你学过的模块在不同的位置重复组成的网络,所以如果你理解了之前所学的 Inception 模块,你就也能理解 Inception 网络。

事实上,如果你读过论文的原文,你就会发现,这里其实还有一些分支,我现在把它们加上去。所以这些分支有什么用呢?在网络的最后几层,通常称为全连接层,在它之后是一个 softmax 层(编号 1)来做出预测,这些分支(编号 2)所做的就是通过隐藏层(编号 3)来做出预测,所以这其实是一个 softmax 输出(编号 2),这(编号 1)也是。这是另一条分支(编号 4),它也包含了一个隐藏层,通过一些全连接层,然后有一个 softmax 来预测,输出结果的标签。

你应该把它看做 Inception 网络的一个细节,它确保了即便是隐藏单元和中间层(编号5)也参与了特征计算,它们也能预测图片的分类。它在 Inception 网络中,起到一种调整的效果,并且能防止网络发生过拟合。

(作者其实是通过它来表明了建立更深的神经网络的决心,他们正是这样构建了 Inception。我想一般研究论文,通常不会引用网络流行模因(梗),但这里显然很合适。)

最后总结一下,如果你理解了 Inception 模块,你就能理解 Inception 网络,无非是很多个 Inception 模块一环接一环,最后组成了网络。自从 Inception 模块诞生以来,经过研究者们的不断发展,衍生了许多新的版本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值