计算机视觉

课程:吴恩达深度学习

计算机视觉(p108-p150)

卷积网络

  • 补充:超参数
    • 机器学习模型中一般有两类参数:一类需要从数据中学习和估计得到,称为模型参数(Parameter)—即模型本身的参数。比如,线性回归直线的加权系数(斜率)及其偏差项(截距)都是模型参数。还有一类则是机器学习算法中的调优参数(tuning parameters),需要人为设定,称为超参数(Hyperparameter)。比如,正则化系数λ,决策树模型中树的深度。
    • 参数和超参数的区别:模型参数是模型内部的配置变量,需要用数据估计模型参数的值;模型超参数是模型外部的配置,需要手动设置超参数的值。机器学习中一直说的“调参”,实际上不是调“参数”,而是调“超参数”。
    • 哪些属于超参数?
      梯度下降法中的学习速率α,迭代次数epoch,批量大小batch-size,k近邻法中的k(最相近的点的个数),决策树模型中树的深度,等等。
    • 超参数的优化:
      有四种主要的策略可用于搜索最佳配置:
      • 照看(babysitting,又叫试错)
      • 网格搜索
      • 随机搜索
      • 贝叶斯优化
  1. 边缘检测示例:
    • 注意所采用filter的样式,如垂直边缘检测一般采用的数字组合 [ 1 0 − 1 1 0 − 1 1 0 − 1 ] \begin{bmatrix} 1& 0& -1 \\1& 0& -1 \\1& 0& -1 \end{bmatrix} ⎣⎡​111​000​−1−1−1​⎦⎤​; Sobel过滤器 [ 1 0 − 1 2 0 − 2 1 0 − 1 ] \begin{bmatrix} 1& 0& -1 \\2& 0& -2 \\1& 0& -1 \end{bmatrix} ⎣⎡​121​000​−1−2−1​⎦⎤​,它的优点在于增加了中间一行元素的权重,这使得结果的鲁棒性会更高一些; Scharr过滤器 [ 3 0 − 3 10 0 − 10 3 0 − 3 ] \begin{bmatrix} 3& 0& -3 \\10& 0& -10 \\3& 0& -3 \end{bmatrix} ⎣⎡​3103​000​−3−10−3​⎦⎤​。
    • 一种思想:9个数字当成参数,使用反向传播去让神经网络学习这9个数字。
  1. 卷积操作——padding:
    • 如果我们有一个 n × n n \times n n×n的图像,用 f × f f \times f f×f 的过滤器做卷积,那么输出的维度就是 ( n − f + 1 ) × ( n − f + 1 ) ( n − f + 1 ) \times ( n − f + 1 ) (n−f+1)×(n−f+1)。
    • padding解决每一步输出缩小和图像边缘的大部分信息丢失问题
    • padding:卷积操作之前对图像进行像素值为p的填充,则输出为 ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) ( n + 2 p − f + 1 ) \times ( n + 2 p − f + 1 ) (n+2p−f+1)×(n+2p−f+1)。
    • 选择填充多少像素,通常有两个选择,分别叫做Valid卷积和Same卷积:Valid卷积意味着不填充,Same卷积意味着填充后,输出大小和输入大小相同。
  1. 卷积步长 (Strided Convolutions):
    • 再加入卷积步长s后,输出维度计算式为: ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor ⌊sn+2p−f​+1⌋×⌊sn+2p−f​+1⌋
    • 注意:关于互相关和卷积的技术上理解,取决于数学教材or信号处理教材数学教科书,数学教科书上卷积的定义是过滤器镜像翻转(沿矩阵右上斜线),再元素乘积求和;按照机器学习的惯例,通常不进行翻转操作。从技术上说,这个操作可能叫做互相关更合适,但在深度学习文献中,按照惯例,我们将这(不进行翻转操作)也叫做卷积操作。
  1. 三维卷积 (Convolutions Over Volumes):
    • 原图像: n × n × c h a n n e l s n \times n \times channels n×n×channels
    • filter: f × f × c h a n n e l s f \times f \times channels f×f×channels(这两个通道数完全一样)
    • output: ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ × 1 \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times 1 ⌊sn+2p−f​+1⌋×⌊sn+2p−f​+1⌋×1
  1. 单层卷积网络 (One Layer of a Convolutional Network):
    • 原图像-> 多个不同的filter进行卷积得到多个输出-> 不同输出层增加各自的bias,再应用非线性激活函数得到输出结果-> (对应同一阶段的)输出层堆叠起来-> 最终得到 ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ × n f i l t e r \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times \left \lfloor\frac{n + 2p - f}{s} + 1\right \rfloor \times n_{filter} ⌊sn+2p−f​+1⌋×⌊sn+2p−f​+1⌋×nfilter​的矩阵
    • 过滤器用 W [ ? ] {W}^{[?]} W[?]表示,原始输入为 a [ 0 ] {a}^{[0]} a[0]。(表示法完全类似于之前logistic逻辑回归内容所讲)
    • 应用偏差和非线性函数之后,这一层的输出等于它的激活值 a [ l ] {a}^{[l]} a[l](即 n H [ l ] × n W [ l ] × n c [ l ] {n}_{H}^{[l]} \times {n}_{W}^{[l]} \times {n}_{c}^{[l]} nH[l]​×nW[l]​×nc[l]​)当你执行批量梯度下降或小批量梯度下降时,如果有 m 个例子,就是有 m 个激活值的集合,那么输出 A [ l ] = m × n H [ l ] × n W [ l ] × n c [ l ] {A}^{[l]} = m \times {n}_{H}^{[l]} \times {n}_{W}^{[l]} \times {n}_{c}^{[l]} A[l]=m×nH[l]​×nW[l]​×nc[l]​。
    • 参数W为所有过滤器的集合再乘以过滤器的总数量: f [ l ] × f [ l ] × n c [ l − 1 ] × n c [ l ] {f}^{[l]} \times {f}^{[l]} \times {n}_{c}^{[l - 1]} \times {n}_{c}^{[l]} f[l]×f[l]×nc[l−1]​×nc[l]​。
  1. 池化层 (Pooling Layers):除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性
    • max pooling
    • average pooling
  1. 使用卷积的优点:和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接
    • 参数共享:观察发现,特征检测如垂直边缘检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域
    • 稀疏连接:输出的某个像素值只取决于与filter相同大小的输入区域的像素值情况,其它像素值都不会对输出产生任影响。

