大家先别急着看,我还没有写完,抱歉今天很忙,后面一定会更新。
卷积神经网络(CNN)是一种在计算机视觉领域应用非常广的深度学习框架,我前前后后大概花了一个礼拜的时间,基本上搞懂了CNN的原理,在这里做个记录,也算是分享一下自己的见解。
一 基础知识
1 关于图像
这里说的验证码指的是验证码所在的图片,计算机中的图片都是由一个一个的像素点构成,可以
把像素点看成是组成图片的最小单位,右键windows中的图片,选择属性->详细信息,就可以看到图片的像素信息:
比如这张图片是600x402个像素点构成,每一个像素点有三个具体的值,值的范围是0到255,值越大该点越亮,三个值指的是红绿蓝三个维度,比如某个像素点值是(255,0,0)表示该点是纯红色。通过公式Rx0.299+Gx0.587+BX0.114可以把三个值映射到一个值,这样构成的图片是灰度图,就是黑白电视机呈现的图片。
三个颜色维度又叫做三通道(channel),为了简便,下面所有内容基于灰度图,即单通道。
2 卷积
卷积是CNN的核心部分。
上图中黄圈内的像素值如下(矩阵M1)
0 | 255 | 0 | 0 |
255 | 0 | 0 | 0 |
255 | 0 | 0 | 0 |
255 | 0 | 0 | 0 |
注意到255集中在一个区域,构成的形状和黄色圈中的形状相似。再看一个矩阵M2:
0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 |
1 | 0 | 0 | 0 |
1 | 0 | 0 | 0 |
把M1和M2做一个矩阵乘法,得到的结果是M3:
255 | 0 | 0 | 0 |
0 | 255 | 0 | 0 |
0 | 255 | 0 | 0 |
0 | 255 | 0 | 0 |
M2和M1非常相似,M2被称为卷积核(或者滤波器),如果M1不是图中黄色圈内的像素,很可能M1乘以M2的结果非常小。也就是说,卷积核只有和自己非常相似的矩阵相乘,才能得到一个有很多大数字的矩阵,这就是所谓的特征提取。试想一下,把上面的图片分割成很多4x4的像素矩阵,然后分别与M2相乘,只有那些长得和黄色圈内相似的像素矩阵,得到的结果才会是很多大的数字,这样,我们就提取除了所有和黄色圈内图形相同的区域。注意这里,我们用的词还是矩阵相乘,那么什么是卷积呢?
上面是矩阵M3,我们把视角移到这个矩阵的左上角的4x4的子矩阵M4。所谓的卷积,就是把M4和M2(卷积核)相乘,把得到的结果矩阵中的所有元素累加,最终得到一个数字a1。第二步,把M4右边的子矩阵M5和M2相乘,和上面一样处理得到数字a2,后面的步骤就是把这个子矩阵的边框不断右移,然后下移,最终得到的结果矩阵是M6:
a1 | a2 | a3 |
a4 | a5 | a6 |
a7 | a8 | a9 |
我们把整个的过程叫做卷积,即M3和M2卷积得到了矩阵M6,其中的每一次矩阵乘法的区域(M4和M5)又叫做感受野,而卷积的结果M6叫做feature map。
先更新到这里。