吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

1. Why look at case studies
本节展示几个神经网络的实例分析

为什么要讲实例?
近些年CNN的主要任务就是研究如何将基本构件(CONV、POOL、CF)组合起来形成有效的CNN,而学习了解前人的做法可以激发创造
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
2. Classic Networks

1)LeNet-5
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
该LeNet模型总共包含了大约6万个参数。当时Yann LeCun提出的LeNet-5模型池化层使用的是average pool,而且各层**函数一般是Sigmoid或tanh。现在,一般池化层使用max pool,**函数用ReLU。

2)AlexNet
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

图中same的意思是用padding填充使输出图像与输入图像保持大小一致。AlexNet模型与LeNet-5模型类似,只是要复杂一些,总共包含了大约6千万个参数。同样可以根据实际情况使用**函数ReLU。原作者还提到了一种优化技巧,叫做Local Response Normalization(LRN)。 而在实际应用中,LRN的效果并不突出

3)VGG-16
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
VGG中所有卷积都采用了padding填充使输出图像尺寸与输入图像一样,所有filter都是3x3,步长为1,图中CONV 64x2表示用64个filter卷积2次,其他同理。
VGG-16网络的一大优点是简化了神经网络的结构,16是卷积层和全连接层的总数,一共1.38亿个参数,虽然神经网络很大,但是结构很简单很规整。缺点就是需要训练的特征数量巨大。
这篇论文很吸引人的一点是,它揭示了图像缩小的比例和信道增加的比例是有规律且相关。
3. Residual Networks残差网络
神经网络层数越多,网络越深,就越容易发生梯度消失和梯度爆炸,解决方法之一就是残差网络。
1)residual block残差块

    (1)short cut捷径

     吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

如上图捷径就是a[l]跳过a[l+1]和z[l+2]一起生成a[l+2]

   (2)skip connection跳远连接
     跳远连接和捷径类似,它一次跳过一层或多层,可以作用到网络的更深处。

实验表明,这种模型结构对于训练非常深的神经网络,效果很好。另外,为了便于区分,我们把非Residual Networks称为Plain Network。与Plain Network相比,Residual Network能够训练更深层的神经网络,有效避免发生发生梯度消失和梯度爆炸。从下面两张图的对比中可以看出,随着神经网络层数增加,Plain Network实际性能会变差,training error甚至会变大。然而,Residual Network的训练效果却很好,training error一直呈下降趋势。
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
4. Why ResNets Work

1)为什么残差网络能够起作用

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

如上图,给一个很大的神经网络增加了两层,可以看出如果发生梯度消失,那么相当于将a[l]复制给a[l+2](**函数为ReLU的情况下),即恒等函数,也就是新增加的两层即使在最坏的情况下也不会导致网络性能下降,而且恒等函数的计算也是极为简单的,所以残差网络有利于构建更深的神经网络。
2)如果a[l]层和a[l+2]维度不同应该怎么办?

假设a[l]维度(n[l],1),a[l+2]维度是(n[l+2],1),这里引入一个权重矩阵Ws(n[l+2],n[l]),矩阵可以通过后向传播学习获得,也可以是填充值为0的固定矩阵。吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络


5. Networks in Networks and 1x1 Convolutions
1)1x1的卷积核/网络中的网络
1x1的卷积核对单信道的图像来说意义不大,但是对多信道的数据就会产生神奇的效果,如下图32个道,1x1卷积核的作用就是遍历32个道的数据,对应元素相乘相加,然后再带入**函数如ReLU中,卷积后得到一个单道图像,同理也可以通过多个卷积核获得多幅图像。这种1x1的卷积核也被称为network in network。
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
下面举例讲述其应用:
对于一幅图像,若要压缩它的高宽,可以通过pooling池化,那么如果道数目太多呢,可以用network in network,如下图,用32个1x1x192的卷积核可以将图像通道从192压缩到32:

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

总结:network in network其作用就是改变信道数目,可以是减少,也可以是增加。
6. Inception Network Motivation
1)Inception网络是什么?
CNN中需要决定filter的尺寸,是3x3还是5x5,需不需要增加POOL层,而Inception网络的就是不加选择的全部选用,然后让模型来选择。
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
如上图Inception Network使用不同尺寸的filters,并加入了POOL,将所有输出拼接,最后的输出为28x28x256,然后由神经网络去学习并选择最好的过滤器组合。
2)计算成本
Inception Network在提升性能的同时,会带来计算量大的问题,举例说明:

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

