CNN卷积神经网络全面生动解读-深度学习笔记1

原文地址:http://www.jianshu.com/p/1c9daf19b0d9
更多机器学习、深度学习笔记(含python、TensorFlow代码实现):http://blog.csdn.net/qq_31456593/article/details/69340697

一、前言

卷积神经网络的产生是为了解决深层神经网络参数多训练难的问题,并获得更好的分类效果。我们知道在深度学习出现之前,传统神经网络当层数变多时,反向传播将会变得困难,且对于一些高维的输入往往需要大量的参数,因此复杂神经网络的训练成了急需解决的问题。同时,由于全连接网络提取的前一层的全部信息,整体特征拟合能力较低,且易于过拟合于局部样本。

《CNN卷积神经网络全面生动解读-深度学习笔记1》

卷积神经网络的实现来源于对于视觉神经系统的研究。科学家发现,人对事物的观察是通过对不同特征捕获的综合,视觉神经系统中有专门负责不同特征感知的视觉元。从对视觉神经系统的研究出发,神经网络的研究者提出用一个神经元每次观察输入的部分特征(比如图片的一小块),然后通过逐步移动的方法观察整个输入的方法,然后用多个这种神经元提取输入的输入的不同特征,最后在通过一个全连接网络对这些特征进行整合,最终达成分类效果。下图形象的描述了这种特征的提取。

《CNN卷积神经网络全面生动解读-深度学习笔记1》

通过多个特征神经元代替一个全连接层,我们发现参数的数量大大减小,且由于图像存在大量相同的基本特征信息,卷积神经网络在计算机视觉领域取得了非常好的效果。

二、简介

卷积神经网络就是由卷积层、池化层、全连接层构成的具有局部感知和权值共享能力的深层神经网络。

《CNN卷积神经网络全面生动解读-深度学习笔记1》

卷积神经网络最主要的特点就是局部感知和权值共享。局部感知使其每次只需感知较小的区域,降低了参数数量,也提供了特征拟合能力(特征简单了,拟合更容易)。而全值共享,使一些基本特征可得到重复利用,使参数可以共享,提高了神经网络的训练效果。

卷积层: 做特征的提取,输出对应得feature map

池化层: 就是对数据进行下采样,减少数据处理量同时保留有用信息

全连接层: 就是对提取特征进行组织综合,输出识别物体的分类情况

关于网络的形象理解可见下图。

《CNN卷积神经网络全面生动解读-深度学习笔记1》

三、重要概念

接下来我们来看一些重要概念。

卷积

卷积的本质就是加权叠加。卷积核与一个连接观察窗口的全连接神经元类似,因此我们用它来代替我们上文提到的特征观察神经元,并最后通过窗口滑动观察整个输入,输出一个 feature map

一维卷积

《CNN卷积神经网络全面生动解读-深度学习笔记1》

图中的M向量为卷积核,N向量为输入,P向量为输出。其中P[2] = N[0] * M[0] + … + N[4] * M[4]。
因为图像是二维的,所以我们用到的一般是下面的二维卷积

二维卷积

《CNN卷积神经网络全面生动解读-深度学习笔记1》

卷积层中卷积核的使用,一般如上图所示。卷积层是卷积核在上一级输入层上通过逐一滑动窗口计算而得,卷积核中的每一个参数都相当于传统神经网络中的权值参数,与对应的局部像素相连接,将卷积核的各个参数与对应的局部像素值相乘之和,(通常还要再加上一个偏置参数),得到卷积层上的结果(即feature map)。

多通道多个卷积核的卷积计算

下面是3通道(RGB),2个卷积核的计算过程。

《CNN卷积神经网络全面生动解读-深度学习笔记1》

  • 左边是输入(773中,7*7代表图像的像素/长宽,3代表R、G、B 三个颜色通道)
  • 中间部分是两个不同的滤波器Filterw0、Filter w1
  • 最右边则是两个不同的输出(即2个feature map,该隐藏层深度为2,提取2类特征)
    随着左边数据窗口的平移滑动,卷积核Filter w0 / Filter w1对不同的局部数据进行卷积计算。其中每个卷积核有3个3*3的矩阵分别与与三个通道的观察窗口做卷积最后求和作为输出。
    卷积核的权重矩阵就是训练时要学习的,它就是要提取的特征,神经网络再根据卷积提取的特征去观察输入(比如图片)

Relu激活函数

最近几年卷积神经网络中,激活函数往往不选择sigmoid或tanh函数,而是选择relu函数。Relu函数的定义是:$f(x)= max(0,x)$
Relu函数图像如下图所示:

