第三章 卷积神经网络概述

本文介绍了卷积神经网络(CNN)的基本原理,包括卷积、卷积核、步长、填充以及池化的概念。卷积核用于图像处理,通过不同尺寸和参数的卷积核提取图像特征。池化层用于减少数据量并提取关键特征。文章还提到了卷积神经网络的发展历程,如LeNet,以及卷积层、池化层和全连接层在CNN结构中的作用。
摘要由CSDN通过智能技术生成

卷积神经网络概述

1. 什么是卷积神经网络

1.1 介绍
在之前的学习中,我们已经学习了多层神经网络的原理。目前神经网络主要用于无人驾驶,人脸识别和图片分类等领域,这些邻域都离不开和图像打交道。然而,如果把一整张图(几千万个像素)一起全部输入到多层神经网络中,我们处理起来会变得异常复杂和缓慢,针对这样的情况,我们需要一种新的算法来处理掉多余的信息,使得输入尽可能的简单,这就是卷积神经网络,它也是多层神经网络的一种。

1.2 卷积神经网络发展介绍
(1)1988年,张伟提出了第一个卷积神经网络—平移不变人工神经网络(Shift-Invariant Artificial Neural Network,SLANN),将其用于检测医学图像。参考论文因为太久远,只能找到张伟1996的论文,传送门:SLANN
(2)1989年,Yann LeCun构建了和SLANN类似的LeNet神经网络,它和现代的神经网络十分相似,可以说是卷积神经网络的"Hello world"。论文传送门:LeNet。在论文中,作者采用了随机梯度下降法(Stochastic Gradient Descent,SGD),来对权值进行更新,同时,也是在论文中首先使用了“卷积”(convolution)这个词。
(3)1998年,Yann LeCun等人在相继创建了LeNet 1-4之后,提出了LeNet5,在图像识别邻域大获成功,他们在其中提出池化(Pooling)的概念,这个我们在本章也将会学到,它可以对输入的特征进行筛选。如果在看完本章内容后,需要进一步了解卷积神经网络,那你必须要先学习一下LeNet5,因为它是当前所有著名卷积神经网络的基础。论文传送门:LeNet5神经网络
附上LeNet-5的经典图像:图片来自论文
(4)到现在AlexNet、VGG和Yolo等卷积神经网络方法已经家喻户晓,并且应用在图像识别,声音识别等方法面面,如果你感兴趣,你可以去找最新的卷积神经网络来看,现在我们先来大致介绍一下卷积神经网络的基本原理。

2.卷积

2.1 卷积核
卷积核(Convolution Kernel)就是一种在进行图像处理时,对输入的图像进行加权求和运行的核函数。(这么说可能很抽象,跟着本文走,马上就可以明白了,所谓卷积核其实就是一个nxn的矩阵[多为3x3])。在图像处理中,卷积核也常常被用于锐化和提取图像边缘。==一个卷积核,最重要的有两个方面,一个是卷积核的尺寸,一个就是卷积核的参数。==下图是一个拉普拉斯算子(就是一个3x3的卷积核):
图片来自网络,侵权请联系1700098233@qq.com

它的作用是提取一张图中的轮廓,效果如下:图片来自网络,侵权请联系1700098233@qq.com
上文已经说过,卷积核最重要的是尺寸和参数,尺寸和参数的不同,可以赋予卷积核不同的能力,比如提取轮廓或者是锐化等。卷积核的尺寸核参数是可以动态变化的,这就是卷积神经网络的精髓,在卷积神经网络中,卷积核相当于之前所说过的权值,每个两层之间可能都有一个或多个卷积核,它们在输出结果之后,和期望值进行比对,返回误差来改变卷积核的参数或者是尺寸,最后训练出能够精准提取我们想要的特征的卷积核。下面我们来讨论卷积核具体怎么用,也就是什么是卷积的问题。

2.2 什么是卷积
在学习卷积之前,我们要先知道什么是步长(Stride)和填充(Padding):
(1)步长:卷积的步长就是卷积核在图像上的移动的距离。图像是由像素块组成的,而像素块其实就是RGB的三维数字,如果是黑白图像,那就只有一维,相当于一个nxn的矩阵,那么我们现在就用这个9x9的矩阵来代表一个图像(你也可以想象成它是从一张大图片里面截取的一小部分),如下所示:
图片来自网络,侵权请联系1700098233@qq.com
那么卷积核是怎么在图片上移动的呢?它遵循一个从左到右,从上到下的原则,并且它不像贪吃蛇那样绕圈圈,而是如果往右,到了边缘,就直接往下走,并且折返到最左边,这是示例图画的有些抽象:
卷积核移动规则
假设步长为1,则,卷积核在之前那张图上的移动是这样的:
图片来自网络,侵权请联系1700098233@qq.com
(2)填充:边界就是图像的边,如果我们在上诉例子中把步长设成2,那么在移动一步以后,我们会发现如果继续移动会超出边界,这时候我们只能认为卷积核已经到达了边界,往下走2步,并且到最左边,导致有一列数据无法被卷积:图片来自网络,侵权请联系1700098233@qq.com
在这个时候,我们如果想要卷积核可以遍历所有的部分,我们就需要进行填充,最常见的填充方式是零填充(zero-padding),就是在图像周围加上一圈灰度值为0的像素,如下:
图片来自网络,侵权请联系1700098233@qq.com
(3)卷积运算:卷积的运算方式很简单,就是把卷积核上的数字和图片上的像素值一一对应,然后对应数字相乘,再把全部乘了以后的数字相加。例如,我们设置步长为3,用最上面的拉普拉斯算子在刚刚的图片上进行卷积,可以得到一个2x2的新图片:
图片来自网络,侵权请联系1700098233@qq.com
需要注意的是,因为像素值是没有负数的,我们一般把负数记为0,所以new image应该是:
自己的图
我们可以看到,经过池化之后,图像变小了,这时候保留下来的就是特征,具体是什么特征需要看是什么样的卷积核。

