Andrew Ng 卷积神经网络笔记(第一周)

使用CNN的动机

CNN 多用于图像处理,选择CNN而非传统神经网络的一个原因是可以大大降低存贮和计算时间,因为输入的图像可能会很大。假设有一个1000乘1000像素的rgb图片,它的大小就是1000*1000*3,这意味着输入层有300万个维,如果用传统的神经网络,假设第一个隐藏层有1000个节点,那么第一个隐藏层就会需要上亿个参数。参数很多的话就很难找到足够多的训练样本来防止过拟合,而且空间和计算成本也会大大增加。下面我们就来看看如何通过卷积计算来解决这个问题。

卷积运算(convolution operation)

这里写图片描述
上图展示了5*5的一个黑白图片和一个3*3的filter,经过卷积操作后得出一个3*3的输出图像

卷积运算的变体

  • padding

    普通的卷积运算会出现两个问题:

    1. n*n的图像与f*f的filter卷积会输出(n-f+1)*(n-f+1)的图像,这意味着图像每经过一次运算就会变小一点
    2. 在角落和边缘的像素被filter覆盖的次数没有处于中心的像素多,这说明图像边角的信息可能被忽略

    解决方法就是在输入图像的四周加上宽度为p的边框,这样输入图像的大小变为(n+2*p)*(n+2*p),输出图像的大小变为(n+2*p-f+1)*(n+2*p-f+1)如下图所示:
    这里写图片描述
    那么到底要加多宽的边框呢?有两种常见的做法

    1. valid convolution:不加边框
    2. Same convolution:使输出图像的大小与输入图像的大小一致
      n = n+2*p-f+1
      p = (f-1)/2

      因此大多数情况下filter的边长都是奇数
  • strided convolution

    这里写图片描述
    在之前的卷积操作中,filter每次只向右或向下移动一个像素,我们可以让filter每次移动s步,这样输出图片的大小就变成了((n+2*p-f)/s+1) * ((n+2*p-f)/s+1),可以向下取整以保证它是一个整数,因为当filter超出了图片边界时就停止操作

convolution over volume

video demo

到目前为止,我们用的都是黑白的图像,它只有一个颜色频道。假如我们现在要处理具有rgb三个颜色频道的图像,要怎样做卷机操作呢?
这里写图片描述
输入图像的频道数必须和filter的频道数一样,每次将27个数全部加起来,得到输出图像中的一个像素
我们还可以用多个filter处理同一个输入图像,每个filter可以检测不同特征,这样,我们得到的输出图像的频道数和使用filter的个数是一样的
这里写图片描述

一层CNN

现在我们可以构造一层CNN了
这里写图片描述
1. 输入图像和每一个filter(参数)进行卷积得到一个频道数为一的输出
2. 将每个输出加上一个实数的偏移量(参数),并进行一次线性变换(RELU)
3. 将每个输出叠起来,进行一次非线性变换(activation function)

那么现在一层神经网络需要多少参数呢?假设这一层有10个3*3*3的filter,每个filter有27个权重(W),再加上一个偏移量(b),每个filter需要28个参数,因此共需280个参数。注意这个参数数目与输入图像的大小的无关的,因此大大减少了参数数目


实际上CNN共有三种类型的层,上面介绍的是卷积层(conv layer),下面我们来看另外两种层

Pooling layer

目的是为了减少计算时间并使模型更健壮

  • max pooling

    这里写图片描述
    选出被filter覆盖的区域中的最大值,独立计算输入图像的每个频道,所以输出图像的频道数与输入图像的相等

  • average pooling

    与max pooling相似,只是取平均值

所以对于pooling layer,要确定filter大小f,步长s,pooling layer很少用padding
注意pooling layer没有任何参数需要学习

fully connected layer

就是传统的神经网络

CNN例子

下面我们来看一个完整的CNN结构的例子,因为pooling layer没有任何参数,所以通常把它和之前的conv layer算成一层。可以将最后得到的向量带入sigmoid,或softmax函数中(用作分类)
这里写图片描述

总结:为什么要用卷积?

  1. 与fully connected NN比较,大大减少了参数量。因为输入图像的不同位置共用了相同的参数(filter)
  2. 稀疏的连接:在fully connected NN中,下一层的每个节点都受到上一层的所有节点的影响。而在CNN中,输出图像中的每个像素只受输入图像中一部分的影响,使模型更鲁棒
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值