• 卷积神经网络的学习


    一 卷积神经网络的概述     

    我们知道BP网络的每一层的神经元与上一层,以及它的下一层都是全连接的,那么,我们假设每一层的神经元与上一层的神经元只有部分连接(局部连接,涉及到动物视觉中感受野概念),这就构成了我们要说的卷积神经网络结构。当然,也有人说BP网络是卷积神经网络的特例,每一层的神经元采取全连接的方式连接。

    BP网络和卷积神经网络的一个神经元与上一层的连接情况,就像下面这样:

    图1

    卷积神经网络的特殊性在于:

    (1)每一层的神经元之间的是非全连接的方式 (2)同一层的某些神经元采取的是权值共享的方式,即神经元的权重和偏置相同

    这样的好处是降低了网络模型的复杂度(对于很难学习的深层结构来说,这是非常重要的),减少了权值的数量。

    卷积神经网络的结构

    卷积神经网络的结构是为识别二维形状而特殊设计的多层感知器,这种网络结构对于平移,比例缩放,倾斜等其他形式的变形具有高度不变性。这些都是网络的在有监督的条件下学习得到的。卷积神经网络是一个多层的神经网络,每一层由多个二维平面组成,每个平面由多个神经元组成,

    图2

    图2中,输入图像,通过三个可训练的滤波器(可加偏置项,如图3)进行卷积,卷积后在C1层产生三个特征映射图;然后,C1中每个特征映射图的每组像素(一般为2*2)进行求和,加权重项,再加偏置项(见图3),通过sigmoid激活函数,分别得到S2相应的三个特征映射图;C3层再以S2层作为输入,通过滤波器对S2层的特征映射图进行卷积,加偏置项得到C3,然后,由通过S2同样的方式得到C3层每个特征图对应的映射图,即得到S4;最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。

    图3

    一般地,C层为特征提取层,每个神经元的输入与上一层的局部感受野相连接,并提取该局部的特征,一旦该局部的特征被提取后,它与其他特征间的相对位置关系随之确定下来。S层是特征映射层(子抽样层),网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有的神经元的权值相等。特征映射结构采用影响核函数较小的sigmoid函数作为卷及网络的激活函数,使得特征映射具有位移不变性。

    此外,由于映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络的每一个特征提取层(C层)都跟随者一个用来求局部平均(或局部最大)和二次提取的计算层(S层),这种特有的两次特征提取结构使网路在识别时,对输入的样本具有较高的畸变容忍能力。

    下面,再来讨论一下,卷积神经网络的两大特征,稀疏连接和权值共享:

    (1)稀疏连接

    卷积网络通过在相邻两层之间强制使用局部连接模式,来利用图像空间的局部特性,在第m层的隐层单元只与第m-1层的输入单元的局部区域有连接,第m-1层的这些局部区域被称为空间连续的接受域。可以将这些结构描述如下,

    设第m-1层为视网膜输入层,第m层的接受域的宽度为3,也就是说该层的每个单元与且仅与输入层的3个相邻的神经元相连,第m层和第m+1层具有类似的链接结构,如下所示:

    可以看到m+1层的神经元相对于第m层的接受域的宽度也为3,但相对于输入层的接受域为5,这种结构将学习到的过滤器(对应于输入信号中被最大激活的单元)限制在局部空间 模式(因为每个单元对它接受域外的variation不做反应)。从上图也可以看出,多个这样的层堆叠起来后,会使得过滤器(不再是线性的)逐渐成为全局的(也就是覆盖到了更 大的视觉区域)。例如上图中第m+1层的神经元可以对宽度为5的输入进行一个非线性的特征编码。

    (2)权值共享

    在卷积网络中,每个系数过滤器通过共享权值覆盖整个可视域,这些共享权值的单元构成一个特征映射,如下所示:

    在图中,有3个隐层单元,它们属于同一特征映射,同种颜色的连接权值是相等的,我们仍然可以通过梯度下降的方法来学习这些权值,只需要对原始算法做一些小的改动,这里共享权值的梯度是所有共享参数的梯度的总和。为什么要权值共享呢,一方面,重复单元可以对特征进行识别,而不考虑它在可视域的位置;另一方面,权值共享能更有效的进行特征提取,因为它极大地减少了要学习的自由变量的个数。通过控制模型的规模,卷及网络对视觉问题可以具有很好的泛化能力。

    关于卷积神经网络结构的一个例子,LeNet-5模型结构,可以参见这篇博文,且本文上述内容的概念思想也是来源于该文:http://blog.csdn.net/zouxy09/article/details/8781543

    三 卷积神经网络的逐层结构分析

    他山之石,可以攻玉,关于卷积神经网络的逐层结构分析,大家可以参见这篇博文,是以LeNet为例,从代码的角度逐层分析各项参数,看完这篇博文,相信对于卷积神经网络会有更加深入的了解,http://www.2cto.com/kf/201606/518254.html

    卷积神经网络的训练

     训练算法和传统的BP算法差不多,主要有四步(被分为两个阶段):

    第一阶段(向前传播阶段):

    a)初始化模型参数,通过随机产生一些不同的值较小的随机数,小随机数用来保证网络不会因为权值过大而进入饱和状态,从而导致训练失败。不同用来保证网络可以正常的学习,实际上,如果用相同的数来初始化权重矩阵,网络几乎没有学习能力。

    b)取样本(x,y)将x输入到网络

    c)计算相应的实际输出o:在此阶段,数据从输入层经过朱层的额变换,传到输出层。在此过程中,网络执行的是计算过程,实际上就是输入和每层的权值矩阵相点乘,得到最后的输出结果,O=Fn(…(F2(F1(XW(1))W(2))…)W(n)),F(xw(i))为第i层的激活函数。

    第二阶段(反向传播阶段):

    a)计算实际输出o和理想输出y的残差

    b)按极小化误差的方法反向传播调整权重

    总结:总体而言卷积神经网络可以简化为如下模型:

    图4 

    其中,input到C1,S4到C5,C5到output采用全连接的方式,C1到S2,C3到S4采用一一对应连接方式,S2到C3为了消除网络的对称性,去掉了一部分连接,可以使特征映射更具有多样性。此外,C5卷积核的尺寸要和S4的输出相同,这样才能保证输出为一维的向量。

    五 dropout:我们知道,卷积神经网络一般的结构由数据层,卷积层,抽样层(池化层),Relu(为什么选择Relu作为激活函数,因为它可以加速收敛,从而使学习周期大大缩短)全连接层和损失层,然而最近在学习VGG网络的时候,看到dropout层,于是带着疑问查阅了相关资料,得到的结论就是dropout主要是为防止过拟合,因为在训练大网络的时候,如果训练样本不足,很可能会导致过拟合的发生,可能我们会想到L2正则化,减小网络规模等方法,然而深度学习领域大神Hinton,在2012年文献:《Improving neural networks by preventing co-adaptation of feature detectors》提出了,在每次训练的时候,让一半的特征检测器停止工作,这样可以提高网络的泛化能力,Hinton又把它称之为dropout。Hinton认为过拟合,可以通过阻止某些特征的协同作用来缓解。在每次训练的时候,每个神经元有百分之50的几率被移除,这样可以让一个神经元的出现不应该依赖于另外一个神经元。

    另外,我们可以把dropout理解为 模型平均。 假设我们要实现一个图片分类任务,我们设计出了100000个网络,这100000个网络,我们可以设计得各不相同,然后我们对这100000个网络进行训练,训练完后我们采用平均的方法,进行预测,这样肯定可以提高网络的泛化能力,或者说可以防止过拟合,因为这100000个网络,它们各不相同,可以提高网络的稳定性。而dropout也可以这么理解,假设模型有10000个参数,我们每次以概率p随机地关闭部分神经元,哪些神经元被关闭不作用是随机的,这样,我们利用剩余未关闭的网络进行训练,得到预测结果。然后,我们再重新以概率p随机地关闭网络的部分神经元,由于随机性,我们得到了一个新的与之前不同的网络,再次进行预测;依次类推,假设得到了100000个不同的网络预测的结果,我们就可以根据多数表决原则,得到准确的预测结果,这样就提高了网络的泛化能力。

    假设x是dropout layer的输入,y是dropout layer的输出,W是上一层的所有weight parameters, 是以retaining probability 为p 采样得到的weight parameter子集。把上面的东西用公式表示(忽略bias):

    train:  

    test:

    但是一般写程序的时候,我们想直接在test时用   , 这种表达式。(where  ) 

    因此我们就在训练的时候就直接训练  。 所以训练时,第一个公式修正为    。 即把dropout的输入乘以p 再进行训练,这样得到的训练得到的weight 参数就是  ,测试的时候除了不使用dropout外,不需要再做任何rescale。

    如果想了解更多关于dropout的相关资料,可以参见一下文章:

    http://blog.csdn.net/u012702874/article/details/45030991

    http://blog.csdn.net/l494926429/article/details/51943564

  • 相关阅读:
    机器学习(深度学习)
    机器学习(六)
    机器学习一-三
    Leetcode 90. 子集 II dfs
    Leetcode 83. 删除排序链表中的重复元素 链表操作
    《算法竞赛进阶指南》 第二章 Acwing 139. 回文子串的最大长度
    LeetCode 80. 删除有序数组中的重复项 II 双指针
    LeetCode 86 分割链表
    《算法竞赛进阶指南》 第二章 Acwing 138. 兔子与兔子 哈希
    《算法竞赛进阶指南》 第二章 Acwing 137. 雪花雪花雪花 哈希
  • 原文地址:https://www.cnblogs.com/zy230530/p/6675680.html
Copyright © 2020-2023  润新知