吴恩达深度学习——04卷积神经网络(2)

    第四章第二周的学习,到现在为止还没有开始写这一章的代码的。理论的内容稍稍有点多。第二周是深度卷积网络的实例探究(Deep convolution models: case studies)。这一节主要介绍了几个比较经典的卷积神经网络和一些构建神经网络时的小技巧。

一、Classic networks:

    LeNet-5、AlexNet、VGG

二、ResNet

三、Inception

四、迁移学习

五、数据扩充

六、计算机视觉的现状

 

一、Classic networks

1、LetNet-5

    LetNet-5是针对灰度图片训练的,所以图片的大小只有32x32x1,结构如下:

    在LetNet-5存在着比较经典的模式:(1)、随着网络越来越深,图像的高度和宽度在减小,而通道数在增加。(2)、一般一个或者多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,最后是输出,这种排列方式很常用。

2、AlexNet

    AlexNet直接对彩色的大图片进行处理,结构如下:

    

    (1)与LetNet相似,但是AlexNet网络结构更大,参数更多,因此表现更出色。

    (2)AlexNet表现的比LetNet更加出色的另一个原因,AlexNet使用了ReLU函数。

    (3)LRN(局部响应归一化层),但是后来发现用处不大,已经被舍弃

    AlexNet使深度学习在计算机视觉方面受到了极大的重视。

3、VGG-16

    VGG-16网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络(结构很规整并不复杂)。VGG-16的卷积层和池化层各自具有一样的卷积核大小,CONV均为3x3,stride=1,SAME,池化均为2x2,stride=1.其中VGG-16中的16表示整个网络一共16个卷积层和全连接层,结构如下:   

    这种相对一致的网络主要的缺点就是需要训练的特征数量特别的大。

二、残差网络(ResNet)

    2.1、概述

    非常非常深的网络是很难训练的,因为存在梯度消失和梯度下降的问题。因此这里出现一个跳跃连接(skip connection)的方法。

    ResNets是由残差块(residual block)构建的。

    下面是一个普通的神经网络两个隐藏层部分以及其前向传播的计算公式。

下图成为了一个残差块,主要是将其传播过程增加了一个过程,如图所示的"short cut"/skip connection过程,并且注意,这个过程的到达点是在第二个激活函数之前。而前向传播的第二个ReLU也有所变化。

最终普通神经网络变为:

多个残差块构成了残差网络:

    

没有“short cut”的普通神经网络和ResNet随着神经网络层变深的误差曲线对比:

    

(1)、在普通网络中,训练的误差实际上是随着网络层数的加深,先减小后增加的。

(2)、在有残差的ResNet中,即使网络再深,训练误差都会随着网络层数的加深逐渐减小。

(3)、ResNet可以帮助中间的激活能够达到网络的更深层。有利于解决梯度消失和梯度爆炸问题。让我们在训练更深网络的同时,又能保证良好的性能。也许从另一个角度来看,随着网络越来越深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面十分奏效。

    2.2、残差网络为什么有用?

    

    假设网络中均使用了ReLU激活函数,所以最后输出a>=0。

    

    如果使用了L2正则化或者权重衰减,会压缩w和b的值。如果W[l+2]=0,同时b[l+2]=0,那么上式就变成了:

    

    结果表明,残差块学习这个恒等式并不难,跳跃连接使我们很容易就得出a[l+2]=a[l]。这意味着,即使给神经网络增加了这两层,它的效率也并不逊色于更简单的神经网络,因为学习恒等函数对它来说很简单。尽管它多了两层,也只是把a[l]赋给a[l+2]。所以给大型网络增加两层,不论是把残差网络添加到神经网络的末端还是中间位置,都不会影响网络的表现。

    

    同时,由于结构a[l+2]=g(z[l+2] + a[l]),ResNet在设计中使用了很多相同的卷积,以保持z[l+2]和a[l]的维度相同。

    将普通神经网络变成ResNet:在两个相同的卷积层之间增加“skip connection”

    

在代码练习中tip:

原始的:

more powerful version:

