概念
卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。
历史
- CNN最早可以追溯到1968Hubel和Wiesel的论文,这篇论文讲述猫:猴的视觉皮层含有对视野的小区域单独反应的神经元,如果眼睛没有移动,则视觉刺激影响单个神经元的视觉空间区域被称为其感受野(Receptive Field)。相邻细胞具有相似和重叠的感受野。感受野大小和位置在皮层之间系统地变化,形成完整的视觉空间图。这个为CNN的局部感知奠定了一个基础。
- 然后是1980年,神经感知机(Neocognitron)的提出,标志了第一个初始的卷积神经网络的诞生,也是感受野概念在人工神经网络领域的首次应用,神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理。
- 在然后1988年,时不变神经网络(Shift-invariant neural network)的提出,将卷积神经网络的功能进行了一次提高,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。
- 卷积神经网络的前馈架构在神经抽象金字塔(Neural abstraction pyramid)中被横向和反馈连接扩展。所产生的复现卷积网络允许灵活地并入情景信息以迭代地解决局部模糊。与以前的模型相反,产生了最高分辨率的图像输出。
- 最后,2005出现了一篇GPU实现CNN的paper,标志了一种实现CNN更有效的方式,之后在2012年ImageNet大赛中CNN由于其高精确度脱颖而出,于是,深度学习正式进入人们的视野。
应用领域
CNN是深度学习算法中的一种,是深度学习算法在图像处理领域的一个应用,主要用于模式分类领域。
引用 张雨石 关于深度学习的三点想法
- 第一点,在学习Deep learning和CNN之前,总以为它们是很了不得的知识,总以为它们能解决很多问题,学习了之后,才知道它们不过与其他机器学习算法如svm等相似,仍然可以把它当做一个分类器,仍然可以像使用一个黑盒子那样使用它。
- 第二点,Deep Learning强大的地方就是可以利用网络中间某一层的输出当做是数据的另一种表达,从而可以将其认为是经过网络学习到的特征。基于该特征,可以进行进一步的相似度比较等。
- 第三点,Deep Learning算法能够有效的关键其实是大规模的数据,这一点原因在于每个DL都有众多的参数,少量数据无法将参数训练充分。
架构
CNN架构简单来说就是:图片经过各两次的Convolution, Pooling, Fully Connected就是CNN的架构了。
架构图
层级结构
CNN由输入和输出层以及多个隐藏层组成,隐藏层可分为卷积层,池化层、RELU层和全连通层。
- 输入层
CNN的输入一般是二维向量,可以有高度,比如,RGB图像 - 卷积层(Convolutional layer)
卷积层是CNN的核心,层的参数由一组可学习的滤波器(filter)或内核(kernels)组成,它们具有小的感受野,延伸到输入容积的整个深度。 在前馈期间,每个滤波器对输入进行卷积,计算滤波器和输入之间的点积,并产生该滤波器的二维激活图(输入一般二维向量,但可能有高度(即RGB))。 简单来说,卷积层是用来对输入层进行卷积,提取更高层次的特征。
联想理解:
卷积层运算
- 可能上面的话语太拗口,这里讲一下卷积的作用,我最早接触卷积是在信号与系统这门课上。在信号与系统中,输入对一个系统的响应是等于输入信号e(x)与系统函数h(x)进行卷积,h(x)可以看作一个滤波器,它会对输入信号进行筛选,选择和它类似的信号,其他则过滤掉,相信学过的人有这个体会哈!
- 我们还可以想想数字图像处理(DIP)这门课,我们在提取图像的边缘特征时,用到的一个卷积核,名字叫sobel算子,它与图像进行卷积,就可以得到边缘,这个原因是有sobel算子与图像边缘的结构相似,所以才能提取出来,这个可能更容易理解卷积层的作用吧,但不同的是这里的卷积层参数未知,需要学习才能得到。
卷积层运算过程
-
池化层(Pooling layer)
池化层又称下采样,它的作用是减小数据处理量同时保留有用信息,它是怎么做到的呢?
答:通常池化层是每邻域四个像素中的最大值变为一个像素,为什么可以这么做呢?这是因为卷积已经提取出特征,相邻区域的特征是类似,近乎不变,这是池化只是选出最能表征特征的像素,缩减了数据量,同时保留了特征,何乐而不为呢?池化层的作用可以描述为模糊图像,丢掉了一些不是那么重要的特征。
池化层 -
线性整流层(Rectified Linear Units layer, ReLU layer)
是神经元的激活函数,对输入值x的作用是max(0,x),当然ReLU只是一种选择,还有选Leak-Relu等等,一般都是用Relu。 -
全连通层( Fully-Connected layer)
这个层就是一个常规的神经网络,它的作用是对经过多次卷积层和多次池化层所得出来的高级特征进行全连接(全连接就是常规神经网络的性质),算出最后的预测值。 -
输出层
就是对预测结果输出层。
网友评论