zoukankan      html  css  js  c++  java
  • Coursera Deep Learning笔记 深度卷积网络

    参考

    1. Why look at case studies

    介绍几个典型的CNN案例:

    • LeNet-5

    • AlexNet

    • VGG

    Residual Network(ResNet): 特点是可以构建很深的神经网络

    Inception Neural Network

    2. Classic Networks

    典型的 LeNet-5 结构包含CONV layer,POOL layer 和 FC layer

    • 顺序一般是 CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer,即 (hat{y})

    • 下图所示的是一个数字识别的LeNet-5的模型结构:

    LeNet模型 总共包含了大约6万个参数

    • Yann LeCun提出的 LeNet-5模型 池化层使用的是:average pool

    • 各层激活函数一般是Sigmoid和tanh。现在,我们可以根据需要,做出改进,使用 max pool 和 激活函数ReLU。


    AlexNet模型 其结构如下所示:

    • AlexNet模型与LeNet-5模型类似,更加复杂,共包含了大约6千万个参数

    • 同样可以根据实际情况使用 激活函数ReLU。有一个优化技巧,叫做Local Response Normalization(LRN)。 而在实际应用中,LRN的效果并不突出。


    VGG-16模型 更复杂,其 CONV layer 和 POOL layer 设置如下:

    • CONV = 3x3 filters, s = 1, same

    • MAX-POOL = 2x2, s = 2

    VGG-16结构如下所示,VGG-16的参数多达1亿3千万。:

    3. ResNets

    如果神经网络层数越多,网络越深,源于 梯度消失梯度爆炸 的影响,整个模型难以训练成功。

    解决的方法:

    • 人为地让神经网络 某些层 跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。

    • 这种神经网络被称为 Residual Networks(ResNets)

    • Residual Networks由许多 隔层相连的神经元子模块 组成,称之为 Residual block。

    单个Residual block的结构如下图所示:

    上图中红色部分就是skip connection,直接建立 (a^{[l]})(a^{[l+2]}) 之间的隔层联系。相应表达式:

    [z^{[l+1]} = W^{[l+1]}a^{[l]} + b^{[l+1]} \ \ a^{[l+1]} = g(z^{[l+1]}) \ \ z^{[l+2]} = W^{[l+2]}a^{[l+1]} + b^{[l+2]} \ \ a^{[l+2]} = g(z^{[l+2]} + a^{[l]}) ]

    (a^{[l]})直接隔层 与 下一层的线性输出相连,与 (z^{[l+2]})共同通过激活函数 (Relu) 输出 (a^{[l+2]}).

    由多个Residual block组成的神经网络就是Residual Network。

    实验表明,这种模型结构对于 训练非常深的神经网络,效果很好。另外,为了便于区分,我们把 非Residual Networks称为 Plain Network。

    Residual Network的结构如图所示:

    • 与Plain Network相比,Residual Network能够训练更深层的神经网络,有效避免发生发生梯度消失和梯度爆炸

    • 下图对比中可看出,随着神经网络层数增加,Plain Network实际性能会变差,training error甚至会变大。然而,Residual Network的训练效果却很好,training error一直呈下降趋势。

    4. Why ResNets Work

    • 如图,输入 (x) 经过很多层神经网络后,输出 (a^{[l]})(a^{[l]})经过一个 Residual block 输出 (a^{[l+2]})

    • (a^{[l+2]}) 表达式:

    [a^{[l+2]} = g(z^{[l+2]} + a^{[l]}) = g(W^{[l+2]}a^{[l+1]} + b^{[l+2]} + a^{[l]}) ]

    • 输入x经过Big NN后, 若(W^{[l+2]}approx0)(b^{[l+2]}approx0),则有:

    [a^{[l+2]}=g(a^{[l]})=ReLU(a^{[l]})=a^{[l]} when a^{[l]}geq0 ]

    • 即使发生梯度消失,(W^{[l+2]}approx0)(b^{[l+2]}approx0)(a^{[l+2]})(a^{l]})之间也有线性关系。即:identity function

    • (a^{[l]}) 直接连到 (a^{[l+2]}),从效果来说,相当于直接忽略了(a^{[l]}) 之后的两层神经层.

    • 看似很深的神经网络,其实由于许多Residual blocks的存在,弱化削减了某些神经层之间的联系,实现隔层线性传递,而不是一味追求非线性关系.

    注意:

    • 如果Residual blocks中 (a^{[l]})(a^{[l+2]}) 的维度不同,通常可以引入矩阵 (W_s),与 (a^{[l]}) 相乘,使得 (W_s∗a^{[l]}) 的维度与 (a^{[l+2]})一致。

    • 参数矩阵 (W_s) 有来两种方法得到:

      • 一种是将 (W_s) 作为学习参数,通过模型训练得到.

      • 一种是固定 (W_s) 值(类似单位矩阵),不需要训练,(W_s)(a^{[l]}) 的乘积仅使得 (a^{[l]}) 截断或者补零。

    • 如图,CNN中 ResNets 的结构:

    • ResNets同类型层之间,例如CONV layers,大多使用same类型,保持维度相同。

    • 如果是不同类型层之间的连接,例如CONV layer与POOL layer之间,如果维度不同,则引入矩阵 (W_s)

    5. Networks in Networks and 1x1 Convolutions

    一种新的CNN结构,即1x1 Convolutions,也称Networks in Networks。

    这种结构的特点:滤波器算子filter的维度为1x1。对于单个filter,1x1的维度,意味着卷积操作等同于乘积操作

    对于多个filters,1x1 Convolutions的作用类似 全连接层的神经网络结构。效果等同于Plain Network中 (a^{[l]})(a^{[l+1]}) 的过程。

    1x1 Convolutions可以用来 缩减输入图片的通道数目

    6. Inception Network Motivation

    上面我们介绍的CNN单层的滤波算子filter尺寸是固定的,1x1或者3x3等。

    Inception Network (初始网络)

    • 在 单层网络 上可以 使用多个 不同尺寸的filters,进行same convolutions,把各filter下得到的输出拼接起来。

    • 除此之外,还可以将CONV layer与POOL layer混合,同时实现各种效果。但是要注意使用same pool。

    总结: Inception Network使用不同尺寸的filters,并将CONV和POOL混合起来,将所有功能输出组合拼接,再由神经网络本身去学习参数并选择最好的模块

    Inception Network在提升性能的同时,会带来计算量大的问题。例如:

    • 此CONV layer需要的计算量为:28x28x32x5x5x192=120m,其中m表示百万单位。

    • 可以看出但这一层的计算量都是很大的。

    • 为此,我们可以引入1x1 Convolutions来减少其计算量,结构如下图所示:

    • 通常把该1x1 Convolution称为“瓶颈层”(bottleneck layer)。

    • 引入bottleneck layer之后,总共需要的计算量为:28x28x16x192 + 28x28x32x5x5x16=12.4m。

    • 明显地,虽然多引入了1x1 Convolution层,但是总共的计算量减少了近90%。由此可见,1x1 Convolutions还可以有效减少CONV layer的计算量。

    7.Inception Network

    引入1x1 Convolution后的Inception module如下图所示:

    多个Inception modules组成Inception Network,效果如下图所示:

    上述Inception Network除了由许多Inception modules组成之外,网络中间隐藏层也可以作为输出层Softmax,有利于防止发生过拟合。

    8. Using Open-Source Implementation

    9. Transfer Learning

    10. Data Augmentation(数据增强)

    • 常用的Data Augmentation方法是对已有的样本集进行Mirroring和Random Cropping

    • 另一种Data Augmentation的方法是color shifting。

      • color shifting就是对图片的RGB通道数值进行随意增加或者减少,改变图片色调。

    11. State of Computer Vision

    神经网络需要数据,不同的网络模型所需的数据量是不同的。

    Object dection,Image recognition,Speech recognition所需的数据量依次增加。

    • 如果data较少,那么就需要更多的hand-engineering,对已有data进行处理,比如上一节介绍的data augmentation

    一些方法能够有助于提升神经网络模型的性能:(计算成本太大,不适用实际项目开发)

    • 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.

  • 相关阅读:
    0528习题 11-15
    通过文档算学生的平均分
    给定两个列表,转换为 DataFrame 类型
    一千美元的故事(钱放入信封中)
    pandas 几个重要知识点
    python文件操作
    是否感染病毒
    安装 kreas 2.2.4 版本问题
    小技巧_01
    【Liunx】Linux 系统启动过程
  • 原文地址:https://www.cnblogs.com/douzujun/p/13154258.html
Copyright © 2011-2022 走看看