原文地址:http://blog.csdn.net/qq_31456593/article/details/76083091
更多机器学习、深度学习笔记(含python、TensorFlow代码实现):http://blog.csdn.net/qq_31456593/article/details/69340697
卷积神经网络的产生是为了解决深层神经网络参数多训练难的问题,并获得更好的分类效果。我们知道在深度学习出现之前,传统神经网络当层数变多时,反向传播将会变得困难,且对于一些高维的输入往往需要大量的参数,因此复杂神经网络的训练成了急需解决的问题。同时,由于全连接网络提取的前一层的全部信息,整体特征拟合能力较低,且易于过拟合于局部样本。
卷积神经网络的实现来源于对于视觉神经系统的研究。科学家发现,人对事物的观察是通过对不同特征捕获的综合,视觉神经系统中有专门负责不同特征感知的视觉元。从对视觉神经系统的研究出发,神经网络的研究者提出用一个神经元每次观察输入的部分特征(比如图片的一小块),然后通过逐步移动的方法观察整个输入的方法,然后用多个这种神经元提取输入的输入的不同特征,最后在通过一个全连接网络对这些特征进行整合,最终达成分类效果。下图形象的描述了这种特征的提取。
通过多个特征神经元代替一个全连接层,我们发现参数的数量大大减小,且由于图像存在大量相同的基本特征信息,卷积神经网络在计算机视觉领域取得了非常好的效果。
卷积神经网络就是由卷积层、池化层、全连接层构成的具有局部感知和权值共享能力的深层神经网络。
卷积神经网络最主要的特点就是局部感知和权值共享。局部感知使其每次只需感知较小的区域,降低了参数数量,也提供了特征拟合能力(特征简单了,拟合更容易)。而全值共享,使一些基本特征可得到重复利用,使参数可以共享,提高了神经网络的训练效果。
卷积层: 做特征的提取,输出对应得feature map
池化层: 就是对数据进行下采样,减少数据处理量同时保留有用信息
全连接层: 就是对提取特征进行组织综合,输出识别物体的分类情况
关于网络的形象理解可见下图。
接下来我们来看一些重要概念。
卷积的本质就是加权叠加。卷积核与一个连接观察窗口的全连接神经元类似,因此我们用它来代替我们上文提到的特征观察神经元,并最后通过窗口滑动观察整个输入,输出一个 feature map
图中的M向量为卷积核,N向量为输入,P向量为输出。其中P[2] = N[0] * M[0] + … + N[4] * M[4]。
因为图像是二维的,所以我们用到的一般是下面的二维卷积
卷积层中卷积核的使用,一般如上图所示。卷积层是卷积核在上一级输入层上通过逐一滑动窗口计算而得,卷积核中的每一个参数都相当于传统神经网络中的权值参数,与对应的局部像素相连接,将卷积核的各个参数与对应的局部像素值相乘之和,(通常还要再加上一个偏置参数),得到卷积层上的结果(即feature map)。
随着左边数据窗口的平移滑动,卷积核Filter w0 / Filter w1对不同的局部数据进行卷积计算。其中每个卷积核有3个3*3的矩阵分别与与三个通道的观察窗口做卷积最后求和作为输出。
卷积核的权重矩阵就是训练时要学习的,它就是要提取的特征,神经网络再根据卷积提取的特征去观察输入(比如图片)
最近几年卷积神经网络中,激活函数往往不选择sigmoid或tanh函数,而是选择relu函数。Relu函数的定义是: f(x)=max(0,x)
Relu函数图像如下图所示:
Relu函数作为激活函数,有下面几大优势:
最左边是数据输入层
对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。
中间是
CONV:卷积层,线性乘积 求和。
RELU:激励层,使用relu做卷积层的激活函数。
POOL:池化层,简言之,即取区域平均或最大。
最右边是
FC:全连接层
之所以出现这么多不同的描述卷积神经网络的图是为了循序渐进地帮助大家理解其网络结构。
卷积核虽然模拟的是一个特征观察神经元,但它并不属于卷积层,它相当于一个特征过滤器(或说是一个权重矩阵)。它将符合自己要求的特征输出到feature map上。
至于卷积层为什么可以提取特征并取得很好的效果,可以看下面表示特征的卷积核与输入图片进行运算后提取的feature map
可以看出不同卷积核将提取图片中不同的特征,一般第一层提取的都是边、角、色彩强度等低维的特征。正如下图
然后多个卷积层对特征进行提取和重组后,就能得到比较复杂的特征
我们这里暂且把激励函数relu也当作一层,卷积后加上relu激励函数有
池化层里我们用的maxpooling,将主要特征保留,舍去多余无用特征,这样就可以实现信息压缩,比如下图所示
经过多轮的卷积和池化,将得到最终的特征表示
最后用全连接层对特征进行拟合
并输出不同分类的概率
这就是卷积神经网络获取特征并实现图像分类的整个过程,通过这个过程,大家应该也对卷积神经网络的结构有了比较深刻全面的了解。
几个典型的神经网络应用如下
卷积神经网络:http://blog.csdn.net/stdcoutzyx/article/details/41596663
cs231n 卷积神经网络:http://cs231n.github.io/convolutional-networks/
cnn笔记通俗理解卷积神经网络:http://blog.csdn.net/v_july_v/article/details/51812459
卷积神经网络工作原理直观的解释?:https://www.zhihu.com/question/39022858
CNN入门详解及TensorFlow源码实现–深度学习笔记:http://blog.csdn.net/qq_31456593/article/details/71108257
[透析] 神经网络如何工作(视频):https://www.youtube.com/embed/FmpDIaiMIeA
卷积神经网络:https://www.zybuluo.com/hanbingtao/note/485480