吴恩达卷积神经网络笔记(Week2)

上周课程讲述了CNN的在多维上的实现过程,以及重要的卷积层(convolution、pooling、stride等,笔记链接)。这周课程将通过一些经典的网络层来学习如何设置这些超参数。

Classic networks:

  • LeNet-5

利用Lenet-5网络实现手写数字识别,输入是一个手写数字的灰度图像,输出是0-9的概率值,所以在最后一层用softmax。

在这里插入图片描述
模型中的参数大概有60,000个(KaTeX parse error: Expected 'EOF', got '\*' at position 3: (5\̲*̲5+1)*6+(5\*5+1)…),相比于现在包含千万级别参数的网络模型来说已经算是小模型了。
值得注意的是,模型遵循的模式是:每一层的高度和宽度在逐层下降,而通道数(channel)却在逐层上升;另一种模式则是:conv pool conv pool fc fc output 这种层排序。

在[LeCun et al., 1998. Gradient-based learning applied to document recognition]文章中常用sigmoid/tanh函数而不用ReLu;在现代的计算方式中每个filter 处理了每一维的通道,而在过去为了节省计算量和参数量,原始LetNet-5计算filter方式会更加复杂,其中不同的filter会处理输入快的不同通道;此外文章还提到在池化后有个非线性处理,例如sigmoid。(推荐阅读论文的ch2/ch3)

  • AlexNet
    在这里插入图片描述
    AlexNet 与 LeNet-5 很相似,但其网络结构比AlexNet更大更深,AlexNet大概有6千万参数。AlexNet 比LeNet 更好的因素是ReLu函数使用。

论文[ImageNet classification with deep convolutional neural natworks 201 2]还包含了多个GPU同步训练模型的方法以及多出local response normalization(局部响应归一层LRN)。

  • VGG
    VG结构更加简单,更能关注卷积层。

VGG模型在前两层用了卷积层(3 KaTeX parse error: Expected 'EOF', got '\*' at position 1: \̲*̲ 3 filter, s=1, same padding),VGG-16中的16表示有16层的网络,大概包含138M个参数。

论文[Very deep convolutional networks for large-scale image recognition,2015]
在这里插入图片描述

ResNet

利用残差块可以得到更深层的网络模型。

skip connection & residual block
a [ l ] a^{[l]} 按部就班传递到 a [ l + 2 ] a^{[l+2]} 层的过程叫做 main plain ,在此基础上利用short cut (从一层中激活并传递给下一层或更深的网络层),将原过程变成一个残差块。
在这里插入图片描述
需要注意的是, a [ l ] a^{[l]} 通过skip connection到达 a [ l + 2 ] a^{[l+2]} 层之前时,应在Relu函数之前。
在这里插入图片描述
上图是一个典型的由5个残差块堆叠而成的残差网络(Residual Network)

实际训练时,随着网络层数的增加,训练误差会先减后增,这是因为网络层数增加会导致梯度消失或梯度爆炸,而残差网络可以解决这类问题,随着层数不断增加,训练误差会不断减少直至不变。
在这里插入图片描述
为什么残差神经网络是有效的?

  • 易于学习恒等函数
    在原模型中添加残差网络层仍可以保持模型的训练能力,甚至在一些幸运的情况下可以得到更好的参数。
    在这里插入图片描述
    由于 a [ l ] a^{[l]} 是通过ReLu输出的,所以 a [ l ] a^{[l]} >=0,g( a [ l ] a^{[l]} )= a [ l ] a^{[l]} 。假设 w [ l + 2 ] w^{[l+2]} 以及 b [ l + 2 ] b^{[l+2]} 均为0,则 a [ l + 2 ] a^{[l+2]} = a [ l ] a^{[l]} ,这意味着残差模块容易学习恒等函数,即增加残差块之后并不影响模型的效果。

在残差块的relu函数中默认 a [ l ] a^{[l]} 以及 z [ l + 2 ] z^{[l+2]} 维度相同,所以可以看到残差块通常添加在 same 卷积层中。
a [ l ] a^{[l]} 以及 a [ l + 2 ] a^{[l+2]} 的输出层不同,就可以在g函数内添加一个参数权重 a [ l + 2 ] = g ( W s a [ l ] ) a^{[l+2]} = g(W_sa^{[l]}) ,其中 W s W_s 是一个256乘128的向量, W s W_s 可以是一个已经学习好的参数矩阵,也可以是待学习的参数矩阵。

ResNet 应用
推荐论文:Deep residual networks for image recognition, 2015

1 by 1 conv
本质是一个全连接网络,有时也被称为网中网。通常可以用1 by 1 conv 去缩减channel 通道的大小,也可以用来增加模型的非线性性,是网络学习到更加复杂的函数形式。

Inception

inception 是指不用去挑选卷积核大小 或 pool 这些层,而是可以做所有能做的并把结果连接起来(将多种选择结果堆叠在一起)。
在这里插入图片描述
以 5乘5的卷积核为例,计算成本为:需要做120M(1.2亿)次计算在这里插入图片描述
利用1by1构造成一个瓶颈层并最终实现乘法运算次数变为原来的1/10
在这里插入图片描述
利用1by1 实现上述提到的 Inception module ,减少计算量在这里插入图片描述
Inception network 就是由多个Inception module 完成的。

practical advice for using convnets

利用一些开源实现案例
github 查找一些开源实例

迁移学习

若当前问题的训练集很小,则可以在网上下载一些开源的应用,以及训练好的网络,例如:训练1000个物体的Imagenet模型,接下来就可以将用于输出的softmax层替换成现有问题的输出格式,而在训练中可以考虑冻结前面的层,只训练与输出有关的softmax层。


另一种方法是将x输入训练好的模型,将激活层的结果加以保存后,用此结果去训练一个softmax函数。

若当前训练数据的数目还算大,就可以只冻结网络的前几层,对后面的层做训练,总而言之,现有数据量越大,冻结的层越少,自己训练的层越多。

数据增强(data augmentation)

在训练计算机视觉模型时,无论是迁移学习,还是自己搭建网络从头开始学习,数据增强往往会对训练有所帮助。

common methods

  • 对图片做垂直镜像
    可以很好的保留图片的信息。在这里插入图片描述
  • 随机剪裁
    不是完美的数据增强方法,容易随机剪裁出一块不像猫的图片,解决的方法是:随机剪裁的部分占原图片的部分较大。
    在这里插入图片描述
  • 旋转(rotation)
  • 剪切 (shearing)
  • 局部弯曲 (local warping)

color shifting

对色彩的三个channel做一个随机的扰动。实际中,RGB的数值是通过某些概率分布获得的。通过这种数据增强手段,模型再对图像色彩变化时的健壮性表现更好。

在这里插入图片描述

有不同的方式采样RGB channel 值,其中一种称为PCA 色彩增强,Alexnet 论文中有此算法的细节。

在训练过程中利用增强数据
通过多个线程对失真数据(增强数据,一个线程可以是 color shifting,一个可以是 distortion)做训练后,将结果传递给其他线程做深度学习训练。

猜你喜欢

转载自blog.csdn.net/qq_39446239/article/details/89447498