在图像处理中,神经网络的输入就是图像上的一个个像素,输入向量的维度就等于图像的像素数量,因此如果使用一般的神经网络(Fully?Connected?Feedforward?Network),会导致参数过多并且使得训练效率低下。于是,我们想到可以利用图像处理的一些特性得到一种更简单的神经网络,这就是卷积神经网络(CNN)。
1.图像处理的性质
(1)决定一个图片的“模式”(比如图片里是否有某个物体)可以通过图像里面的一小部分决定。比如通过查看图片中是否包含鸟嘴来判断图片中是否有鸟。
(2)相同的特征可以出现在图片中的不同位置,它们是等价的。比如一只鸟出现在图片的任何地方都应当被识别出来。
(3)图像可以做subsampling。比如从一个图像中删除某几行几列的像素,对于图像的辨识几乎没有影响。
2.CNN的训练过程
整体的过程如下图所示。输入图片以后,反复进行convolution和maxpolling,最后把flatten得到的结果输入一个Fully?Connected?Feedforward?Network得到结果。
(1)convolution?
convolution主要针对的是图像处理的前两个性质。在convolution过程中,需要训练n个filter,filter就是一个矩阵,它代表了一个特征,因此希望特征出现在多大的范围内,filter就要多大。
如下图所示,假设输入是一张黑白的图片,每个像素点用0或者1来表示。首先想象有一个与filter大小相同的框,在图像的最左上角框出一个矩阵,把这个矩阵跟filter矩阵对应位置的元素相乘后相加,得到一个值。然后把框向后移动一个stride的长度并重复同样的操作。最后得到一个新的矩阵。
这个过程就相当于经过了一层特殊的神经网络。如图所示,filter中的值就相当于对应的weight,因此convolution的训练过程与一般的神经网络一样,可以使用Backpropagation来训练。
(2)maxpooling
maxpooling的作用是进行subsampling的过程。把convolution得到的矩阵划分成几组,每组中取最大值,得到一个更小的矩阵。
(3)flatten
把多个filter产生的矩阵表示为一个一维向量作为下一个神经网络的输入。
CNN的应用不仅局限在图像识别上,包括deep?style(用一个图片的画风画出另一张图片),ALphaGo,语音识别(读频谱图)等。
|