吴恩达深度学习笔记-深度卷积模型:案例研究(第10课)

一、实例探究

经典的CNN网络:

  1. LeNet-5
  2. AlexNet
  3. VGG

除了CNN外,还有ResNet(残差网)
后面还会介绍Inception Neural Network

了解这些经典的网络,会对CNN的构建提供不错的想法。

二、经典网络

  • LeNet-5
    LeNet-5可以用于识别手写数字,下图是一个LeNet-5的模型结构;LeNet-5包含卷积层、池化层和全连接层,使用的池化层都是average pool,总共包含了60k个参数,从左至右看,图片的宽度和高度都在减小,信道数量在增加。
    在这里插入图片描述
    这类模型如今还经常使用,即一个或多个卷积层后面跟着一个池化层,然后又是若干个卷积层再接一个池化层,然后是全连接层,最后是输出。
    过去的人经常使用sigmoid和tanh函数,而不是relu;LeNet-5模型中使用的就是sigmoid和tanh函数。

  • AlexNet
    下图是AlexNet的结构图,图中的same表示same convolutions。
    在这里插入图片描述
    AlexNet与LeNet有很多相似之处,不过AlexNet要大得多,AlexNet大约有60M个参数;AlexNet使用了relu激活函数,POOL使用的max pool。

  • VGG-16
    VGG-16网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络。结构如下图:
    在这里插入图片描述
    VGG-16网络总共包含约1.38亿个参数;随着网络的加深,图像的高度和宽度都在以一定的规律不断缩小,每次池化后刚好缩小一半,而通道数量在不断增加,而且刚好也是在每组卷积操作后增加一倍。也就是说,图像缩小的比例和通道数增加的比例是有规律的。

三、残差网络

  • 非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。解决的方法之一是:跳跃连接(Skip connection),使用跳跃链接的网络被称为残差网络 (Residual Networks,ResNets)。

  • ResNets是由残差块(Residual block)构建的,什么是残差块呢?如下图两层的神经神经网络:
    在这里插入图片描述
    a[l]跳过一层直接连接到a[l+2]的输入,这就是跳跃连接,这两层的神经结点就叫做残差块。
    所以构建一个ResNet网络就是将多个这样的残差块堆积在一起,形成一个深度神经网络。

  • 下图是一个普通的神经网络(Plain network):
    在这里插入图片描述
    将此plain network变成ResNet的方法是每两层加上跳远连接,构成残差块,从而构成残差网:
    在这里插入图片描述当我们在训练普通神经网络时,随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练,训练错误会越来越多。
    但ResNets就不一样了,即使网络再深,训练误差呈下降趋势,就算是训练深达100层的网络也不例外。这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能。

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

如下图,在原有的神经网络上加上一个残差块,假设使用的激活函数是ReLU且a[l]≥0。当w[l+2]和b[l+2](可以通过正则化或者权重衰减可以将w和b约等于0)约等于0时,可以推导出a[l+2]=a[l]
在这里插入图片描述
也就是说,加上了残差块后的深层模型有着和原始模型不逊色的功能;若当网络多的两层是不合理的,残差网可以通过学习得到a[l+2]=a[l]这个等式,变成原来的网络。
另一方面,假设很深的时候梯度消失了,加了残差层的网络可以退回到梯度消失之前。

  • 还有一点值得注意
    (1)ResNets使用了许多same卷积保证a[l]和a[l+2]维度相同
    (2)当a[l]和a[l+2]维度不相同时,如a[l+2]维度时256,而a[l]维度是128,可以通过添加维度是256 * 128 的ws矩阵与a[l]相乘,将a[l]维度变成256。
    在这里插入图片描述ws不用设置,是网络通过学习得到的参数。
  • 下图显示了如何将CNN转换成ResNets:
    在这里插入图片描述
    网络中使用了大量的3 * 3same卷积,确保a[l]和a[l+2]维度相同

五、Networks in Networks and 1x1 Convolutions

  • 为什么要做1x1的卷积?
    对于单个1x1的卷积,意义相当于乘积:
    在这里插入图片描述
    对于多个filter,意义就不同了。如下图,卷积过程就是输入数据nc维度上的数据与filter相乘再相加,可以看作输入数据nc维度的全连接层,w就是filter。然后filter可以有多个,也就相当于有多个全连接的神经节点了。
    在这里插入图片描述
    所以1×1卷积可以从根本上理解为对这32个不同的位置都应用一个全连接层,全连接层的作用是输入32个数字(在36个单元上重复此过程),输出结果是6×6×#filters(filter数量),以便在输入层上实施一个非平凡(non-trivial)计算。
  • 1x1的卷积的应用:
    可以使用1x1的卷积在不减少nH和nW的情况下压缩通道数(nC),如下图:
    在这里插入图片描述
    当然也可以保持nC的维度依然是192,如此1×1卷积只是添加了一层非线性函数,让网络学习更复杂的函数。

六、谷歌Inception网络简介

