在之前,我总结了关于计算机神经网络与梯度下降的核心,详见下文链接 :
一文看懂计算机神经网络与梯度下降
本文主要会对图像相关的机器学习中最为重要的网络,卷积神经网络作个人的理解分析。
1. 为什么要使用卷积神经网络
在讲述原理之前,我们先来解释为什么我们在图像及视频等等领域的机器学习中要使用CNN。我们都知道,使用多层感知器,有隐藏层的深度神经网络可以帮助我们解决分类,聚合,回归问题。但当我们的输入输出转变为高维度的数据,例如图片时,不可避免地要面临神经元过多,参数量过大的问题。假设我们使用一张720*480的图片作为输入,一张图片对应的参数量就已经达到了345600个,如果我们单纯地将数据压为一维向量并继续使用全连接的神经网络,那不可避免的会极大增加运算成本,降低模型的效率,显然是不科学的。同样的,对于图像而言,如果说像素点的灰度值或RGB值可以对应我们在一维数据中使用的数值,那么图像的空间性在我们将其转变为一维后实际上是被抛弃了,这会导致我们忽略了图像局部形态所包含的信息,使得一些非常轻微的平移旋转对结果产生翻天覆地的变化,这是我们不能容忍的。对于我们来说,两个图片中不同位置的物体所包含的含义应当是一致的,即只应当考虑图片的相对位置而非绝对位置。
在接下来的部分,我会着重阐述卷积神经网络的原理,其中包含一些个人的看法理解。
2. 图像处理中的卷积核
要想理解卷积神经网络的运作,首先必须理解图像处理中卷积的含义。需要注意的是,虽然卷积神经网络中有卷积二字,但是其实他与传统意义上数学定义的卷积是有区别的。更为准确的叫法应当称之为协相关神经网络,而非卷积神经网络。如下图所示,我们以一个常见的3*3的卷积核为例,目标像素点对应的值由其周围对应的原像素点和卷积核计算协相关得来。
由上图我们不难发现,经过卷积后的目标图像中的每一个像素点都对应了原图像中的局部特征,使用不同的卷积核,就可以从原图像中提取出不一样的局部特征了。计算目标图像的方式,是将卷积核在原图像上滑动,与各个部分的图像分别计算卷积直到遍历全部的原图像。
hn(i,j)=(hn−1∗ωk)(i,j)=∑n=−d−12d−12∑m=−d−12d−12hn−1(i+n,j+m)∗ω(n,m)h^n(i,j) = (h^{n-1}*\omega_k)(i,j) = \sum^{\frac{d-1}{2}}_{n=-\frac{d-1}{2}}\sum^{\frac{d-1}{2}}_{m=-\frac{d-1}{2}}h^{n-1}(i+n,j+m) * \omega(n,m)hn(i,j)=(hn−1∗ωk)(i,j)=n=−2d−1∑2d−1m=−2d−1∑2d−1hn−1(i+n,j+m)∗ω(n,m)
上式就是图像处理中使用卷积核进行卷积运算的数学定义,其中 hnh^nhn 是计算得出的目标图像,hn−1h^{n-1}hn−1 对应原图像, ω\omegaω 就是用于计算的卷积核, ddd 是卷积核的大小。
更多有关图像处理中卷积的基础,可以参考以下链接中的文章 :
数字图像处理中滤波和卷积操作详细说明
3. 卷积神经网络原理
在理解了卷积神经网络中"卷积"的运算方式,我们接下来就来看看卷积神经网络的计算原理。输入输出的维度在理解卷积神经网络的过程中至关重要。
我们日常生活中常处理的图像按照他们的通道区分往往可以分为两大类,单通道的灰度图像以及三通道的RGB图像。下图就给出了一个针对三通道RGB图像的单层卷积神经网络的运算,我们就以下图为例,来理解卷积神经网络中隐藏层各个神经元以及权重的计算。首先,输入是28∗28∗328*28*328∗28∗3的RGB图,其中3分别代表RGB三个通道。我们这里只使用了一个5∗55*55∗5的卷积核。我们对每一个通道分别计算卷积,并将结果相加,就得到了一个包含24∗2424*2424∗24个神经元的隐藏层。需要注意的是,每一个得出的隐藏层都共用一个卷积核中的权重,例如下图中,隐藏层h1nh^n_1h1n 共用同一个权重矩阵(卷积核) ω1n\omega^n_1ω1n。通过这样的操作,我们就提取出了由这个卷积核描述的特征。
接着,如果我们使用不止一个卷积核,那显而易见的,就可以提取出图像中不同的特征了。因此,计算得出的隐藏层的层数,与选择使用的卷积核的个数是一致的。
综上所述,我们可以通过不同的卷积核来提取出图像中的不同特征。而我们使用卷积神经网络的过程,实际上是通过训练来确定各个卷积核的权重,从而提取出最适合的图像特征。使用不同长度大小的卷积核,在训练卷积神经网络的过程中,可以帮助我们提取出最优的特征来组成feature maps。之后再结合全连接神经网络来完成相关的图像分类聚合问题。