浅谈卷积神经网络

一、卷积神经网络(CNN)

我们先从全连接神经网络说起吧:
全连接NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。即由输入层+多个全连接层组成。

在这里插入图片描述
图一 全连接神经网络示例

上图的输入为一张28×28的黑白图像。可以看到,一张分辨率仅仅是 28x28 的黑白图像,就有近 40 万个待优化的参数。如果输入图像为彩色、尺寸更大时,则会有数量十分庞大的参数。

待优化的参数过多时,会带来一个问题:容易导致模型过拟合。
即学习网络把样本学习的“太好了”,并且很可能把训练样本自身的一些特点当成了所有潜在样本都具有的一般性质,这样会导致模型处理新样本的能力下降。

为避免这种现象,实际应用中会先对原始图像进行特征提取(用什么来提取?),把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。

卷积是一种有效提取图片特征的方法!

所以,卷积神经网络=输入层+卷积层+全连接层。
但是,实际应用时通常会按照需要在卷积和全连接层之间增加非线性激活函数和池化操作。(为什么增加?下文有介绍)
于是我们可以得出卷积神经网络的组成结构:

卷积神经网络=输入层+卷积层+非线性激活函数+池化层+全连接层

通常CNN中会包含多个卷积层。

下面,我们来看一下什么是卷积、非线性激活函数、池化:

1.卷积

卷积是一种有效提取图片特征的方法。 一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核内相对应点的权重,然后求和,如果图像和卷积核为多层,则把每一层求和的结果再相加,(激活函数部分对此处有补充) ,最后得到输出图片中的一个像素值。
在这里插入图片描述
图二 卷积计算过程
在这里插入图片描述
图三 卷积计算过程

举例说明:

在这里插入图片描述
图四 卷积举例

左边为输入的3232的3通道彩色图片,右边为一个卷积核,大小为55,深度为3.(这里注意:卷积核的深度必须和输入图像的深度相同。同时一般使用多个卷积核

在这里插入图片描述

图五 卷积举例
卷积核在输入图像上移动,输入图像和卷积核的对应位置元素相乘再求和。
在这里插入图片描述
图六 卷积举例

使用一个卷积核最终可以得到一个28×28×1的特征图。上图为使用了两个卷积核,所以得到的是一个28×28×2的特征图。

这里输出特征图的尺寸按照下式计算:
长(宽)=输入图像尺寸-卷积核尺寸+1
深度=卷积核的个数

卷积层还有一个特性就是“权值共享”原则:即给一张输入图片,用一个卷积核去扫这张图,卷积核里面的数就叫权重,这张图每个位置就是被同样的卷积核扫的,所以权重是一样的,也就是共享。所以卷积可以大幅度的减少参数数量。

2.非线性激活函数

因为卷积是线性操作,对于非线性变化的处理能力不足,所以引入非线性激活函数,增加模型的表达能力。作用过程简单来说便是在卷积结果的基础上加上一个偏置。
如图二中:
输出矩阵第一个值为:aw+bx+ey+fz
加上偏置b使得最终结果为:aw+bx+ey+fz+b
因此,通常输出图像中的像素值是由卷积结果+偏置值共同计算得出。

目前常用的非线性激活函数包括Relu等。

3.池化

对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征,如下:
在这里插入图片描述
图七 池化操作

上图是对一个224×224×64的输入图进行池化,步长为2,结果为112×112×64的特征图。
池化函数通常用输出的特定位置的邻接范围内输出结果的统计值来代替该位置的输出值,比如最大池化统计一个矩形区域内的最大值,平均池化统计矩形区域内的平均值。池化操作可以使得输出尽可能不受输入细微变化的影响。

进行池化操作需要制定一个filter的尺寸、stride(步长)、pooling(池化)方式。
在这里插入图片描述
图八 最大池化示例

如上图所示,输入图像为4×4×1,filter大小为2×2(池化核深度通常为1),步长即每次filter在输入图像上的移动的距离,步长为2表示每次移动两个像素点。这里采用了最大池化方式,统计重合区域中的最大像素值最为输出值。开始,filter在图像的红色区域,统计最大值为6作为输出,然后移动步长个像素点到棕灰色区域,输出最大值8,依次进行直到filter遍历整个输入图像,最终得到2×2×1的输出值。

最终输出图片的尺寸按照下式计算 (若结果为小数则只取整):
长(宽)=(原输入图片尺寸-filter尺寸)/步长 +1
深度不变

如果想让池化的输出图片是预期的尺寸应该怎么做?padding!
比如:一张110×110×1的输入图片,用2×2的filter,步长为2进行池化,正常情况下会得到55×55×1的结果。但是我们希望得到56×56×1的结果,那么我们可以利用padding在输入图片的周围补一圈0,使得图片大小变为112×112×1。从而使得结果与预期相同。

参考及文中图片来源:

  1. https://blog.csdn.net/weixin_42451919/article/details/81381294
  2. https://blog.csdn.net/m_buddy/article/details/80412499
  3. 人工智能实践:tensorflow笔记
    https://www.icourse163.org/course/PKU-1002536002
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值