Inception网络的作用是代替人工来确定卷积层中的过滤器类型,或者确定是否需要创建卷积层或池化层,虽然网络架构会因此变得更加复杂,但表现却非常好。

  • Inception网络可以在单层网络上使用多个不同尺寸的filter,进行same卷积操作,再将卷积结果拼接起来。此外,还可以将CONV layer与POOL layer混合,同时实现各种效果。
    在这里插入图片描述
    与其它只选择单一尺寸和功能的filter不同,Inception Network使用不同尺寸的filters并将CONV和POOL混合起来,将所有功能输出组合拼接,再由神经网络本身去学习参数并选择最好的模块。

  • 但是Inception Network计算量很大,如下图中的计算:
    在这里插入图片描述
    这里需要进行(28x28x32)x(5x5x192)≈1.2亿次乘法计算【有(28x28x32)个结果,每个结果需要(5x5x192)次乘法运算】
    但可以引入1x1 Convolutions来减少计算量,通常我们把该1x1 Convolution称为“瓶颈层”(bottleneck layer)如下图:
    在这里插入图片描述
    注意上面两幅图输出的维度都是一样的,但只需要进行(28x28x16)x(1x1x192)+(28x28x32)x(5x5x16)≈1204万次乘法运算,计算成本下降了十分之一,由此可见,1x1 Convolutions还可以有效减少CONV layer的计算量

七、Inception网络

在这里插入图片描述
将上图的Inception网络使用x1 Convolutions来减少计算量的流程可由下图表示:

在这里插入图片描述

  • 截取某篇论文里面的Inception网络图:
    图源
    在这里插入图片描述
    下面的一些分支所做的就是通过隐藏层来做出预测,分支和后面的输出是一样的,通过几个FC,然后通过softmax函数做出预测;这确保了即便是隐藏单元和中间层也参与了特征计算,它们也能预测图片的分类。它在Inception网络中,起到一种调整的效果,并且能防止网络发生过拟合

八、迁移学习

  • 如果要做一个计算机视觉的应用,相比于从头训练权重,或者说从随机初始化权重开始,如果你下载别人已经训练好网络结构的权重,你通常能够进展的相当快,用这个作为预训练(pre training),然后转换到你感兴趣的任务上。

  • 例如要做一个猫咪分类器,可以去GitHub下载框架和训练好后的权重,之后可以将softmax输出层换掉,只训练换掉后的输出层的权重即可,其他层的权重看作是“冻结”的。
    在这里插入图片描述
    通过pre training,即使手里的数据集不多,也能达到很好的效果。
    大多数深度学习框架都支持这种操作,有的框架会有trainableParameter=0这样的参数来“冻结”那些不需要训练权重的层。

  • “冻结”前面的层次还有一个好处,因为前面的冻结层都是固定的,所以可以先用X乘以训练好的权重,得到A(映射后的特征向量),然后把A当做新的网络的输入X,训练这个小的新的网络。【既然不训练softmax前的参数,那么就把softmax的输入值保存,下次直接输入,避免每次输入都要算一遍】

  • 当手里的数据很充足时,可以只冻结一部分层,训练不冻结层的权重,也可以用自己的隐藏层替换不冻结层。

  • 有一个规律,如果你有越来越多的数据,需要冻结的层数越少,能够训练的层数就越多。
    (1)数据少,只训练输出层(小规模);
    (2)数据中等,训练其中几层(中等规模);
    (3)数据充足,pre trian再训练整个网络。

数据扩充

  1. 镜像
    在这里插入图片描述

  2. 随机裁剪
    在这里插入图片描述

  3. 旋转、扭曲、局部弯曲

  4. 色彩变化:
    给R、G、B三通道加上不同的失真值
    在这里插入图片描述
    颜色失真或者是颜色变换方法,这样会使得学习算法对照片的颜色更改更具鲁棒性。

  5. PCA color augmentation(PCA颜色增强):
    也就是对图片颜色进行主成分分析,对主要的通道颜色进行增加或减少,可以采用高斯扰动做法。这样也能增加有效的样本数量。
    比如如果图片呈现紫色,即主要含有红色和蓝色,绿色很少,PCA颜色增强算法就会对红色和蓝色增减很多,绿色变化相对少一点,使总体的颜色保持一致。

十一、计算机视觉现状

对象检测:数据量较少;图片识别:中等数据量;语言识别:大量数据。
对于大量数据的项目,可以使用简单的网络和很少的hand-engineering(人工工程)就可以实现目标;对于少数据项目,需要很多的hand-engineering,对现有的数据进行处理。

所以可以认为知识来源于:1、大量的数据;2、hand-engineering/网络框架。

因为计算机视觉领域数据通常不够,所以较为依赖手工工程,这也是计算机视觉领域发展相当复杂网络架构地原因。

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

  • 集成:独立训练多个网络并平均其输出。
  • Multi-crop at test time: 对测试图像的多个版本运行分类器并平均结果。
    如下图:10-crop,对图片进行翻转和裁剪,然后进行测试,测试结果取均值作为输出。
    在这里插入图片描述

这两种方法计算成本较大,一般不适用于实际项目开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值