经典网络

  1. 几个经典的神经网络结构:
      详见:https://blog.csdn.net/weixin_36815313/article/details/105778993
    • LeNet-5:valid卷积-平均池化-valid卷积-平均池化-全连接层-全连接层-softmax输出
      (此中使用的是sigmod函数和tanh函数,这种网络结构的特别之处在于各网络层之间有关联)
    • AlexNet:valid卷积-最大池化-same卷积-最大池化-再连续三次same卷积-最大池化-连续两个全连接层-softmax输出
      (AlexNet比LeNet表现更为出色的另一个原因是它使用了ReLu激活函数)
    • VGGNet:
      (VGG-16的这个数字16,就是指在这个网络中包含16个卷积层和全连接层。确实是个很大的网络,总共包含约1.38亿个参数,即便以现在的标准来看都算是非常大的网络。但VGG-16的结构并不复杂,而且这种网络结构很规整,都是几个卷积层后面跟着可以压缩图像大小的池化层,池化层缩小图像的高度和宽度。同时,卷积层的过滤器数量变化存在一定的规律,由64翻倍变成128,再到256和512。作者可能认为512已经足够大了,所以后面的层就不再翻倍了。无论如何,每一步都进行翻倍,或者说在每一组卷积层进行过滤器翻倍操作,正是设计此种网络结构的另一个简单原则。这种相对一致的网络结构对研究者很有吸引力,而它的主要缺点是需要训练的特征数量非常巨大。)
  1. 残差网络 (Residual Networks (ResNets)):
    • 非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。跳跃连接(Skip connection)可以从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。可以利用跳跃连接构建能够训练深度网络的ResNets。
      如果我们使用标准优化算法训练一个普通网络,比如说梯度下降法,或者其它热门的优化算法。如果没有残差,没有这些捷径或者跳跃连接,凭经验你会发现随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练,随着网络深度的加深,训练错误会越来越多。
      但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少。这种方式确实有助于解决梯度消失和梯度爆炸问题,让我们在训练更深网络的同时,又能保证良好的性能。也许从另外一个角度来看,随着网络越来深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。
    • 残差块(Residual block)
    • 残差块插入的时机是在线性激活之后,ReLU激活之前。
    • “跳跃连接”,就是指 a [ l ] {a}^{[l]} a[l]跳过一层或者好几层,从而将信息传递到神经网络的更深层(之所以能实现跳跃连接是因为same卷积保留了维度)。
    • 不太理解resnets不影响网络表现的原因:https://blog.csdn.net/weixin_36815313/article/details/105779620
    • 残差网络起作用的主要原因是这些残差块学习恒等函数非常容易
    • 普通网络和ResNets网络常用的结构是:卷积层-卷积层-卷积层-池化层-卷积层-卷积层-卷积层-池化层……依此重复。直到最后,有一个通过softmax进行预测的全连接层。
  1. 网络中的卷积及1x1卷积 (Network in Network and 1x1 Convolutions):
    • 1×1卷积可以压缩通道数量(当然也可保持或增加)并减少计算
  1. 谷歌 Inception 网络简介 (Google Inception Network Motivation):
    • Inception模块:使输出与输入长宽维度相同的,多种不同的过滤器( 1 ∗ 1 , 3 ∗ 3 , 5 ∗ 5 1*1,3*3,5*5 1∗1,3∗3,5∗5,max pooling)进行计算后,将各自的输出堆叠起来形成该模块。
    • Inception网络不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。
    • 如果你在构建神经网络层的时候,不想决定池化层是使用1×1,3×3还是5×5的过滤器,那么Inception模块就是最好的选择。我们可以应用各种类型的过滤器,只需要把输出连接起来。
    • 计算成本问题:通过使用1×1卷积来构建瓶颈层,从而大大降低计算成本(先利用1*1卷积缩小网络,再用其它filter扩大网络,只要合理构建瓶颈层,既可以显著缩小表示层规模,又不会降低网络性能,从而节省了计算)。
    • 以上内容结合构建inception网络详见:https://blog.csdn.net/weixin_36815313/article/details/105780151
    • Inception网络的一个细节,它确保了即便是隐藏单元和中间层也参与了特征计算,它们也能预测图片的分类,在Inception网络中,起到一种调整的效果,并且能防止网络发生过拟合。
上一篇:计蒜客 A1956 Sum


下一篇:JS练习(4)