BP深度学习方法

来源:互联网 发布:深圳前海共享网络 编辑:程序博客网 时间:2024/06/05 01:20


BP深度学习方法

何文华

(深圳市普利得软件开发有限公司)

摘要:深度学习是一种新兴的有效多层神经网络学习算法,典型的BP神经网络学习算法不适用于多层网络的学习。文中详细描述了如何突破这个障碍,使BP神经网络适用于深层网络的学习。

关键词:神经网络;深度学习;BP神经网络

中图分类号TP181

BP deep learning method

HE WENHUA

(SHENZHEN PLATEDSP SOFTWARE DEVELOPMENT CO., LTD.)

Abstract: deep learning is an emerging and effective multilayer neural networklearning algorithm, the typical BP neural network learning algorithm does notapply to multi-network learning. This paper describes in detail how to breakthis barrier, making BP neural network suitable for deep learning network.

Keywords: neural networks; deep learning; BP neuralnetwork

 


一、引言

当前多数分类、回归等的学习方法都是针对浅层结构的算法,浅层结构在有限的样本情况下,对复杂函数的表示能力有限,针对复杂分类问题的泛化能力受到制约。而深层网络结构在有限的样本情况下,能很好地逼近复杂函数,具有很强的特征抽取与表示能力。

        深度学习(Deep Learning)的实质就是对含多隐含层神经网络的训练。通过组合低层次的特征,形成更加抽象的高层次特征,以发现数据的分布式特征表示。Hinton等人基于深信度网(DBN)提出非监督贪心逐层训练算法,为解决深层结构训练带来希望。此外,还有一些变形的训练方法,如去噪自动编码器、DCNsum-product等。这些深度学习算法一般都很复杂,运算量巨大,当数据的维数稍大或样本数较多时,用普通的PC机来训练的话要花费很长的时间(可能要几天,甚至几个月),基本上只能运行于一些大型计算机上,不利于深度学习的普及应用。

二、神经网络

科学家在研究哺乳动物的视觉系统时发现:图像信号从视网膜传递到大脑皮层的时间很短,从而推断出:大脑皮质并没有直接对图像数据进行特征提取处理,而是通过一个复杂的层状网络模型,进而得到图像的展现规则来识别物体。这种模型可以极大地减少数据的处理量,提高处理速度,并有效地保留了物体的固有特征。图1是人工神经网络的示意图。神经网络可以包括多个隐含层,受制于训练算法,常用的网络仅包含一层隐含层。

三、BP神经网络

 

目前应用最广泛的浅层学习模型是BPBack Propagation)神经网络。BP的学习过程如图2所示。BP网络是典型的有监督学习方法,这种方法只保存特征信息,所以可以使用较小的网络。在理论上,BP网络可以训练具有多层网络的结构,但在实际应用中,当训练样本较大时,经典的BP网络模型基本上只能训练具有1层隐含层的网络。对多隐含层网络的反向传播误差有误,无法训练包含多隐含层的网络。

四、深度学习

深度学习的概念是2006年由Geoffrey Hinton等人提出来的。目前常用的算法有AutoEncoderSparse Coding以及Restrict BoltzmannMachine(RBM)等。深度学习的基本原理如图3所示,假设有一个系统S,它具有N层网络(S1… Sn),它的输入是I,输出是O。通过学习,使输出O等于或逼近输入I,即输入I经过系统S变化后没有信息损失,这也意味着输入I经过每一层Si都没有信息损失,它都能有效表示输入I。这样我们就可以得到输入I的一系列的层次特征,即S1,…Sn

深度学习一般是逐层进行训练的,即先训练第一层,达到一定的误差要求后再训练第二层,依次类推,直到所有网络层都训练完成。这些深度学习一般都使用了非监督学习的方法,非监督学习的核心思想就是尽量“记住”原始的数据,以便需要时复原,这势必使用非常大的网络,从而大大降低了网络的训练速度。

