CNN 算法的核心是对图像(二维向量)进行矩阵卷积运算,这就相当于是
对图像进行加权求和。为了减小计算量,CNN 采用了局部感知和权值共享的方
法。局部感知,就是用一个 N×N(如 N=3)的矩阵(称为卷积核)去滑动扫描
图像,进行卷积运算。权值共享,就是扫描图片的滑动矩阵的权值是共享的(相
同的)。在实际运算中,这个卷积核相当于一个特征提取的过滤器(filter)。举例
来说,假设一个 10×10 的图像,用一个 3×3 的卷积核以步长 1 做一次卷积运
算,那么会得到一个 8×8 的特征图(feature map)。为了使得到的 feature map 和
原图等大小,一般给原图进行扩充为 12×12,这样卷积一次以后,得到的仍然是
10×10 大小的图像。在这个例子中,如果不采用权值共享,则一共需要 100 个
权值参数,权值共享后,只需要 3×3=9 个权值参数。
在实际中,一个 RGB 图像是三个通道,而卷积核也可能有多个。这样计算
起来会比上面的例子复杂些,但基本原理是一样的。
2.2 CNN 计算流程
一个典型的 CNN 算法的流程大概是这样的:首先是输入,然后是 n 个卷积
和池化的组合,最后全连接层感知分类。
在这个流程里,卷积运算主要是用来提取特征。一个典型的卷积计算如下图
所示。
<卷积计算示意图>
图中 input 是同一个图像的三个通道,周边有填充 0;有两个卷积核 Filter W0
和 Filter W1,一个 filter 滑动到一个位置后计算三个通道的卷积,求和,加 bias,
得到这个 filter 在该位置的最终结果;每个 filter 的输出是各个通道的汇总;输出
的个数与 filter 个数相同。在这里还要加上激活函数,对计算结果进行非线性变
换。常用的激活函数有 tanh、ReLU、sigmoid 等。激活函数的作用好像可以解释
为:过滤掉一些可以忽略的不重要因素,以避免其对决策产生过度影响。
池化是为了降维,有最大池化(Max Pooling)和平均池化(Average Pooling)。
一个 2×2 最大池化的示例如下图。
评论0
最新资源