吴恩达 《卷积神经网络》 笔记(一)卷积神经网络

计算机视觉(CV

  • Computer Vision是深度学习应用的主要方向之一。
    C V 问 题 { 图 像 分 类 ( I m a g e C l a s s i f i c a t i o n ) 目 标 检 测 ( O b j e c t D e t e c t i o n ) 神 经 风 格 转 换 ( N e u r a l S t y l e T r a n s f e r ) CV问题\left\{ \begin{aligned} &图像分类(Image Classification)& \\ &目标检测 (Object Detection)& \\ &神经风格转换 (Neural Style Transfer) \\ \end{aligned} \right. CVImageClassificationObjectDetectionNeuralStyleTransfer
  • 使用传统神经网络处理机器视觉的一个主要问题是输入层维度很大。这会造成两个后果,一是神经网络结构复杂,数据量相对不够,容易出现过拟合;二是所需内存、计算量较大。解决这一问题的方法就是使用卷积神经网络(CNN)。

边缘检测

  • 对于计算机视觉,神经网络由浅层到深层,分别可以检测出图片的边缘特征 、局部特征(例如眼睛、鼻子等)、整体面部轮廓。

  • 最常检测的图片边缘有两类:一是垂直边缘(vertical edges),二是水平边缘(horizontal edges)。

  • *表示卷积操作。python中,卷积用conv_forward()表示;tensorflow中,卷积用tf.nn.conv2d()表示;keras中,卷积用Conv2D()表示。

  • 垂直边缘检测和水平边缘检测的滤波器算子如下所示:在这里插入图片描述

  • 还有其它常用的滤波器(filters),例如Sobel filter和Scharr filter。这两种滤波器的特点是增加图片中心区域的权重。
    在这里插入图片描述

  • 在深度学习中,想检测图片的各种边缘特征,而不仅限于垂直边缘和水平边缘,滤波器的数值一般需要通过模型训练得到,类似于标准神经网络中的权重W一样由梯度下降算法反复迭代求得。CNN的主要目的就是计算出这些滤波器的数值。确定得到了这些滤波器算子后,CNN浅层网络也就实现了对图片所有边缘特征的检测。

Padding

  • 如果原始图片尺寸为n x n,滤波器尺寸为f x f,则卷积后的图片尺寸为(n-f+1) x (n-f+1),这样会带来两个问题:
    1.卷积运算后,输出图片尺寸缩小
    2.原始图片边缘信息对输出贡献得少,输出图片丢失边缘信息
  • 为此,可以使用padding方法,即把原始图片尺寸进行扩展,扩展区域补零,用p来表示每个方向扩展的宽度。在这里插入图片描述若要保证卷积前后图片尺寸不变,则p应满足: p = f − 1 2 p= \frac{f-1}{2} p=2f1
  • 没有padding操作, p = 0 p=0 p=0,我们称之为“有效卷积(Valid convolutions)”;有padding操作, p = f − 1 2 p= \frac{f-1}{2} p=2f1,我们称之为“相同卷积(Same convolutions)”。

卷积步长

  • 步长表示滤波器在原图片中水平方向和垂直方向每次的步进长度。
  • 相关系数(cross-correlations)与卷积(convolutions)之间是有区别的。实际上,真正的卷积运算会先将filter绕其中心旋转180度,然后再将旋转后的filter在原始图片上进行滑动计算。而相关系数的计算过程则不会旋转。目前为止我们介绍的CNN卷积实际上计算的是相关系数,而不是数学意义上的卷积。

单层卷积网络

  • 卷积神经网络的单层结构如下所示:

在这里插入图片描述相比之前的卷积过程,CNN的单层结构多了激活函数ReLU和偏移量b。
每个滤波器组有3x3x3=27个参数,还有1个偏移量b,则每个滤波器组有27+1=28个参数,两个滤波器组总共包含28x2=56个参数。
选定滤波器组后,参数数目与输入图片尺寸无关所以,就不存在由于图片尺寸过大,造成参数过多的情况。例如一张1000x1000x3的图片,标准神经网络输入层的维度将达到3百万,而在CNN中,参数数目只由滤波器组决定,数目相对来说要少得多,这是CNN的优势之一

简单卷积网络示例

  • 一个简单的CNN网络模型:
    在这里插入图片描述
  • CNN有三种类型的layer:
    { 卷 积 层 ( C O N V ) 池 化 层 ( P O O L ) 全 连 接 层 ( F C ) \left\{ \begin{aligned} &卷积层(CONV)& \\ &池化层(POOL)& \\ &全连接层(FC) \\ \end{aligned} \right. CONVPOOLFC

池化层

  • 池化层(Pooling layers)是CNN中用来减小尺寸,提高运算速度的。只保留区域内的最大值(特征),减小noise影响,让各特征更具有健壮性。
  • Pooling layers的做法比convolution layers简单许多,没有卷积运算,仅仅是在滤波器算子滑动区域内取最大值,即max pooling。
    注意 超参数p很少在pooling layers中使用。

为什么使用卷积

  • 相比标准神经网络,CNN的优势之一就是参数数目要少得多。参数数目少的原因有两个:
  1. 参数共享:一个特征检测器(例如垂直边缘检测)对图片某块区域有用,同时也可能作用在图片其它区域。

  2. 连接的稀疏性:因为滤波器算子尺寸限制,每一层的每个输出只与输入部分区域内有关。

  • 除此之外,由于CNN参数数目较小,所需的训练样本就相对较少,从而一定程度上不容易发生过拟合现象。
  • 而且,CNN比较擅长捕捉区域位置偏移。也就是说CNN进行物体检测时,不太受物体所处图片位置的影响,增加检测的准确性和系统的健壮性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值