2.3 步长为1卷积以后图片尺寸的变化规律
步长为1是最常用的,此时如果输入矩阵的大小是n×n,卷积核的大小是f×f,填充值为p。
(1)不对图片填充,叫做valid卷积:p=0,输出图片大小为 (n-f+1)×(n-f+1),就是原本算1步,n-f就是还能走几步
(2)如果有了填充,则:(n+2p-f+1)×(n+2p-f+1)等于长度加了2p
(3)如果我们想要图片的尺寸不变,则叫做Same卷积:这时候根据第二个公式,可以知道n+2p-f+1=n,把p求出来可得,需要填充 p = f − 1 2 p=\frac{f-1}{2} p=2f1的边界。
(4)如果步长不是1也很简单,因为那只是把尺寸等比例裁剪了,比如走了s步,则
( 1 s × ( n + 2 p − f ) + 1 ) × ( 1 s × ( n + 2 p − f ) + 1 ) (\frac{1}{s}\times(n+2p-f)+1)×(\frac{1}{s}\times (n+2p-f)+1) (s1×n+2pf+1)×(s1×n+2pf+1)如果出现小数要向上取整。

3. 池化

3.1 介绍
池化其实和卷积一样,是卷积神经网络的重要操作,池化的目标和卷积一样,也是提取目标特征。池化的作用方法和过程甚至和卷积都是一模一样的,池化也有池化核的说法,也有步长之说,唯一的区别就是卷积核是有数字的,池化核没有,甚至可以说池化核就是个模板。池化分两种,平均池化和最大池化。我们现在来分别举例说一下。

3.2 平均池化
平均池化其实就是让池化核里面的数字取一个平均值,如图所示:
图片来自网络,侵权请联系170098233@qq.com
平均池化通过设置合理的步长,可以有效的压缩图片大小,求出整个图片像素的平均值,快速缩小图片尺寸,减少数据量。只是,目前平均池化已经濒临淘汰了,因为最大池化比它性能更好。

3.3 最大池化
最大池化的思路要比平均池化更加简单,就是在每一个池化核覆盖范围内,保留最大的那个像素值,作为新的像素值。这样一来,速度比平均池化快的同时,还更加合理。因为像素值最大的那个,往往是这一块的标志性颜色。还是用上面的图举例,如下:图片来自网络,侵权请联系1700098233@qq.com

4.卷积神经网络的组成

4.1 卷积层
卷积层一般是卷积神经网络的第一层,它通常都和输入的图片相连接。我们用一张图片来说明一下:
1700098233@qq.com

如图所示,第一层X为输入层在之前我们所学的输入是几个数字,现在我们的输入变成了一张图片,之后的W就是我们的卷积核,对应的是我们之前学习的权值 w w w,一共有n张每一个卷积核都对图片进行卷积操作,之后就会输出n张卷积以后的图像(卷积以后的尺寸大小如何计算可以看上面),对应我们之前学的隐含层的 y y y有卷积结果的隐含层叫做卷积层,卷积层和卷积层之间的连接和上面一样,只不过输出规模不会变了,因为n个图片和n个卷积核一一对应输出还是n张图片。当然,也有用m个卷积核(m是n的整数倍),来对n个图片进行二次卷积的,这个时候每一个被卷积的图片都对应 m n \frac{m}{n} nm个卷积核,这样可以提取到更多不同的特征,但是后果是会导致图片量大大增加(从n维变成m维),如下:
图片来自网络,侵权请联系1700098233@qq.com
4.2 池化层
池化层其实就是用来解决进行高维卷积以后,数据量过大的问题的。其操作在上文已经讲过,它不会增加或者减少图片的数量,只会减少每一张图片的尺寸。如图就是一个池化的例子:
图片来自网络,侵权请联系1700098233@qq.com
4.4 全连接层
全连接层其实不是一层,而是好多层,它实际上就是我们之前所学习的多层神经网络。我们之前的卷积和池化,其实一直都是对图片或者音频的数据进行筛选,并没有涉及到激活函数以及相关性的计算,这些都要留到全连接层来完成。我们可以这么想,在经过多次卷积核池化以后,原本的图片的特征被提取出来,很接近于多个单一的数字 x 1 , x 2 , x 3 . . . x n x_1,x_2,x_3...x_n x1,x2,x3...xn(我们可以说特征最后归为了一维,因为原本是n维的图片,最后变成了n个数字,实际上可能是很小的图片,这时候像素值也不多了,可以单独计算),这个时候像之前学习过的那样,后面可以设置多层隐含层,每层都有自己的激活函数,最后输出层也搞一个激活函数,得到最后结果,同时和期望值比对,如果不正确,则反向传播,一直循环,直到输出结果符合精度为止。更具体的操作将在后面实战中描述。
如下是全连接层的示例图:图片来自网络,侵权请联系1700098233@qq.com

5. 总结

到这里,我们其实已经学完了神经网络的全部基础知识,可以开始实战,当然,如果说要进一步学习机器学习的知识,博主建议大家去看看周志华的西瓜书,西瓜书非常全面且系统地描述了机器学习的全部知识,包括很多高深的技术。
如果你看不懂周志华的西瓜书,也可以移步去学习一下吴恩达的机器学习和深度学习视频,这些资源在B站和CSDN都很容易找到。后面几章和具体实战相关,也会介绍一些更高级的知识点,同时我也考虑出一期西瓜书的解读专栏,敬请期待。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值