• 卷积神经网络Convolutional Neural Networks


    目录

    1. 卷积神经网络的由来
    2. 卷积神经网络的基本组成
    3. 卷积神经网络的思想
    4. 卷积神经网络的计算过程
    5. 卷积神经网络的优缺点

    1.卷积神经网络的由来

    在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在神经网络中,如果隐含层神经元数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12,这样就太多了,基本没法训练。所以我们要想用神经网络来处理图像,就必须减少参数,从而加快速度。

    卷积神经网络(CNN)是一种常见的深度学习架构,受生物自然视觉认知机制启发而来。1959年,Hubel & Wiesel 通过对猫视觉皮层细胞中用于局部敏感和方向选择的神经元的研究,发现动物视觉皮层细胞负责检测光学信号,提出了感受野(receptive field)的概念。受此启发,1980年日本学者 Kunihiko Fukushima 提出了CNN的前身——神经认知机(neocognitron),可以看作是卷积神经网络的第一个实现网络,也是感受野概念在人工神经网络领域的首次应用。

    往后,许多研究团队都对CNN进行了完善。从结构看,CNN 发展的一个方向就是层数变得更多,通过增加深度,网络便能够利用增加的非线性得出目标函数的近似结构,同时得出更好的特性表征。但是,这样做的同时也增加了网络的整体复杂程度,使网络变得难以优化,很容易过拟合。

    现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用。

    2.卷积神经网络的基本组成

    在不同的参考资料中,对 CNN的组成部分都有着不同的描述。不过,CNN的基本组成成分是十分接近的。

    下图中CNN要做的事情是:给定一张图片,是车还是马未知,是什么车也未知,现在需要一个模型来判断这张图片里具体是一个什么东西,总之就是输出一个结果:“如果是车 那么是什么车”

    • 数据输入层:对数据做一些处理,比如去均值(把输入数据各个维度都中心化为0,避免数据过多偏差,影响训练效果)、归一化(把所有的数据都归一到同样的范围)、PCA/白化等等。CNN只对训练集做“去均值”这一步。
    • 卷积层:线性乘积,求和。学会识别输入数据的特性表征。(CNN的核心)
    • 激励层:激励函数,一般是ReLu,是激活函数的一种。
    • 池化层:典型的操作是取区域平均或最大,即平均 pooling 和最大化 pooling 。
    • 全连接层:将卷积层、激励层和池化层堆叠起来以后,连接成一个一维向量,就能够形成一层或多层全连接层,这样就能够实现高阶的推理能力。

    2.1 卷积层

    什么是卷积操作呢?对图像和滤波矩阵做内积的操作就是所谓的『卷积』操作,也是卷积神经网络的名字来源。卷积运算一个重要的特点就是:通过卷积运算,可以使原信号特征增强,并且降低噪音。

    • 图像:不同的数据窗口数据
    • 滤波矩阵:一组固定权值的神经元。因为每个神经元的多个权值固定,所以又可以看做一个恒定的滤波器filter
    • 内积:逐个元素相乘再求和

    非严格意义上来讲,下图中红框框起来的部分便可以理解为一个滤波器,即带着一组固定权值的神经元。多个滤波器叠加便成了卷积层。

    举个例子。比如下图中,图中左边部分是原始输入数据,图中中间部分是滤波器filter,图中右边是输出的新的二维数据。中间的滤波器filter与数据窗口做内积,使得原始数据中3×3的矩阵变为了1个数。

    那么具体到图像上的计算,左边是图像输入,中间部分就是滤波器filter。不同的滤波器filter会得到不同的输出数据,比如颜色深浅、轮廓等。相当于如果想提取图像的不同特征,则用不同的滤波器filter,提取想要的关于图像的某些特定信息:颜色深浅或轮廓。如下图是使用不同滤波器的结果。

    在CNN中,滤波器filter对输入数据的局部进行卷积计算。每计算完一个数据窗口内的局部数据后,数据窗口就不断平移滑动,直到计算完所有数据。这个过程中,涉及到这么几个参数:

    • 深度depth:神经元的个数,决定输出的depth厚度。同时代表滤波器个数。(每个滤波器都要对所有数据都进行一次计算)
    • 步长stride:决定滑动多少步可以到边缘。
    • 填充值zero-padding:在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑到末尾位置,通俗地讲就是为了总长能被步长整除。

    这里写图片描述

    可以举个实际的例子:输入为7×7的图像,共有3个输入(可以看作是R、G、B 三个颜色通道),随着左边数据窗口的平移滑动,滤波器Filter w0 / Filter w1对不同的局部数据进行卷积计算,得到两组不同的结果。下图中各参数如下:

    • 2个神经元,也就是2个滤波器,即depth=2
    • 数据窗口每次移动两个步长取3×3的局部数据,即stride=2
    • zero-padding=1

    虽然这个gif动图很酷炫,但初看此图可能并不是很明白到底是如何计算的,我们只知道据说计算过程是“相乘后相加”。接下来我们具体计算一下,比如截取了第一步:

    就像神经网络中的 wx+b,其中滤波器Filter w0 对应权值w(此时相当于一个权值矩阵),三个3×3的数据窗口对应输入 x,Bias b0 对应偏差b。相当于滤波器Filter w0 中的3个分量分别与3个数据窗口相乘再求和,最后加上Bias b0得到输出结果1。具体计算步骤如下图:

    qq%e6%88%aa%e5%9b%be20161130214423   +   qq%e6%88%aa%e5%9b%be20161130214436   +   qq%e6%88%aa%e5%9b%be20161130214445   +   qq%e6%88%aa%e5%9b%be20161130214506   =   qq%e6%88%aa%e5%9b%be20161130214522

    然后滤波器Filter w0固定不变,数据窗口向右移动2步,继续做内积计算,得到0的输出结果。以此类推。最后,换做另外一个不同的滤波器Filter w1、不同的偏置Bias b1,再跟图中最左边的数据窗口做类似的卷积,可得到另外一个不同的输出。

    左边数据在变化,每次滤波器都是针对某一局部的数据窗口进行卷积,这就是所谓的CNN中的局部感知机制。

    2.2 激励层

    前面我们知道了sigmoid函数,但在实际的梯度下降中,sigmoid容易饱和、造成终止梯度传递,且没有0中心化。怎么办呢,可以尝试另外一个激活函数:ReLu,它的优点是“收敛快,求梯度简单”。其图形表示如下:

    2.3 池化层

    池化,简单来说就是取区域平均或最大,如下图所示为 max-pooling:

    上图左上角2×2的矩阵中6最大,右上角2×2的矩阵中8最大,左下角2×2的矩阵中3最大,右下角2×2的矩阵中4最大,所以得到上图右边的结果矩阵为:6 8 3 4。

    3.卷积神经网络的思想

    卷积神经网络有两种神器可以降低参数的数目,第一种是局部感知野,第二种是参数(权值)共享,接下来将会分别介绍。

    3.1局部感知

    一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实都没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就可以得到全局的信息了。

    网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。

    打个比方,滤波器就像一双眼睛,人类视角是有限的,一眼望去,只能看到这世界的局部。如果一眼就看到全世界,你肯定会累死,而且一下子接收全世界所有信息,你大脑也接收不过来。

    (当然,即便是看局部,针对局部里的信息人类双眼也是有偏重、偏好的。比如看美女,对脸、胸、腿是重点关注的部分,所以这3个输入的权重相对较大。)

    如下图所示:左图为全连接,右图为局部连接。图像像素为1000×1000,有1百万个隐层神经元。若如左下图的全连接,就有1000000×(1000×1000)=10^12 个连接,即有 10^12 个权值参数,这样计算起来是非常麻烦的。

    卷积神经网络

    如果我们利用局部感知的原理,就可以减少连接的数目,也就是减少了神经网络需要训练的权值参数的个数。如右上图中,假如局部感受野是10×10,即每个神经元只需和10×10个像素值相连,那么权值数据就变为 1000000×100=10^8 个参数,减少为原来的千分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。

    但是,10^8 个参数感觉也很多啊有木有,还有什么别的方法吗?

    3.2参数(权值)共享

    上图中,每个神经元只需和10×10个像素值相连,也就是说每个神经元有100个权值参数,那如果我们让所有神经元的这100个参数相等呢?也就是说,所有神经元都是用的同一个卷积核去卷积图像,这样我们岂不是就只有100个参数了!!!

    在2.1节举的例子中, 数据窗口不断滑动,导致输入在变化,但中间滤波器Filter w0的权重(即每个神经元连接数据窗口的权重)是固定不变的,这个权重不变也就是这里的参数(权值)共享机制。

    有人可能会问:这么大幅度地缩减参数靠谱吗?可行吗?

    我们再打个比方,某人环游世界,所看到的信息在不断变化,但采集信息的双眼不变,也就是参数共享。但是,不同人的双眼看同一个局部信息所感受到的却是不同的,即“一千个读者有一千个哈姆雷特”。所以,不同的滤波器就像不同人的双眼,不同的人有着不同的反馈结果。

    那么,怎么用数学意义来理解权值共享呢?

    我们可以将这100个参数(也就是卷积操作)看成是提取特征的一种方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

    下图中是一个3×3的卷积核在一个5×5的图像上做卷积的过程。每个卷积核都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。

    卷积神经网络

    3.3 多卷积核

    一个卷积核只提取了一种特征,显然只用一个卷积核对图像进行特征提取是片面的。我们需要提取不同的特征,就需要多加几种滤波器。

    假设我们加到100种滤波器,每种滤波器的参数都不一样,表示它提取了图像的不同特征,例如不同的边缘。这样,每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为Feature Map。所以,100个滤波器就有100个Feature Map,这100个Feature Map就组成了一层神经元。所以,我们这一层就有 100×100=10000 个参数,才1万个参数哟!

    当然,以上提到的参数个数还需要包含偏差b的个数,一个滤波器都得加上一个参数b。

    下图中,不同的颜色表示不同的滤波器,每个滤波器都会将图像生成为另一幅图像。所以,假如原始图像有n个通道,现有m个滤波器,n≥m,那么生成的下一层的通道数就为 m。(可见2.1节的例子,原始图像有3个通道,现有2个滤波器,生成的下一层的通道数就为2)

    卷积神经网络

    3.4 隐层神经元个数

    我们刚才说:隐层的参数个数是和隐层的神经元个数无关的,只和滤波器的大小及滤波器种类的多少有关。即 隐层的参数个数 = 滤波器的大小 × 滤波器的种类数

    那么,隐层的神经元个数如何确定的呢? 它是和输入的大小(即原图像的大小)、滤波器的大小以及滤波器在图像中的滑动步长有关。

    例如,我们的图像大小是1000×1000,滤波器大小是10×10,假设滤波器没有重叠,也就是步长为10,这样隐层神经元的个数就是 (1000×1000)/(10×10)= 100×100;假设步长为8,也就是卷积核会重叠20个像素,这个时候zero-padding=1,也就是变为了1002×1002大小的图像,那么隐层神经元的个数就是((1002-2)/8)×((1002-2)/8)= 125×125。

    这只是对于一种滤波器来说,也就是一个Feature map的神经元个数,如果有100个Feature map就得再乘以100了。 由此可见,图像越大,隐层的神经元个数就越大。

    3.5 Down-pooling

    在通过卷积获得了特征 (features) 之后,下一步我们当然是希望利用这些特征去做分类。理论上讲,人们可以用所有提取到的特征去训练分类器(例如 softmax 分类器?),但这样做面临计算量的挑战,并且容易出现过拟合 (over-fitting)。

    为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。

    因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计。例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取到的特征),同时还会改善结果(不容易过拟合)。

    这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。如下图。

    卷积神经网络

    3.6 多层卷积

    在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是:一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。

    总之,卷积神经网络的核心思想就是:将局部感受野、权值共享以及时间或空间亚采样 这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。

    4.卷积神经网络的训练过程

    卷积网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积网络加以训练,网络就具有输入输出对之间的映射能力。

    卷积网络执行的是有监督训练,所以其样本集是由形如:(输入向量,理想输出向量)的向量对构成的。所有这些向量对,都应该是来源于网络即将模拟的系统的实际“运行”结果,它们可以是从实际运行系统中采集来的。

    在开始训练前,所有的权值都应该用一些不同的小随机数进行初始化。“小随机数”用来保证网络不会因权值过大而进入饱和状态,从而导致训练失败;“不同”用来保证网络可以正常地学习,实际上,如果用相同的数去初始化权值矩阵,则网络无能力学习。

    训练算法与传统的BP算法差不多。主要包括4步,这4步被分为两个阶段:

    第一阶段,向前传播阶段:

    1. 从样本集中取一个样本(X,Y),将X输入网络;
    2. 计算相应的实际输出O。在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是计算(实际上就是输入与每层的权值矩阵相点乘,得到最后的输出结果)

    第二阶段,向后传播阶段:

    1. 计算实际输出O与相应的理想输出Y的差;
    2. 按极小化误差的方法反向传播调整权矩阵。

    5.卷积神经网络的优缺点

    5.1 优点

    CNN是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜及其他形式的扭曲变形具有高度不变性。

    流的分类方式几乎都是基于统计特征的,这就意味着在进行分类前必须提取某些特征。然而,显式的特征提取并不容易,在一些应用问题中也并非总是可靠的。CNN避免了显式的特征提取,而是隐式地从训练数据中进行学习。这使得卷积神经网络明显有别于其它基于神经网络的分类器,通过结构重组和减少权值将特征提取功能融合进多层感知器中。它可以直接处理灰色图像,能够直接用于处理基于图像的分类。

    卷积神经网络以其权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,使其更接近于实际的生物神经网络。权值共享降低了网络模型的复杂度,减少了权值的数量。该优点在网络的输入是多维图像时表现的更明显,使多维图像可以直接作为网络的输入,避免了传统识别算法中复杂的特征提取和数据重建过程,使网络可以并行学习。

    卷积神经网络较一般神经网络在图像处理方面有如下优点:

    1. 输入图像和网络的拓扑结构能很好的吻合;(?)
    2. 特征提取和模式分类同时进行,并同时在训练中产生;(?)
    3. 权值共享可以减少网络的训练参数,使神经网络的结构变得更简单、适应性更强。

    参考文献:

    1. Deep Learning(深度学习)学习笔记整理系列之(七)— 卷积神经网络
    2. Jiuxiang Gu, Zhenhua Wang, Jason Kuen. Recent Advances in Convolutional Neural Networks
    3. CNN笔记:通俗理解卷积神经网络
    4. 技术向:一文读懂卷积神经网络
    5. 安逸轩的博客:http://andyjin.applinzi.com
  • 相关阅读:
    [项目管理]记一次外包过程遇到的“问题”以及“应对之道”
    [ZT]Web Standard and ASP.NET – Part1 XHTML Quick Start
    [前端技术]利用 try...catch 来跳出JQuery.each()
    [ZT]Use JQuery to adjust the iframe height
    [CSharp]复合格式化(Composite Formatting)
    [项目管理]关于项目的工期控制
    [CSharp]判断表达式为空的二元运算符
    MySoft.Data ORM组件之获取插入后的自增主键
    [前端技术]让iframe背景透明起来
    NSRunLoop
  • 原文地址:https://www.cnblogs.com/fhsy9373/p/6994004.html
Copyright © 2020-2023  润新知