吴恩达深度学习课程笔记(四):卷积神经网络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 ] 除了主路以外,直接在 a[l+2] a [ l + 2 ] 的激活函数前输入。
也就是 a[l+2]=g(z[l+2]+a[l]) a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] ) 。
构成一个残差块。
ResNet网络就是由很多这样的残差块构成。
残差网络 (Residual Network)
上图,普通网络(plain network)使用跳远连接,构成5个残差块,生成了一个残差网络。
随着网络层数的增加,理论上训练误差应该越来越小;但在普通网络上却不是这样;而残差网络可以做到。
2.4 残差网络为什么有用?
深度网络存在退化问题,即随着深度的加深,训练误差反而加大。
给一个普通网络加入残差块,如图所示。
整个网络使用Relu激活函数,那么,所有的激活值a>=0。
如果使用 L2 L 2 正则化或者权重衰减,会压缩 w[l+2] w [ l + 2 ] 的值。
如果对 b b 使用权重衰减,也可以达到相同效果。
如果