另一种:The CONV2D layer in the shortcut path is used to resize the input xx to a different dimension, so that the dimensions match up in the final addition needed to add the shortcut value back to the main path. (This plays a similar role as the matrix W_{s} discussed in lecture. For example, to reduce the activation dimensions’s height and width by a factor of 2, you can use a 1x1 convolution with a stride of 2. The CONV2D layer on the shortcut path does not use any non-linear activation function. Its main role is to just apply a (learned) linear function that reduces the dimension of the input, so that the dimensions match up for the later addition step.

2.3、1x1卷积

    1x1卷积在二位图像上相当于图片的每个元素和一个卷积数字相乘。

    但是,在三维上,与1x1xnc卷积核进行卷积,相当于三维图像上的1x1xnc的切片,也就是nc个点的数值乘以卷积数值权重(按照一般来说应该是等权重的),最后通过ReLU函数,输出对应的结果。而不同的卷积核则相当于不同的隐藏层神经元结点。

    如下图,1x1卷积从根本上可以理解为对这32个不同位置都应用一个全连接,全连接层的作用是输入32个数字,输出结果是6x6x#filters,以便在输入层上实施一个非平凡(non-trivial)计算。

    

    600

1x1卷积的应用:

    (1)维度压缩:使目标的通道数量为1x1的卷积核个数

    (2)增加非线性:保持原维度,但是它给神经网络添加了一个非线性函数

三、Inception Network

    Inception Network的作用就是令我们无需去考虑在构建深度卷积神经网络时,使用多大的卷积核以及是否添加池化层等问题。

    Inception模块的架构:

    

    上图中,我们使用了same类型的padding来池化,使得输出维度跟其他输出一样,这样才能跟其他输出连接起来。

  但是这样的一个架构,会有一个计算成本问题(以5x5卷积核运算为例):总的计算成本为    28*28*32*5*5*192=120M

    因此,我们还有一个改进的架构:

    

    在这里,我们使用了1x1大小的卷积核作为过渡,将中间的蓝色部分也叫“bottleneck layer“,主要是为了减小通道数量,从而降低计算量,仍然以5x5的为例:总计算成本为1x1卷积层成本28*28*16*1*1*192=2.4M 与 5x5卷积层成本28*28*32*5*5*16=10.0M之和,共12.4M。同上一个架构相比计算成本减少了一个数量级。

    所以1x1卷积核作为”bottleneck layer“的过渡层,能够有效的减少卷积神经网络的计算成本。事实证明,只要合理的设置”bottleneck layer“,既可以显著减少上层的规模,同时也可以降低计算成本,而不会影响网络的性能。

Inception Network示例(GoogleLeNet):

    

    这是一张取自Szegety et al的论文中关于Inception网络的图片。

四、迁移学习

    (1)小数据集:应用其他研究者建立的模型和参数,用少量的数据仅训练最后自定义的softmax部分。

    

    (2)大数据集:如果我们有大量的数据,我们可以仅训练后面几层,而前面的直接使用已有的参数和模型。总之,随着数据集的增加,我们需要”freeze“的层数越来越少,最后如果我们有十分庞大的数据集,我们可以训练我们网络的所有参数,但是我们仍然可以将其他研究者训练好的模型参数作为我们的初始化参数来代替随机初始化的参数,从而加速我们的模型训练。

    

五、数据扩充

    与其他机器学习问题相比,在计算机视觉领域当下最主要的问题是没有办法得到足够多的数据。所以我们在训练计算机数据模型的时候,数据扩充会非常有用。

    数据扩充的方法:

    (1)镜像翻转(Mirroring):有垂直镜像对称等

    

    (2)随机裁剪 (Random Cropping)

    

    (3)色彩转换(Color shifting):会使学习算法对照片的颜色更改更具有鲁棒性

    

    为图片的RGB三个色彩通道进行增减值,如(R:+20,G:-20,B:+20);PCA颜色增强:对图片的主色的变化较大,图片的次色变化较小,使总体颜色保持一致。

六、计算机视觉现状

    数据和手工工程:

    

    在有大量数据的时候,我们更倾向于使用简单的算法和更少的手工工程。因为此时有大量数据,我们不需要为这个问题来精心设计特征,我们使用一个大的网络结果或者更简单的模型就能够解决。

    相反,在有少量数据的时候,我们从事的更多是手工工程,因为数据量太少,较大的网络结构或者模型很难从这些少量的数据中获取足够的特征,而手工工程实际上是获得良好表现的最佳方式。

    Tip for doing well:在基准研究和比赛中,下面的tips可能会有好的表现

    (1)Ensembling:独立的训练多个网络模型,输出平均结果或加权平均结果。

    (2)测试时的Multi-crop:将数据扩充应用到测试,并取平均结果。

 

总结:这一节主要是对LeNet-5、AlexNet、VGG的网络层进行了简单的介绍,对ResNet模块组成的ResNet网络和Inception块组成的Inception网络进行了介绍,ResNet对网络能有一个更大的深度有帮助,减少深层网络的训练错误。Inception主要使我们能够无需去考虑在构建深层卷积神经网络时的卷积核大小以及是否添加池化层等问题。这里有一个1x1卷积核的技巧,可以进行维度压缩和增加非线性。还有一些迁移学习和数据扩充的技巧......

参考内容:https://zhuanlan.zhihu.com/p/31044318