浅谈深度神经网络 — CNN
CNN(Convolutional Neural Network,卷积神经网络)
引言
CNN的出现是因为全连接神经网络无法很好地处理图像数据,主要原因有以下:使用全连接层处理图像最大的问题在于全连接层的参数太多,参数多了除了会导致计算速度变慢,也很容易会导致过拟合问题。所以我们需要一个更加合理的神经网络结构来有效的减少神经网络中的参数个数。卷积神经网络就可以达到这个目的。
CNN基本结构
- 输出层: 输入层是整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。其中三位矩阵的长和宽代表了图像的大小,而三维矩阵的深度代表了图像的色彩通道(channel)。如:灰度图深度为1,RGB色彩模式下深度为3。
- 卷积层: 卷积层是神经网络中最重要的一部分。和传统全连接层不同,卷积层的输入只是上一个神经网络的一小块。卷积层试图将每一小块进行更加深入的分析从而得到抽象程度更高的特征。一般来说,通过卷积层处理后的矩阵会变得更深。
- 池化层: 池化层不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。池化操作一般认为是一张分辨率较高的图片转化为分辨率较低的图片。通过池化层可以进一步缩小最后全连接层中节点个数,从而达到减少整个神经网络参数的目的。
- 全连接层: 在经过多轮卷积池化的操作后,一般会由两层全连接层来给出最后的分类结果。经过多轮卷积池化的操作后,可以认为,图像的信息已经被抽象成了信息含量更高的特征。我们可以将卷积池化看做特征提取的过程,在特征提取完成之后,仍然需要全连接层来完成分类任务。
- Softmax层: 主要解决分类问题,通过softmax课以得到当前样例属于不同类别的概率。
卷积层
卷积层也被叫做过滤器( filter)或者内核( kernal),可以将当前层神经网络上的一个子节点矩阵转化为下一层神经网络的一个单位节点矩阵。单位节点矩阵是指长和宽都是1,深度不限的节点矩阵。
在一个卷积层中,过滤器所处理的节点矩阵的长和宽都是由人工指定的,这个节点矩阵的尺寸也被称之为过滤器的尺寸。因为过滤器处理的矩阵深度和当前层神经网络节点矩阵的深度是一致的,所以虽然节点矩阵是三维的,但过滤器的尺寸只需要指定指定两个维度。过滤器中另外一个需要人工指定的设置是处理得到的单位节点矩阵的深度(FeatureMap深度),这个设置别称之为过滤器的深度(有时候也被叫做卷积核的个数)。
计算过程通俗理解为过滤器与节点矩阵对应求加权和,经过一个激活函数得到单位节点矩阵的值,然后类似滑动窗口一样去生成特征图,另外除了过滤器尺寸的大小还需要指定滑动步长,及在过滤器不为1*1时,卷积前后尺寸不一情况问题的处理。
关于卷积神经网络详细中间计算过程课参考博客: 点击这里会飞向博客地址
池化层
池化层可以非常有效的缩小矩阵的尺寸,从而减少最后全连接层中的参数。使用池化层既可以加快计算速度也有防止过拟合的作用。
在池化层中也是通过移动一个类似过滤器的结构完成的。不过池化层过滤器中的计算不是求节点的加权和,而是采用更加简单的最大值或是平均值运算。使用最大值运算的池化层被称之为最大池化层(max pooling),这是用的最多的池化层。使用平均值运算的池化层被称之为平均池化层(average pooling)。
池化层的过滤器也需要人工设定过滤器的尺寸,是否使用全零填充,以及移动步长。跟卷积层类似,唯一区别就是卷积层使用的过滤器是横跨整个深度的,而池化层使用的过滤器只影响一个深度上的节点。所以池化层的过滤器,除了在长和宽两个维度移动,也需要在深度这个维度移动。
有研究池化层对模型的效果影响不大,不过目前主流的卷积神经网络模型中都有池化层。
这段时间在学习深度模型算***继续更新一些算法内容,更多的是自己对模型的理解,按自己的理解把其中一些的知识总结到博客上,一方面为了方便以后查阅,另一方面分享自己觉得有用的东西,希望能及时解决大家疑惑。如果有错误欢迎大家留言指正,一起学习进步。