Agenda
- 1 卷积神经网络Convolutional Neural Networks,CNN
- 1.1 前言
- 1.2 图像转化成矩阵
- 1.3 卷积核
- 1.4 特征图feature map
- 1.5 激活函数
- 1.6 池化
- 1.7 训练
1 卷积神经网络Convolutional Neural Networks,CNN
1.1 前言
卷积神经网络是针对图像的深度学习框架。
1.2 图像转化成矩阵
对于任意的图像,首先要讲其转化成计算机可以识别的对象,也就是矩阵。转化的规则有很多,比如可以根据灰度值。下面我们假设图像可以用这样的矩阵来表示。
1.3 卷积核
为了识别上图的图像,我们需要借助一些特征,比如我们借助下图的特征
上图中的蓝色矩阵是特征矩阵,一般称为卷积核(convolutional kernel或kernel或filter或detector)。
1.4 特征图feature map
有了上图的卷积核,接下来的操作就是用卷积核对目标图像进行扫描。如何扫描呢,就是用卷积核和原图上的相同大小的矩阵对应元素相乘再相加。其实这就是在比较原图和卷积核的相似度,可以这样理解。
以第一个卷积核 ( 1 0 0 1 ) \begin{pmatrix}1&0\\0&1\end{pmatrix} (1001)和图像上的第一个被扫描到的矩阵 ( 0 0 0 1 ) \begin{pmatrix}0&0\\0&1\end{pmatrix} (0001)为例,对应元素相乘再相加等于1。扫描完这个图像以后,按照顺序记录下所以的结果就是特征图,对于这个例子,特征图是 ( 1 0 1 0 0 2 0 1 1 0 2 0 0 1 0 1 ) \begin{pmatrix}1&0&1&0\\0&2&0&1\\1&0&2&0\\0&1&0&1\end{pmatrix} ⎝ ⎛1010020110200101⎠ ⎞。
我看网上的资料,关于如何卷积,还有对目标图像如何扫描还有其他的做法。这里我们为了理解的话,先用这种计算方式和扫描方式来做。
1.5 激活函数
接下来的会对特征图中小于0的数都变成0的操作,可以用ReLU函数来实现。对于我们这个例子没有小于0的数,所以暂时不做变换。
1.6 池化
对于我们这个例子矩阵很小,但是对于真实的图像来说,矩阵是非常大的,经过卷积+激活函数处理以后的特征图还是很大的,为了捕捉重要信息而且降低运算,这个时候需要对特征图进行池化。池化的意思很好理解,根据需求,我们可以对特征图再用特定的矩阵大小扫描一遍,比如对于我们这个例子,用22的矩阵扫描一遍,步长为1,如果用最大池化的话,就是取每个22矩阵中的最大值,如果是均值池化的话,就是取平均值。对于我们这个例子,最大池化的结果是 ( 2 2 1 2 2 2 1 2 2 ) \begin{pmatrix}2&2&1\\2&2&2\\1&2&2\end{pmatrix} ⎝ ⎛221222122⎠ ⎞,均值池化的结果是 ( 3 / 4 3 / 4 1 / 2 3 / 4 1 3 / 4 1 / 2 3 / 4 3 / 4 ) \begin{pmatrix}3/4&3/4&1/2\\3/4&1&3/4\\1/2&3/4&3/4\end{pmatrix} ⎝ ⎛3/43/41/23/413/41/23/43/4⎠ ⎞.
1.7 训练
最后就是把vector特征图,把这些elements当成是特征,然后像普通的神经元模型一样,加权求和以后再用激活函数输出结果。当然这个过程又涉及到参数如何训练,这个以后再补充。