吴恩达《深度学习工程师》Part4.Week2 深度卷积网络:实例探究

2.1 为什么要进行实例探究
过去的卷积神经网络研究很多都集中在如何设计不同的卷积层、池化层等部件来实现最佳效果。在构建自己的卷积神经网络时,参考别人已经构建好的模型,是一个很好的方法,因为很多模型在一个领域表现良好,也可以迁移到其他领域。

2.2 经典网络
1. LeNet-5网络

Lécun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.

这里写图片描述

图1 LeNet-5神经网络模型

LeNet-5是LeCun建立的文本识别模型,在较早的模型中padding操作还没有使用,这样数据的尺寸越来越小。此外,以往的激活函数多是logistic或tanh函数,而不是Relu函数。LeNet-5模型参数大约有6万个。
2. AlexNet

Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.

这里写图片描述

图2 AlexNet神经网络模型

AlexNet模型与LeNet-5模型类似,但是模型参数更多,大约有6000万个。与LeNet-5模型相比,AlexNet这么多的隐藏单元很善于处理具有类似特征的模块。此外,AlexNet采用Relu激活函数。

3.VGG-16

Simonyan K, Zisserman A. Very Deep Convolutional Networks for Large-Scale Image Recognition[J]. Computer Science, 2014.

这里写图片描述

图3 VGG-16神经网络模型

VGG是一种没有很多超参数的模型,只要专注于构造卷积层就可以了,整体结构较为简单。VGG-16模型中的16代表的是16个卷积层和池化层。VGG-16模型共有1.38亿个参数

2.3 残差网络
非常深的神经网络是很难训练的,因为会出现梯度消失和梯度下降的问题。可以通过远跳连接(Skip connection)将某一层的激活值喂给后面较深的层,从而构建出能够训练深层网络的ResNets。

ResNets是由残差块(residual block)构成的,如图4所示。

这里写图片描述
图4 残差块

正常的神经网络由图4中黑线所描述的流程进行,对 l l 层的激活值a[l],经过两次线性计算(乘以权重,加上偏置)和非线性计算(激活函数),得到 l+2 l + 2 层的输出 a[l+2] a [ l + 2 ] 。即:
a[l+2]=g(z[l+2]) a [ l + 2 ] = g ( z [ l + 2 ] )

残差块则通过设置一条捷径(short cut),如图4中蓝色线所示,来实现远跳连接。这时候第 l+2 l + 2 层的输入不仅仅是 z[l+2] z [ l + 2 ] ,还有 a[l] a [ l ]

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

在标准神经网络中构建多个残差块,就可以使其成为残差网络,如图5所示。

这里写图片描述图5 残差网络

对于标准神经网络,理论上当层数越多时,训练误差会越来越低。但是实际上,训练误差会先下降后升高,因为随着层数增加,神经网络会越来越难训练,如图6所示。但是残差网络却能够训练很深层的模型,甚至可以达到1000层以上。

这里写图片描述
图6 标准神经网络和残差训练误差随层数的变化规律

2.4 残差网络为什么有用?
标准神经网络在层数越来越多时,训练效率会越来越低。但是残差网络却没有这样的问题,以图7为例进行说明。

这里写图片描述
图7 标准神经网络和残差神经网络

图7中第一个模型是一个很深的神经网络,在 l l 层的激活值为a[l],这时候模型已经很难训练。
如果在这个模型后面加个残差块,则有:
a[l+2]=g(z[l+2]+a[l])=g(W[l+2]a[l+1]+b[l+2]+a[l]) a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] ) = g ( W [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] + a [ l ] )

在经过训练的模型中,正则化会使得权重 W[l+2] W [ l + 2 ] 和偏置 b[l+2] b [ l + 2 ] 压缩为近似为零的值,因此,上式变为:
a[l+2]=g(a[l]) a [ l + 2 ] = g ( a [ l ] )

残差网络训练这个式子并不困难,这就意味着即使增加了两层,训练效率也没有显著下降。而新增加的两层可以学习到新的特征,进而提高模型精度。

2.5 网络中的网络及1×1卷积
1×1卷积作用于一个通道的数据时,似乎没有明显的特点,仅仅是把原数据按倍数放大而已。但是当输入数据为多通道时,这个1×1×32的作用类似于权重,乘上输入数据中某个切片的32个数据,进行ReLU计算。

这里写图片描述
图8 1×1卷积

2.6 谷歌Inception网络介绍
当你构建卷积层时,可能会纠结到底使用1×1,3×3还是5×5的卷积核,或者是否使用池化层等,Inception网络能够自动帮你决定。


这里写图片描述
图9 Inception网络

如图9所示,当你不确定用哪个合适时,可以用图中所示的方式把它们堆叠起来,然后让网络自己确定用哪一个设置。

Inception网络的一个重要问题是计算的成本。

这里写图片描述
图10 计算成本的问题

图10所示的卷积层所需的计算次数为120,000,000。
如果在其中加入1×1卷积层的话,计算次数能够缩减为12,400,000,减小近10倍。这个1×1卷积层又叫做 bottleneck 层
这里写图片描述
图11 Bottleneck layer

2.7 Inception网络
以Google Inception网络为例,说明了Inception网络构建的原理,详细内容见论文。

Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[J]. 2014:1-9.

2.8 使用开源的实现方案
许多表现良好的神经网络模型参数众多,调参复杂,通过别人的开源实现方案来理解并构建自己的网络模型,将会极大提高你的效率。

2.9 迁移学习
在进行计算机视觉领域的模型构建时,相比于你自己随机初始化权重,你从网上下载别人训练好的权重作为初始化权重,再进行训练,然后迁移到你所需要研究的领域,效率将会极大提高。

2.10 数据扩充
在构建计算机视觉领域的模型是,经常会遇到数据量不足的问题,这时候可以通过数据扩充来增加数据。主要方法有:镜像,剪裁,扭曲,颜色变化等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值