深度学习网络并不是万能的,对于某些领域,效果可能比较明显(例如:语音识别、语意理解),这是因为它们过于抽象,必须使用多层网络才能较好地表示它们的特征。但对于一些稍为简单的领域(例如:图像文字识别),两层的网络已能较好地表示它们的特征,使用更多层的网络的效果不一定有像语音识别的应用那样明显。使用多少层的网络,我们应平衡一下识别率及CPU的运算性能。

五、BP深度学习

当前许多神经网络方面的研究都过分偏重理论及算法创新,较少从工程角度解决实际问题。实际上BP神经网络简单实用,运算速度相对较快,算法易于并行化;只要稍作变型,就可以适用于深度学习。

1、数据流程

在如图4所示中,我们把网络层划分为两大部分:第一部分为除最后两层外的网络;第二部分为最后两层的网络。

对于第一部分,训练从第一层开始,每层网络独立训练,达到一定的误差要求后,再进行下一层网络的训练。该部分中的各层训练方法是:每层网络都增加一个附加网络层,该层网络与附加网络共同使用一个独立的BP系统,标签数据为L,训练结束后,只保留该层网络数据,丢弃附加层的数据。

第二部分的训练也使用一个独立的BP系统,标签数据为L,训练结束后,保留两层网络数据。

以图4为例详细说明第一部分的训练流程:

第一层S1:输入数据I与网络S1运算,得到的数据再与附加层AS1运算,从而得到输出数据AO1;输出数据AO1与标签数据L进行比较,得到误差数据AOE1AOE1AS1运算,以反向传播误差,得到误差AE1,通过AE1以及S1的输出调整网络AS1相应的各项权重;AE1S1运算,以反向传播误差,得到误差E1,通过E1以及输入I调整网络S1相应的各项权重。

第一层训练达到一定误差要求后,结束该层的训练,以开始第二层的训练。

第二层S2:输入数据I与网络S1运算,得到数据为O1,把O1当作S2的输入数据I2I2与网络S2运算,得到的数据再与附加层AS2运算,从而得到输出数据AO2;输出数据AO2与标签数据L进行比较,得到误差数据AOE2AOE2AS2运算,以反向传播误差,得到误差AE2,通过AE2以及S2的输出调整网络AS2相应的各项权重;AE2S2运算,以反向传播误差,得到误差E2,通过E2以及I2调整网络S2相应的各项权重。

第二层训练达到一定误差要求后,结束该层的训练,以开始下一层的训练。如果第一部分还有其它没有训练的网络层,参照第二层的流程进行训练。

以图4为例详细说明第二部分的训练流程:

输入数据I与网络S1S2…Sn-2运算,得到数据为On-2,把On-2当作Sn-1的输入数据In-1In-1与网络Sn-1运算,得到的数据再与Sn运算,从而得到输出数据O;输出数据O与标签数据L进行比较,得到误差数据OEOESn运算,以反向传播误差,得到误差En,通过En以及Sn-1的输出调整网络Sn相应的各项权重;EnSn-1运算,以反向传播误差,得到误差En-1,通过En-1以及In-1调整网络Sn-1相应的各项权重。

训练完成后,只保存网络层S1S2Sn-1Sn的数据,附加层的数据全部丢弃。

从以上流程看出,每一步的训练,BP系统都只有二层网络参与,从而避免了误差传递的错误引起的振荡。在实际使用这一模型时,BP系统可以有最多三层网络,但最顶层的网络的学习速率只能有其它两层速率的10%左右,否则一样会产生振荡,无法收敛。

2、无法收敛问题

BP神经网络经常会遇到无法收敛的问题,一种原因是局部极小值,还有一种原因就是误差传递的错误。无法收敛会大大延长训练时间,也可能使训练结果变得不再可用。不少专家学者提出了各种改善局部极小值的方法,但BP模型的误差反向传播可能会出现错误,这种错误的出现应该是BP理论本身无法避免的。

