吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究

吴恩达深度学习课程笔记(四):卷积神经网络2 实例探究

2.1 为什么要进行实例探究

学以致用。

学习经典CNN后,会对如何构建有效的CNN更有感觉。

  • 经典网络:
    • LeNet-5
    • AlexNet
    • VGG
  • ResNet
  • Inception

2.2 经典网络

LeNet-5

  • 针对灰度图;
  • 现代版本使用Relu;
  • 现代版本最后是softmax层;
  • 建议只读原论文的第二部分和第三部分,因为大部分都已过时,但网络结构仍有参考价值,即conv - pool - conv - pool - FC - FC 。

AlexNet

AlexNet与LeNet在很多地方很相似,但是要大很多。LeNet-5大概6万个参数。而AlexNet大概6000万个参数。

AlexNet(比LeNet-5)表现出色的原因:

  • 当用于训练图像和数据集的时候,AlexNet能够处理非常相似的基本构造模块。这些模块往往包含着大量的隐藏单元或数据。
  • 使用Relu激活函数。

看论文可以绕过的点:

  • 在写AlexNet论文的时候,GPU速度还很慢。所以采用了很复杂的方法在两个GPU上训练。
  • 所使用的局部响应归一化层(LRN层:local response normalization)后续研究发现起不到作用,也没人用,可以不看。

该论文是深度学习进入计算机视觉领域的开端。从这篇论文开始,计算机视觉的研究者开始重视深度学习,最后使得深度学习在其他领域也发扬光大。

VGG-16

一种没有很多超参数,只需要专注于构建卷积层的简单网络。VGG-16简化了神经网络结构。

VGG-16,即有16层网络的VGG,有13个CONV和3个FC。一共1.38亿个参数。

虽然是个大网络,但结构简单,规整,过滤器数量变化存在规律(64 - 128 - 256 - 512 - 512)。

缺点是:需要训练的特征数量非常巨大。

2.3 残差网络(ResNets:Residual Networks)

非常非常深的网络存在梯度消失和梯度爆炸问题,因此很难训练。

跳远连接(skip connections)可以从某一网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。

利用跳远连接构建能够训练深度网络的ResNets。

残差块(Residual block)

跳远连接(skip connections),又叫捷径(short cut),用来构建残差块,而残差块可以训练更深的神经网络。

a [ l ] 除了主路以外,直接在 a [ l + 2 ] 的激活函数前输入。

也就是 a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] )

构成一个残差块。

ResNet网络就是由很多这样的残差块构成。

残差网络 (Residual Network)


上图,普通网络(plain network)使用跳远连接,构成5个残差块,生成了一个残差网络。

随着网络层数的增加,理论上训练误差应该越来越小;但在普通网络上却不是这样;而残差网络可以做到。

2.4 残差网络为什么有用?

深度网络存在退化问题,即随着深度的加深,训练误差反而加大。

给一个普通网络加入残差块,如图所示。

整个网络使用Relu激活函数,那么,所有的激活值a>=0。

如果使用 L 2 正则化或者权重衰减,会压缩 w [ l + 2 ] 的值。

如果对 b 使用权重衰减,也可以达到相同效果。

如果 w [ l + 2 ] = 0 ,为方便分析,假设此时 b [ l + 2 ] = 0 ,那么 a [ l + 2 ] = a [ l ]

以上分析表明:

残差块可以很容易地学习到恒等式函数。

即,skip connection 使网络很容易得到 a [ l + 2 ] = a [ l ] 这个恒等式。

这意味着,即使给神经网络增加了两层,也没有使得网络的性能降低。因为学习恒等式函数对残差块来说很简单。尽管多了两层,但是也只是把 a [ l ] 的值赋给 a [ l + 2 ]

所以,不论是把残差块添加到神经网络的中间还是末端位置,都不会影响网络的性能。

但我们的目标不是仅仅在保持网络性能的条件下单纯的增加层数(要深还要好)。

