深度学习之卷积神经网络CNN Convolution Neural Network
CNN 卷积神经网络
CNN常用于图像处理,图像识别等。
一般的神经网络进行影响处理的过程
以用一般的神经网络进行图像分类为例。影藏层中 第一层为最基础的分类类别。第二层在第一层的基础上继续分类。比如第一层中识别出棕色和直线条纹,则判定为木头条纹,若第一层识别出棕色横线和竖线则可以判定是门框的一部分。继续这么一层一层往下判断,就可以最终判断出是否是车子,人等。如下图所示。
存在的问题
一般的神经网络是全连接层神经网络,需要的参数过多。例如,假设图片像素是100*100,那么展开成输入层矩阵后就是1万维,彩色则是3万维。假设最终输出是1000个分类类别,那么可以想象中间隐藏层的参数数量是非常庞大的。那么CNN要做的事情就是简化参数数量。
CNN基本思路
几个要点
1、图片中的一些模型要比整张图片要小很多,一个神经元不用讲整张图片都识别一遍才判定是否有改模型。如下图所示,我们只需要识别红色方框部位的图片,就能判定是否有鸟嘴。
2、同样的模型,可能同时存在图片中的不同部分,也不会都出现在同一位置。如下图所示,两个图片中的鸟嘴在不同位置,但是不用设置两个神经元来识别。
3、对图像进行降维采样并不会影响人对图片的识别。因此我们可以通过降维采样来缩小图片。
CNN整体架构
如下图所示,输入一张图片后可以进行多次的卷积化和最大池化
对之前所提到的三个要点,第一二个要点就是用convolution来解决,对于第三个要点,就是用max pooling来解决。
Convolution 卷积
Convolution就是通过卷积核判断是否有某一个pattern模型的出现。如下图:假设有一个6*6维的像素矩阵,以及通过学习获得的卷积核,也就是下面的filter matrix。Filter Matrix是用来识别图像中某一个同等大小的部位是否是特定的模型。如下图,第一个卷积核就可以判断图中是否有斜线。
卷积核运行过程
如图,将卷积核Filter1与图像左上角红色框框内的33矩阵进行內积得到3,然后将红色框框左移一格,同样內积,如此反复移动,知道将整个图片都遍历完。得到一格44的矩阵,这个矩阵就可以用来判断图像中是否有斜线,以及在什么地方。。通过图中可以看出,斜线出现在左上角和右下角。
实际中是有非常多个的Filter,会得到非常多个的4*4內积矩阵,如下图。就得到了Fearture Map
当是彩色图片时,卷积核是一个三层的二维矩阵。
Convolution在神经网络中的实现
Convolution在神经网络中的实现,与全连接层相比,减少了很多参数,如下图所示,将66的图片展开成一个136维的矩阵,连接如下图所示,红色方框部位对应一个神经元,只连接了9个input。
红色方框的移动过程就是
Max Pooling
Max Pooling最大化池化,就是降维采样的过程。将Convolution过程中得到的Fearture Map进行降维,可以以4个为一组,取平均值或者取最大值
做完一次Convolution 和Max pooling就可以对图片进行降维,如下图所示,得到一格新的2*2维的矩阵。而这个过程可以进行多次。但得注意重复次数
Flatten
即将Max Pooling后的Fearture Map拉直,从而作为新的输入层输入到全连接层神经网络中。
最后再使用全连接层神经网络进行分类即可。