本篇将介绍卷积网络的内容。
在正式介绍卷积神经网络(Convolutional Neural Network简称CNN)之前,我想先回忆一下,卷积的概念,以便能够更好地理解卷积神经网络,并且能够从另外一个角度去理解卷积神经网络的实现原理。
在大学数学分析里傅里叶变换一章曾经介绍过卷积的概念
对于离散的序列,其卷积定义为
当我们从s域(对于序列来说是
其实卷积做的事情本质上就是移位相乘再积分。其实在时间域上很难看得出来卷积做的具体事情,但是在频率域上就一目了然了。我们都知道,当函数经过傅氏变换或者拉氏变换之后会变换成频率域的函数,而对于频率域的函数X(s)H(s)来说,我们可以通过调节H(s)来对X(s)做处理,比如可以将X(s)的高频部分进行衰减,就是低通滤波。所以到这里卷积的实际意义我们就能看得很清楚了,其实就是做“滤波”。
在图像上同理,我们也可以用信号里的做法去套用图像卷积。图像卷积,其实也是在“滤波”,通过卷积,我们可以得到自己想要的结果,对有用的特征进行加强,对无用的特征进行削弱。
下面介绍深度学习中的卷积网络基本实现方法
为什么要在神经网络里使用卷积呢?
1.有些有用的特征所占的像素远比一张图片像素量少
2.相同的特征可能出现在图片的不同部分,我们可以利用相同的“滤波器”对其进行检测
3.做完卷积,缩减像素数量,但是不会改变图片的整体信息
![]()
图片引用自李宏毅(台湾大学) 《机器学习》
上面的图片表现出来了一个卷积神经网络的基本结构,从上面图片我们能得出,一个卷积神经网络可能包含以下几个部分:
1.输入层
2.卷积层
3.池化层
4.全相联层
5.平整
6.输出层
其中卷积层与池化层可以多次出现,卷积层和池化层我们称为隐藏层。
①卷积层的介绍:
输入层将一张图片矩阵输入进来之后,经filter的作用,对图片进行卷积,操作过程如下:
![]()
![]()
图中filter是一个3×3的矩阵,filter矩阵先跟图片左上角的3×3子矩阵进行乘积相加得到3,然后filter向右移动一列,继续与下一个子矩阵做乘积相加得到-1,知道filter移动到了图片的右下角,这一次卷积结束,得到一个新的矩阵
⎛⎝⎜⎜⎜ 3 −1−3 1−3 −1 0−3−3−3 0 1 3−2−2−1⎞⎠⎟⎟⎟
②池化层
池化层要做的就是取每一个子矩阵,用每一个矩阵的元素最大值(或者是平均值)来取代该子矩阵
经过池化后变成:
③Flatten
这一个操作做的就是将卷积层池化层的得到的矩阵按元素展开,以便作为输入传到下一层
上面只是粗略介绍了卷积神经网络的实现方法,下面提出了几个问题
1.如果输入的图片是RGB模式,也就是说,输入的是不是一个n×m的二维矩阵,有可能输入的是n×m×l的三维矩阵,这个时候卷积应该怎么做?
2.如何去计算每一个卷积层的输入输出矩阵的具体形态(输入输出矩阵是几乘几的矩阵)?
3.卷积神经网络和全相联神经网络有什么联系?
4.CNN到底是在学习什么,如何让他学得更好(CNN的Gradient Descent怎么做?)
5.有的时候不一定只是一个卷积核,那如果有多个卷积核,应该怎么做?
对以上问题在这里不加赘述,请读者参考相关资料。