《CNN卷积神经网络全面生动解读-深度学习笔记1》

Relu函数作为激活函数,有下面几大优势:

  • 速度快 和sigmoid函数需要计算指数和倒数相比,relu函数其实就是一个max(0,x),计算代价小很多。
  • 减轻梯度消失问题 回顾计算梯度的公式$\nabla=\sigma’\delta x$。其中,$\sigma’$是sigmoid函数的导数。在使用反向传播算法进行梯度计算时,每经过一层sigmoid神经元,梯度就要乘上一个$\sigma’$。从下图可以看出,$\sigma’$函数最大值是1/4。因此,乘一个会导致梯度越来越小,这对于深层网络的训练是个很大的问题。而relu函数的导数是1,不会导致梯度变小。当然,激活函数仅仅是导致梯度减小的一个因素,但无论如何在这方面relu的表现强于sigmoid。使用relu激活函数可以让你训练更深的网络。
  • 稀疏性 通过对大脑的研究发现,大脑在工作的时候只有大约5%的神经元是激活的,而采用sigmoid激活函数的人工神经网络,其激活率大约是50%。有论文声称人工神经网络在15%-30%的激活率时是比较理想的。因为relu函数在输入小于0时是完全不激活的,因此可以获得一个更低的激活率

四、网络结构

《CNN卷积神经网络全面生动解读-深度学习笔记1》

  • 最左边是数据输入层
    对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。
  • 中间是
    CONV:卷积层,线性乘积 求和。
    RELU:激励层,使用relu做卷积层的激活函数。
    POOL:池化层,简言之,即取区域平均或最大。
  • 最右边是
    FC:全连接层
    之所以出现这么多不同的描述卷积神经网络的图是为了循序渐进地帮助大家理解其网络结构。

卷积层

《CNN卷积神经网络全面生动解读-深度学习笔记1》

卷积核虽然模拟的是一个特征观察神经元,但它并不属于卷积层,它相当于一个特征过滤器(或说是一个权重矩阵)。它将符合自己要求的特征输出到feature map上。
至于卷积层为什么可以提取特征并取得很好的效果,可以看下面表示特征的卷积核与输入图片进行运算后提取的feature map

《CNN卷积神经网络全面生动解读-深度学习笔记1》

可以看出不同卷积核将提取图片中不同的特征,一般第一层提取的都是边、角、色彩强度等低维的特征。正如下图

《CNN卷积神经网络全面生动解读-深度学习笔记1》

然后多个卷积层对特征进行提取和重组后,就能得到比较复杂的特征

《CNN卷积神经网络全面生动解读-深度学习笔记1》

relu层

我们这里暂且把激励函数relu也当作一层,卷积后加上relu激励函数有

《CNN卷积神经网络全面生动解读-深度学习笔记1》

池化层

《CNN卷积神经网络全面生动解读-深度学习笔记1》

池化层里我们用的maxpooling,将主要特征保留,舍去多余无用特征,这样就可以实现信息压缩,比如下图所示

《CNN卷积神经网络全面生动解读-深度学习笔记1》

经过多轮的卷积和池化,将得到最终的特征表示

《CNN卷积神经网络全面生动解读-深度学习笔记1》

全连接层

最后用全连接层对特征进行拟合

《CNN卷积神经网络全面生动解读-深度学习笔记1》

并输出不同分类的概率

《CNN卷积神经网络全面生动解读-深度学习笔记1》

这就是卷积神经网络获取特征并实现图像分类的整个过程,通过这个过程,大家应该也对卷积神经网络的结构有了比较深刻全面的了解。

五、应用

几个典型的神经网络应用如下

  • LeNet,这是最早用起来的卷积神经网络,Yann LeCun在论文LeNet提到。
  • AlexNet,2012 ILSVRC比赛远超第2名的卷积神经网络,和LeNet的结构比较像,只是更深,同时用多层小卷积层叠加提到大卷积层。
  • ZF Net,2013 ILSVRC比赛冠军,可以参考论文ZF Net
  • GoogLeNet,2014 ILSVRC比赛冠军,Google发表的论文Going Deeper with
    Convolutions有具体介绍。
  • VGGNet,也是2014 ILSVRC比赛中的模型,有意思的是,即使这个模型当时在分类问题上的效果,略差于google的GoogLeNet,但是在很多图像转化学习问题(比如object detection)上效果奇好,它也证明卷积神经网的『深度』对于最后的效果有至关重要的作用。预训练好的模型在pretrained
    model site可以下载。

参考材料

卷积神经网络: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

    原文作者:Doit_
    原文地址: https://www.jianshu.com/p/1c9daf19b0d9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