课程4-第一周-卷积神经网络(Convolutional Neural Networks)

1.1计算机视觉(Computer Vision)

问题分类:
  • 图片分类(Image Classification);
  • 目标检测(Object detection);
  • 神经风格转换(Neural Style Transfer)。
挑战:

    数据的输入可能会非常大。例如一张 1000x1000x3 的图片,神经网络输入层的维度将高达三百万,使得网络权重 W 非常庞大。

后果:

    1.经网络结构复杂,数据量相对较少,容易出现过拟合
    2.所需内存和计算量巨大。

措施:

     因此,一般的神经网络很难处理蕴含着大量数据的图像。解决这一问题的方法就是使用卷积神经网络(Convolutional Neural Network, CNN)

1.2卷积运算(Convolutional Operation)

    以以边缘检测为例,来解释卷积是怎样运算的。

边缘检测
  • 垂直边缘(Vertical Edges)检测
  • 水平边缘(Horizontal Edges)检测

图片的边缘检测可以通过与相应滤波器进行卷积来实现。
举例:
以垂直边缘检测为例,原始图片尺寸为 6x6,中间的矩阵被称作滤波器(filter),尺寸为 3x3,卷积后得到的图片尺寸为 4x4,得到结果如下(数值表示灰度,以左上角和右下角的值为例):

可以看到,卷积运算的求解过程是从左到右,由上到下,每次在原始图片矩阵中取与滤波器同等大小的一部分,每一部分中的值与滤波器中的值对应相乘后求和,将结果组成一个矩阵。

如果将最右边的矩阵当作图像,那么中间一段亮一些的区域对应最左边的图像 中间的垂直边缘。

Sobel 滤波器和 Scharr 滤波器

增加了中间行的权重,以提高结果的稳健性。滤波器中的值还可以设置为参数,通过模型训练来得到。这样,神经网络使用反向传播算法可以学习到一些低级特征,从而实现对图片所有边缘特征的检测,而不仅限于垂直边缘和水平边缘。

垂直边缘检测和水平边缘检测的滤波器

1.3填充(Padding)

定义:
输入大小:n×n, 滤波器:f×f, 输出大小:(n−f+1)×(n−f+1)

问题:
  • 每次卷积运算后,输出图片的尺寸缩小;
  • 原始图片的角落、边缘区像素点在输出中采用较少,输出图片丢失边缘位置的很多信息。
解决办法

填充,增加矩阵的大小。通常将 0 作为填充值。
设每个方向扩展像素点数量为 p
则填充后原始大小: (n+2p)×(n+2p),滤波器大小保持 f×f不变, 输出大小: (n+2p−f+1)×(n+2p−f+1)。

分类
  • Valid 卷积:不填充,直接卷积。大小: (n−f+1)×(n−f+1)
  • Same 卷积:进行填充,并使得卷积后结果大小与输入一致, p = f − 1 2 p=\frac{f-1}{2} p=2f1
    f通常为奇数

1.4卷积步长(Stride)

卷积过程中,有时需要通过填充来避免信息损失,有时也需要通过设置步长(Stride)来压缩一部分信息。
设步长为 s,填充长度为 p,输入图片大小为 n×n,滤波器大小为 f×f,则卷积后图片的尺寸为: ( n + 2 p − f s + 1 ) × ( n + 2 p − f s + 1 ) (\frac{n+2p-f}{s}+1)×(\frac{n+2p-f}{s}+1) (sn+2pf+1)×(sn+2pf+1)
向下取整,向下取整反映着当取原始矩阵的图示蓝框完全包括在图像内部时,才对它进行运算。

目前为止我们学习的“卷积”实际上被称为互相关(cross-correlation),而非数学意义上的卷积。真正的卷积操作在做元素乘积求和之前,要将滤波器沿水平和垂直轴翻转(相当于旋转 180 度)。因为这种翻转对一般为水平或垂直对称的滤波器影响不大,按照机器学习的惯例,我们通常不进行翻转操作,在简化代码的同时使神经网络能够正常工作。

1.5高维卷积

RGB图片卷积运算,运算规则是,RGB的每一个channel和filter每一个channel先做卷积,然后将每个channel的卷积加总,作为结果矩阵的对应元素值,filter的channel要与原始图片的channel一样。

More-Filters

设输入图片的尺寸为 n×n×nc(nc为通道数),滤波器尺寸为 f×f×nc,则卷积后的输出图片尺寸为 (n−f+1)×(n−f+1)×n′c,n′c为滤波器组的个数。

1.5单层卷积网络

