卷积神经网络(Convolutional Neural Network, CNN)是一类具有特殊结构的神经网络,在图像识别和语音识别领域领域具有不可替代的作用。CNN的神奇之处在于它考虑了图像数据的特点,通过特殊的卷积和池化结构,在减少参数的同时可以提取到更加抽象的图像特征。
卷积的意义
数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程。
上图可以清晰的表征出整个卷积过程中一次相乘后相加的结果:该图片选用3*3的卷积核,卷积核内共有九个数值,所以图片右上角公式中一共有九行,而每一行都是图像像素值与卷积核上数值相乘,最终结果-8代替了原图像中对应位置处的1。这样沿着图片一步长为1滑动,每一个滑动后都一次相乘再相加的工作,我们就可以得到最终的输出结果。
为什么CNN可以应用于图像识别
- 识别小的特征图像不需要整个图片
- 相同的特征图像可能反复出现,可以用同一组参数进行检测(权值共用)
- 对图片进行下采样不影响图像识别(方便去除不重要特征)
CNN的结构
【convolution—>Max Pooling】*n—>Flatten—>Fullly Connected Feedforward Network
卷积层和池化层有可以有n个叠加
那么利用卷积层的原因就是:
(1)识别小的特征图像不需要整个图片
(2)相同的特征图像可能反复出现,可以用同一组参数进行检测(权值共用)
利用池化层的原因是:
(1)对图片进行下采样不影响图像识别(方便去除不重要特征)
卷积是如何进行的
卷积利用一个卷积核来侦测图像,每个卷积核是一个参数矩阵,这些参数是需要学习的。
卷积操作其实就是利用卷积核在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像
如果图像数据有多层,那么每个卷积核也应该有相同的层数,而卷积核的数量是需要人为设定的。
对于多层数据的图像,其卷积操作也是一样的。
最后都会得到 Featre Map,所以有多少个卷积核,就有相同数量的 Feature Map。
CNN—简化版的FCFN
CNN相比于FCFN,CNN只连接了特定部分的神经元,减少了参数数量。
而且通过部分权值共享进一步减少了参数的数量
最大池化(Max Pooling)
取一个区域中的最大值,留下重要的特征,图像因而能变得更小
这样,我们得到了包含了重要特征的更小的图像数据
将数据展开为一个向量,作为全连接神经网络的输入。