如果我们新添加的隐藏单元能够学习到一些有用信息,那么它可能比学习到恒等式函数表现的更好(深,好)。

如果是没有残差块的深度普通网络,当网络不断加深时,其仅仅选择学习恒等式函数的参数都很困难。所以增加层数最后的表现不但不能变好,反而更糟。

总结:残差块学习恒等函数非常容易。所以可以很肯定的说,增加残差块不会使得网络的性能受到影响。很多时候,这些增加的残差块还可以提升网络的性能(如果残差块学习到有用信息的话)。反过来说,增加残差块至少不会降低网络的性能。

细节:
a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] ) 中,假设 a [ l ] z [ l + 2 ] 相同维度。
所以,ResNets使用了很多same convolutions。
如果 a [ l ] z [ l + 2 ] 维度不相同,那么,给 a [ l ] 添加参数 w s

a [ l + 2 ] = g ( z [ l + 2 ] + w s a [ l ] )

比如, z [ l + 2 ] 是256X1, a [ l ] 是128X1。
那么, w s 这个参数就是256X128,并且是网络去自动学习参数。

2.5 网中网以及 1×1 卷积

在图像信道数ch=1的时候,1 × 1卷积核就是一个数字,没有什么意义。

在图像信道数ch>1的时候,1 × 1卷积核会和输入矩阵构成网中网。

如上图所示,在输入中切出一个1 × 1 × 32的部分,和一个卷积核卷积,卷积核的32个数字就是一个网络的权重,如下图所示:

现在网络中会存在多个1 × 1$过滤器,对于输入图像中的一个像素点(有多个通道)来说,和一个过滤器卷积,产生一个输出,和多个过滤器卷积,产生多个输出。如下图所示:

假设,图像的一个像素点为1 × 1 × 32,而1 × 1 × 32的卷积核有16个,那么最终产出就是1 × 1 × 16。

通过这一个像素点和多个1 × 1卷积核生成的就是一个网中网,在本来的神经网络中,通过1 × 1卷积操作产生的小神经网络。

一副6 × 6的图像有36个像素点,就是这个网中网的36个输入。

用途:

  • 压缩信道数量 n c
    • 池化层只能压缩图像的高度和宽度。
    • 应该叫改变信道数量,即增加信道、保持和减小。但一般都是用来压缩信道数量。

上图中,如果选择192个过滤器,那就不是压缩信道数量。这时候,卷积核中带有的非线性函数,可以让网络学习更复杂的函数。

ps:卷积核卷积之后带有非线性函数。不光是1 × 1卷积核。

2.6 Inception 网络简介

当构建网络时,你需要决定卷积核的大小(1 × 1、3 × 3、5 × 5等),以及是否添加池化层。

这些 Inception 网络都可以自动选择决定。 即代替人工来决定卷积层中过滤器的类型,或者确定是否需要创建卷积层或池化层。

即 Inception 层将不同的卷积核以及池化层罗列出来(注意输出的高度和宽度要保持一致,卷积和池化都需要做到)。

存在的问题是,5 × 5卷积非常耗费算力。

计算成本问题

上图,对个这个5 × 5卷积,需要1.2亿次乘法运算。

为了缩减这个算力成本,用1\times$1卷积来压缩信道数量。压缩信道的这一层就叫做瓶颈层(bottleneck large)。

加入瓶颈层,改变网络架构后,需要1240万次乘法运算。

运算成本下降了十分之一。

瓶颈层的作用就是降低运算成本。

大幅压缩信道数量会不会影响网络性能?

只要合理选择瓶颈层大小,就可以显著缩小表示层规模的同时,不降低网络的性能。

2.7 Inception 网络

2.8 使用开源的实现方案

2.9 迁移学习

2.10 数据扩充

2.11 计算机视觉现状

猜你喜欢

转载自blog.csdn.net/cluster1893/article/details/81810354
今日推荐