与之前的卷积过程相比较,卷积神经网络的单层结构多了激活函数和偏移量;而与标准神经网络:
在这里插入图片描述
相比,滤波器的数值对应着权重 W[l],卷积运算对应着 W[l]与 A[l−1]的乘积运算,所选的激活函数变为 ReLU。

对于一个 3x3x3 的滤波器,包括偏移量 b在内共有 28 个参数。不论输入的图片有多大,用这一个滤波器来提取特征时,参数始终都是 28 个,固定不变。即选定滤波器组后,参数的数目与输入图片的尺寸无关。因此,卷积神经网络的参数相较于标准神经网络来说要少得多。这是 CNN 的优点之一。

符号总结

在这里插入图片描述

1.6简单卷积网络示例

CNN网络例子:

其中,a[3]的维度为 7x7x40,将 1960 个特征平滑展开成 1960 个单元的一列,然后连接最后一级的输出层。输出层可以是一个神经元,即二元分类(logistic);也可以是多个神经元,即多元分类(softmax)。最后得到预测输出 y^。

随着神经网络计算深度不断加深,图片的高度和宽度 n[l]H、n[l]W一般逐渐减小,而 n[l]c在增加。

一个典型的卷积神经网络通常包含有三种层:卷积层(Convolution layer)、池化层(Pooling layer)、全连接层(Fully Connected layer)。仅用卷积层也有可能构建出很好的神经网络,但大部分神经网络还是会添加池化层和全连接层,它们更容易设计。

1.7池化层(Pooling)

作用:
是缩减模型的大小,提高计算速度,同时减小噪声提高所提取特征的稳健性。
分类:

  • 最大池化(Max Pooling),将输入拆分成不同的区域,输出的每个元素都是对应区域中元素的最大值。
  • 平均池化(Average Pooling),就是从取某个区域的最大值改为求这个区域的平均值。

池化过程类似于卷积过程,上图所示的池化过程中相当于使用了一个大小 f=2的滤波器,且池化步长 s=2。卷积过程中的几个计算大小的公式也都适用于池化过程。如果有多个通道,那么就对每个通道分别执行计算过程。

对最大池化的一种直观解释是,元素值较大可能意味着池化过程之前的卷积过程提取到了某些特定的特征,池化过程中的最大化操作使得只要在一个区域内提取到某个特征,它都会保留在最大池化的输出中。但是,没有足够的证据证明这种直观解释的正确性,而最大池化被使用的主要原因是它在很多实验中的效果都很好。

池化过程的特点之一是,它有一组超参数,但是并没有参数需要学习。池化过程的超参数包括滤波器的大小 f、步长 s,以及选用最大池化还是平均池化。而填充 p则很少用到。但需要注意,对max pooling而言,这些参数是超参。

池化输入维度:

输出维度:

关于max pooling的直觉解释: 元素较大的值,可能是卷积过程中提取到的某些特征(比如边界),而max pooling则在压缩了矩阵大小的情况下,保留每个分区内最大的输出,即保留了提取的特征。但理论上还没有证明max pooling的原理,max pooling应用的原因是在实践中效果很好。

1.8卷积神经网络示例

LeNet-5架构如下:
在这里插入图片描述

  • 通常Conv Layer和Pooling Layer合在一起算一个layer,因为pooling layer并没有参数训练
  • 常见的结构:Conv ==> Pool ==> Conv ==> Pool ==> FC ==> FC ==> softmax
  • 最终还会用FC层(全连接层),与一般NN的处理一样;并在输出层,应用softmax得到10个数字的概率。
  • 在整个网络中,Height和Width是逐渐递减的,但channel和filter是递增的。
  • 关于CNN如何选择超参:可以参考论文的经验。

参数:

1.9 为什么使用卷积

卷积过程有效地减少了 CNN 的参数数量
原因:

  • 参数共享(Parameter sharing):特征检测如果适用于图片的某个区域,那么它也可能适用于图片的其他区域。即在卷积过程中,不管输入有多大,一个特征探测器(滤波器)就能对整个输入的某一特征进行探测。
  • 稀疏连接(Sparsity of connections):在每一层中,由于滤波器的尺寸限制,输入和输出之间的连接是稀疏的,每个输出值只取决于输入在局部的一小部分值。

池化过程则在卷积后很好地聚合了特征,通过降维来减少运算量。

由于 CNN 参数数量较小,所需的训练样本就相对较少,因此在一定程度上不容易发生过拟合现象。并且 CNN 比较擅长捕捉区域位置偏移。即进行物体检测时,不太受物体在图片中位置的影响,增加检测的准确性和系统的健壮性。
直观展示CNN网络

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值