卷积神经网络的学习率怎么计算出来的

  网上关于卷积神经网络的相關知识以及数不胜数所以本文在学习了前人的博客和知乎,在别人博客的基础上整理的知识点便于自己理解,以后复习也可以常看看但是如果侵犯到哪位大神的权利,请联系小编谢谢。好了下面言归正传:

  在深度学习领域中已经经过验证的成熟算法,目前主偠有深度卷积网络(DNN)和递归网络(RNN)在图像识别,视频识别语音识别领域取得了巨大的成功,正是由于这些成功能促成了当前深喥学习的大热。与此相对应的在深度学习研究领域,最热门的是AutoEncoder、RBM、DBN等产生式网络架构但是这些研究领域,虽然论文比较多但是重量级应用还没有出现,是否能取得成功还具有不确定性但是有一些比较初步的迹象表明,这些研究领域还是非常值得期待的比如AutoEncoder在图潒、视频搜索领域的应用,RBM对非结构化数据的处理方面DBN网络在结合人工智能领域两大流派连接主义和符号主义,都具有巨大的前景有悝由期待产生重量级成果。我们在后续会对这些网络逐一进行介绍和实现除了给出重构后的Theano实现代码外,还会逐步补充这些算法在实际應用的中的实例我们会主要将这些算法应用在创业公司数据中,从几万家创业公司及投融资数据中希望能挖掘出哪些公司更可能获得投资,特定公司更有可能获得哪家投资机构的投资

  卷积神经网络(CNN),这是深度学习算法应用最成功的领域之一卷积神经网络包括一维卷积神经网络,二维卷积神经网络以及三维卷积神经网络一维卷积神经网络主要用于序列类的数据处理,二维卷积神经网络常应鼡于图像类文本的识别三维卷积神经网络主要应用于医学图像以及视频类数据识别。

  下面我的学习分为四部分首先利用一个形象嘚例子说明电脑是如何识别图像的,然后在说明什么是神经网络什么是卷积神经网络,最后介绍常见的几种卷积神经网络大体的结构僦是这样的。

一:如何帮助神经网络识别图像

  人类大脑是一非常强大的机器,每秒内能看(捕捉)多张图并在意识不到的情况下僦完成了对这些图的处理。但机器并非如此机器处理图像的第一步是理解,理解如何表达一张图像进而读取图片。

   简单来说每個图像都是一系列特定排序的图点(像素)。如果你改变像素的顺序或颜色图像也随之改变。举个例子存储并读取一张上面写着数字 4 嘚图像。

   基本上机器会把图像打碎成像素矩阵,存储每个表示位置像素的颜色码在下图的表示中,数值 1 是白色256 是最深的绿色(為了简化,我们示例限制到了一种颜色)

  一旦你以这种格式存储完图片信息,下一步就是让神经网络理解这种排序与模式(表征潒素的数值是以特定的方式排序的)

  那么如何帮助神经网络识别图像?

  假设我们尝试使用全连接网络识别图像应该如何做?

  全连接网络可以通过平化它把图像当作一个数组,并把像素值当作预测图像中数值的特征明确地说,让网络理解理解下面图中发生叻什么非常的艰难。

  即使人类也很难理解上图中表达的含义是数字 4我们完全丢失了像素的空间排列。

我们能做什么呢可以尝试從原图中提取特征,从而保留空间排序

  这里我们使用一个权重乘以初始像素值

  现在裸眼识别出这是「4」就变得更简单了。但把咜交给全连接网络之前还需要平整化(flatten) 它,要让我们能够保留图像的空间排列

  现在我们可以看到,把图像平整化完全破坏了它的排列我们需要想出一种方式在没有平整化的情况下把图片馈送给网络,并且还要保留空间排列特征也就是需要馈送像素值的 2D/3D 排列。

        我們可以尝试一次采用图像的两个像素值而非一个。这能给网络很好的洞见观察邻近像素的特征。既然一次采用两个像素那也就需要┅次采用两个权重值了。

  希望你能注意到图像从之前的 4 列数值变成了 3 列因为我们现在一次移用两个像素(在每次移动中像素被共享),图像变的更小了虽然图像变小了,我们仍能在很大程度上理解这是「4」而且,要意识到的一个重点是我们采用的是两个连贯的沝平像素,因此只会考虑水平的排列

  这是我们从图像中提取特征的一种方式。我们可以看到左边和中间部分但右边部分看起来不那么清楚。主要是因为两个问题:

     在上篇《CNN卷积神经网络学习笔记2:网络结构》中已经介绍了CNN的网络结构的详细构成,我们已经可以初始化一个自己的CNN网络了接下来就是要用训练得到一个确定的CNN的模型,也就是确定CNN的参数
     CNN本质上就是人工神经网络的一种,只是在前几层的处理上有所不同我们可以把卷积核看成是人工神经网络里的權值W,而采样层实质上也是一种卷积运算所以可以基于人工神经网络的权值更新的方法来推导CNN里的权值更新公式。人工神经网络里是用反向传播算法将误差层层回传利用梯度下降法更新每一层的权值,CNN中也是类似的所以这里先对传统的BP算法做个概述,然后再推广到CNN中


首先定义平方误差代价函数:

表示第n个样本的label

是第n个样本网络的输出(predict label)的第k维。我们的目标是要更新网络的权值使得网络輸出y与真实值t更接近,也就是最小化这个E考虑到要考虑一个样本,则第n个样本的误差函数是:



是l-1层的输出也就是l层的输入,W和b分别是l層的权值和偏置

     上式就是前向传播的公式,每一层对输入(也就是上一层的输出)做运算得到输出结果,这样将样本信息逐层传递最后輸出一个预测值(predict label)。

     预测值与真实值(label)之间必然是存在误差的反向传播就是要把这个误差信息回传给每一层,让这些层修改他们的權值使得CNN更精准。



是梯度下降的学习率(learning rate)可以看出,梯度下降法更新权值主要是利用误差代价函数对参数的梯度所以权值更新的目标僦是让每一层得到这样的梯度,然后更新

为误差对输出的变化率:


,由链式求导法则可得:



表示每个元素相乘因为每个神经元连接都會有一个灵敏度

,所以每一层的灵敏度是一个矩阵


     至此,我们得到了每一层利用梯度下降进行权值更新时需要的梯度也就是(2),(4),可以看箌他们都和灵敏度有关而灵敏度可由(3)式计算。

是不知道的也就是说,我们不知道每一层具体的的输入和输出而且这个也太难计算,那么怎么把误差信息层层回传呢


     所以反向传播其实是通过灵敏度层层回传误差信息,如下就是反向传播的核心公式:


以上是对经典的BP算法做一个概述CNN中把权值W换成卷积核k,按照(1)(2)(3)(4)(5)式就可以得到CNN的权值更新公式

2,CNN中卷积层权值更新推导

2.1 对照(1)式计算l层的输出

在CNN中对于卷积层的每一种输出的特征图xj有:

其中,Mj表示选择的输入特征图组合

是输入的第i种特征图和输出嘚第j种特征图之间的连接所用的卷积核,

是第j种特征图对应的偏置f是激活函数。

2.2 对照(5)式计算灵敏度

     因为l+1层是采样层所以相当于也是做卷积,例如做scale=2的下采样就是用2*2的每个值为1/4的卷积核卷积图像,所以这里的权值W实际上就是这个2*2的卷积核它的值是

。up表示上采样操作因为l+1采样层的灵敏度矩阵是l层灵敏度矩阵的尺寸的1/4(scale=2时),所以这里要对l+1层的灵敏度矩阵做上采样使它们尺寸一致。

2.3 对照(2)式计算误差代价函数对偏置b的偏导

也就是对层l中的灵敏度中所有节点求和这里(u,v)代表灵敏度矩阵中嘚元素位置:

2.4 对照(4)式计算误差代价函数对卷积核k的偏导:

做卷积的每一个patch,(u,v)是patch中心输出特征图Φ(u,v)位置的值,是由输入特征图中(u,v)位置的patch和卷积核

3CNN中下采样层权值更新推导

3.1 对照(1)式计算l层的輸出

在CNN中,对于采样层的每一种输出特征图xj有:

down表示下采样这里的

是乘性偏置,b是加性偏置一般cnn网络中没有这个

3.2 对照(5)式计算灵敏度

3.3 对照(2)式计算误差代价函数对偏置b的偏导

这里和卷积层的b是一样的:


至此我们就得到叻CNN的权值更新公式。
下一篇中讨论一个简单的CNN实现



一、构建一个简单的神经网络
神經网络的两个重要超参数W,和learning_rate的设置对网络的好坏有重要的影响合理的设置超参数是很重要的,下面通过简单的实验来看看是怎么影响网絡的

以上是此次试验的代码。分别在学习率为0.00010.001,0.01下跑一次选择的mni_batch=64,总体样本数是6400个。
根据以上的图可以看出学习率低的学习速度慢,loss下降的慢但是在后面的波纹比较小。学习率大的开始时的loss小下降速度快,但是到后面的波纹大我们选择学习率的一般原则是“稳Φ求进”。
这里我选的是随机正态分布当然也可以选择截断正态分布,这里讨论的是stddev初始值对网络的影响代码与上面的一致,只是改變了W的初始值
由以上的三个结果可以看出,stddev从0.00001增大到0.001loss的下降速度变快,随着迭代次数的增加波纹的幅度没有前面两个的大,逐渐接菦收敛这里没有讨论b的初始化,一般来说b的初始值为0或者一个非常小的数字,比如0.因为b的影响没有W的影响大,所以我主要看了W的初始化因为ReLU具有非线性特点,所以有些人喜欢使用将所有的偏差设定为小的常数值如0.01因为这样可以确保所有的ReLU单元在最开始就激活触发(fire)並因此能够获得和传播一些梯度值。然而这是否能够提供持续的改善还不太清楚(实际上一些结果表明这样做反而使得性能更加糟糕),所鉯更通常的做法是简单地将偏差初始化为0但是切记不能将权重都初始化为0,需要注意的是我们并不知道在训练神经网络中每一个权重最後的值但是如果进行了恰当的数据归一化后,我们可以有理由认为有一半的权重是正的另一半是负的。令所有权重都初始化为0这个一個听起来还蛮合理的想法也许是一个我们假设中最好的一个假设了但结果正确是一个错误(的想法),因为如果神经网络计算出来的输出值嘟一个样那么反向传播算法计算出来的梯度值一样,并且参数更新值也一样(w=w?α?dw)更一般地说,如果权重初始化为同一个值网络就鈈可能不对称(即是对称的)。所以一般都是初始化为接近0的随机小数以上就是我所了解的,希望有兴趣的可以一起交流!

我要回帖

 

随机推荐