我们在实验中使用了“抖动”的方法,很好地解决了各种无法收敛的问题。抖动就是在适当的时候人为地把当前BP系统中各网络层的各个权重值叠加一个很小的随机值(可以是正,可以是负,也可以是0)。什么时候适合抖动呢?我们认为当出现多次的误差上升,而不是下降时就可以抖动;还有就是每训练2000次之后,即使没有出现误差上升,也可以抖动一次。抖动完成后,再次进入训练循环,直到下次的抖动或训练结束。

六、实验结果

本实验的运行环境为:

Intel Core i3-2120 CPU @ 3.30GHz,双核四线程,4GB内存,集成显卡。

Windows 7 SP1 64位操作系统。

训练程序运行时使用了两个CPU并行运行,CPU占用率约50%;使用了SSE2多媒体加速指令优化;没有使用GPU。运行期间可以进行网页浏览、文本编辑等操作,对训练程序的运行影响不大。

训练及测试数据为MNIST手写体0-9的标准数据,训练样本为60000个,测试样本为10000个。数据为28x28点阵的图像。

训练网络时,学习速率为:0.1,最大限定误差为0.01,核函数SIGMOIDf(x) = 1 / (1 + exp(-x))

实验结果中的错误率定义如下:

“识别错误率”定义如下:网络输出数据中最大值对应的标签值,即为识别结果;识别结果错误的数量占全部测试样本的数量的百分比即为识别错误率。

“限定错误率”定义如下:网络输出数据与标签数据的某一个误差绝对值大于等于最大限定误差,或者网络输出数据与标签数据的误差均方值大于等于最大限定误差,即为识别错误;识别错误的数量占全部测试样本的数量的百分比即为限定错误率。

“限定0.01错误率”即为:当最大限定误差为0.01时的限定错误率。

“限定0.5错误率”即为:当最大限定误差为0.5时的限定错误率。

我们认为:在实际应用中,“识别错误率”无法体现识别结果的置信度,如果输入的图像根本不是识别范围中的数字,它也肯定会输出一个有效的数字结果,这明显是错误的。而“限定错误率”能够体现置信度,不是有效的输入数据,可能就达不到限定误差的条件,也即没有输出结果,具有较高的可靠性及实用性。而“限定0.5错误率”非常适用于输出值在01范围之内的网络(例如:使用核函数SIGMOID的网络)。

1、BP两层神经网络结果

二层网络的错误率测试结果如表1、表2、表3。表1784x64x10(即一层为784输入64输出,另一层为64输入10输出,简单表示为:784x64x10),表2784x120x10,表3784x160x10。这三组数据可以用来对比不同维数网络的错误率,以及训练时间。测试分为5次,取平均值。

对比表1、表2与表3,发现在二层网络中,维数高的网络的错误率相对维数低的网络可能要好一些,但不是有特别大的差别。网络维数的选取要适当,选取较小维数的网络虽然识别速度可以加快,但如果太小的话,错误率将上升,训练时间也将成倍增加。

2BP深度学习结果

BP深度学习7层网络的错误率测试结果如表4、表5。与二层网络对比,发现识别错误率有轻微的改善,变化不大,而限定错误率有非常明显的改善,差不多只有二层网络的一半。训练耗时增加了一些,但不是很多。

七、结论

通过对手写体数字识别的测试,证明本文介绍的BP深度学习方法,能有效降低限定错误率;相对其它深度学习方法,BP深度学习方法的学习速度有巨大的优势。

八、主要参考资料

1、  SteffenNissen, Fast Artificial Neural Network Library, http://leenissen.dk/

2、  GeoffreyE. Hinton, Simon Osindero, Yee-Whye Teh. A fast learning algorithm for deepbelief nets, http://www.cs.toronto.edu/~hinton/absps/fastnc.pdf

3、  ChrisBurges, Corinna Cortes, THE MNIST DATABASE of handwritten digits, http://yann.lecun.com/exdb/mnist/

 


 

0 0
原创粉丝点击