上图采用32个5x5x192的filter对原图进行有填充的same过滤,得到28x28x32的输出,那么其计算量就是5x5x192x28x28x32=120m,大约为1.2亿,计算量是非常大的,可以结合上一节的1x1的过滤器来减少计算量,如下图

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
总计算量变为28x28x16x192+28x28x32x5x5x16=12.4m,减少了90%,经过1x1的过滤器的输出层通常被称为“瓶颈层”(bottleneck layer),瓶颈层通常是某个对象的最小部分。

问题是这样做会不会降低系统性能?实验证明,如果合理设置瓶颈层,则可以实现不影响系统性能的情况下大大减少计算量。

7.Inception Network
本节介绍完整的Inception网络
1)Inception模块
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
如上图是一个标准Inception模块,值得一提的是MAXPOOL之后又对信道进行了压缩。
2)Inception网络
吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
由Inception模块构成网络,值得注意的是在网络中间的隐藏层也可以做softmax预测,它确保了即使是隐藏层或中间层的单元也参与了特征的计算,也可以进行不太差的图片分类(也就是结果预测),而且它对Inception网络起到了正则化(regularizing)的作用,能够防止过拟合。

8. Using Open-Source Implementation
本节主要讲述如何从GitHub上下载code:

比如对resnet感兴趣,那么可以Google输入resnet github,会搜索到很多不同的实现,选择其一打开会出现一个resnet实现的GitHub资源库,里面有详细的文字描述,点击绿色按钮download进行下载,会显示一个地址,copy地址:

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络
然后进行输入git clone <copy的地址>就可以将code下载到本地硬盘

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

9. Transfer Learning
计算机视觉的数据集:ImageNet, MS COCO, Pascal,很多深度学习的研究人员已经用这些数据进行了算法训练,你可以下载别人花费好几周甚至几个月训练的开源权重参数,作为初始值放到自己的神经网络上,即去掉最后一层softmax的输出层,加入自己的softmax输出层,然后重新训练参数。
1)在训练参数的时候,如果现有的数据集较小,那么建议将下载下来的权重参数冻结,也就是保持不变,只训练最后一层的参数。

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

不同框架对冻结参数的设置不同,有的是freeze=1,有的是trainableParameter=0,但是都支持设置是否训练某些层。

2)若现有的数据集较大,那么可以少冻结几层,即冻结前面n层,留下最后的m层跟替换后的softmax一起训练,或者直接删掉最后的m层替换成自己的隐藏层,再训练。

3)如果现有的数据集非常大,那么可以一层也不冻结,也就是用下载的权重当做初始值,然后替换softmax输出层之后,重新训练整个网络。

总的规律就是,自己的数据集越大那么冻结的层数就应该越少,使得能够训练的层数越多。

10. Data Augmentation数据增强
对于计算机视觉来说,通常都会存在数据不够的问题,数据增强对此比较有帮助。

数据增强的方法:

1)对已有图像进行镜像,随机裁剪,旋转,扭曲变换等重采样
2)色彩转换,如给RGB添加不同的失真值,因为光线的变化通常会引起图像颜色的差异,所以这样做是合理且有效的。

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

对于颜色变换,还可以采用PCA颜色增强(PCA color augmentation),比如某幅图像偏紫色,即RB的值较大,而G的值较小,那么PCA所做的就是对RB重采样力度大一些,而对G重采样力度小一些,使得图像更一致。具体的PCA color augmentation做法可以查阅AlexNet的相关论文。

11. State of Computer Vision
一般来说,如果data较少,那么就需要更多的hand-engineering,对已有data进行处理,比如上一节介绍的data augmentation。模型算法也会相对要复杂一些。如果data很多,可以构建深层神经网络,不需要太多的hand-engineering,模型算法也就相对简单一些。

在模型研究或者竞赛方面,有一些方法能够有助于提升神经网络模型的性能:

  • Ensembling集成: Train several networks independently and average their outputs.

  • Multi-crop at test time: Run classifier on multiple versions of test images and average results.即在测试时对图像进行扩充,具体做法是先镜像,然后对原图像分别进行中间、左上角、右上角、左下角、右下角的采样获得5幅图像,再对镜像后的图像进行同样操作获得5幅图像,一共获得10幅图像,也称10-crop方法

吴恩达《深度学习-卷积神经网络》2--深度卷积神经网络

但是由于这两种方法计算成本较大,一般不适用于实际项目开发。
最后,我们还要灵活使用开源代码:
  • Use archittectures of networks published in the literature

  • Use open source implementations if possible

  • Use pretrained models and fine-tune on your dataset