深入理解卷积神经网络(卷积篇)(Convolutional Neural Networks, CNNs)
概述
卷积神经网络,也称为卷积网络,简称CNN,是神经网络的一种。其可用于一维时间序列的处理,也可以用于二维(如图像)序列的处理。目前,卷积神经网络可以说是应用最为广泛、效果最为出众的方法之一。
相比于普通的神经网络,其将传统的矩阵乘法改为卷积运算,这也是其名字的由来。
卷积操作
定义两个实值函数 x(t) , w(t) 则其卷积定义为:
通常记为:
上面的式子有点晦涩难懂,我们不妨回顾一下整数乘法:
一个 N 位的正整数 x 乘以一个 M 位的正整数 y ,其结果为 z ,毫无疑问, 是一个 M+N-1 位或 M+N 位的正整数。那么其第 k+1 位是怎么得到的?实际上(数组从下标0开始),
也就是
由于离散序列的求和即为连续序列的积分,对比卷积定义式,可以看出正整数乘法实际上就是一种卷积操作。
至此,相信读者对卷积都有了一定的认识。
在卷积神经网络中,我们通常称 为input, w 为kernel, s 为feature map。
下面给出一维离散序列和二维离散序列卷积的定义,这也是在卷积神经网络中所指的的卷积操作。
一维:
二维:
**
卷积满足交换律,故有
虽然 \Sigma 的区间范围均为无穷,但实际上,在计算机中,数组必定是有限的,故 m,n 只有有限个取值。进而上述卷积的代码实现并不难(这个需要优化,很多工具箱都已经实现好了卷基操作)。
在一些机器学习工具箱中,实际上是实现了一种类似的操作,并称之为卷积操作:
可以看出,两种定义的方式有着细微的差别,但也有相同点。本文中,我们将这两者均称为卷积操作。下面给出例子:
对于第二种定义方式:

对于第一种定义方式,只需要将上图的kernel旋转180°即可,其余是一样的。
在机器学习中,通常是通过一个学习算法去学习一个卷积的kernel,而不是单纯使用某个kernel进行卷积操作,所以,无论是第一种卷积方法还是第二种卷及方法,在卷积神经网络中都是一样的。(无非就是第二种方法学出来的kernel是第一种的kernel旋转180°)所以读者不必纠结于两种定义方式。
相比于正统的卷积定义方式,博主反而认为第二种看起来更加简单、直观。
**
