- 1 -
中国科技论文在线
基于 Spark 的改进并行 BP 算法
刘永,方维,吴斌**
作者简介:刘永(1992-),男,硕士研究生,主要研究方向:通信软件
通信联系人:方维(1968-),女,副教授,主要研究方向:计算机技术及应用
(北京邮电大学智能通信软件与多媒体北京市重点实验室,北京 100876)
5 摘要:BP(Back Propagation)神经网络是一种以误差反向传播进行训练的多层前馈网络,是目
前最受欢迎的神经网络模型之一。传统 BP 算法收敛速度慢、训练时间长、经常陷入局部极
小值且易发生过拟合。本文从动态调整学习率、增加动量因子、采用小批量梯度下降法、换
用交叉熵代价函数、使用 early stop 防止过拟合等多个方面对传统 BP 算法加以改进,并将
改进后的算法基于 Spark 平台进行实现。Spark 是一种基于内存的并行计算框架,擅长处理10
迭代计算,因此非常适合实现 BP 算法的并行化。通过与MLlib 中多层感知机的实验对比发
现,本文实现的 BP 算法在保证准确率的同时,收敛速度至少提高 30%以上。
关键词:神经网络;改进 BP 算法;Spark 框架;迭代计算;并行实现
中图分类号:TP183
15
Improved Parallel BP Algorithm Based on Spark
Liu Yong, Fang Wei, Wu Bin
(Beijing Key Laboratory of Intelligent Telecommunications Software and Multimedia, Beijing
University of Posts and Telecommunications, Beijing 100876)
Abstract: BP (Back Propagation) neural network is a multilayer feedforward neural network with error 20
back propagation, and it is one of the most popular neural network models. The traditional BP
algorithm has a slow convergence rate, long training time, often caught by a local minimum and easy to
overfit. In this paper, we improved the traditional BP algorithm in many aspects,such as the
self-adaptive learning rate, the momentum factor, the mini-batch gradient descent method, the cross
entropy cost function, the early stop criteria and so on, and then implemented the improved algorithm 25
based on spark platform. Spark is a memory-based parallel computing framework, and it is good at
dealing with iterative computation, so it is very suitable for the parallelization of BP algorithm.
Compared with the experimental results of multi-layer perceptron classifier of Mllib, we found that the
BP algorithm in this paper can ensure the accuracy of the classification, and the convergence speed is
increased by at least 30%. 30
Key words: neural network; improved back propagation algorithm; Spark framework; iterative
computation; parallel implementation
0 引言
BP 神经网络是应用最广泛的神经网络模型之一,因其优越的非线性映射能力、高度自35
学习自适应能力、良好的容错能力和较强的泛化能力[1],广泛应用于模式识别、分类、预测
等领域。然而,BP 神经网络本身也存在着很大的局限性和不足,主要体现在学习效率低、
收敛速度慢、易陷入局部极小等方面。此外,由于大数据时代的到来,数据与信息呈几何级
增长,单机的 BP 算法再也不能满足人们对大数据进行处理分析的需求,算法并行化无疑成
为了一种有效的解决方案。 40
MapReduce是一种并行框架,由于其强大的可扩展性、容错性、负载均衡以及非常易
于使用等优点而得到广泛应用,因此大量的数据挖掘算法基于MapReduce实现了并行。但
MapReduce在设计方面存在一定缺陷,它将中间结果存储在磁盘上,需要时再从磁盘上读
取数据,造成了很大的时间开销,因此特别不擅长迭代计算,而 BP 算法恰恰就是一个迭代
- 2 -
中国科技论文在线
计算量很大的算法。Spark是 UC Berkeley AMP lab所开源的通用并行框架,它具有45
MapReduce的所有优点,同时启用了内存分布数据集,可以将数据集缓存在内存中以缩短
访问延迟,从而优化迭代工作负载,具有 Hadoop无法比拟的性能优势,非常适合并行化实
现 BP 算法。
针对传统并行 BP 算法的不足,本文基于 Spark 集群环境实现了算法的并行化,并采用
了一系列的改进措施,包括自适应调节学习率、增加动量因子[1]、采用小批量梯度下降法[2]、50
使用 early stop[3]避免过度训练、使用交叉熵[4]作为代价函数等等,有效提高了 BP 算法的收
敛速度,降低了模型训练时间。
1 相关工作
传统的单机算法以串行方式处理数据,受限于单台主机的内存、CPU、I/O 等有限的资
源,对大规模数据的处理力不从心。而并行算法则充分利用多台主机的资源优势,各台主机55
并行地进行计算任务,在提升数据处理量的同时还能减少运算时间。文献[5]设计了四种不同
的并行和多线程 BP 算法,分别是基于 MPI 的神经元并行和训练集并行以及基于 OpenMP
的细粒度并行和粗粒度并行。文献[6]采用MPI架构,通过将整个网络的神经元动态映射到各
个处理器,以 BP 算法进行训练从而实现了多层感知机。文献[7]在MapReduce 上实现 BP 算
法的并行,同时采用基于多样化的数据抽样方法去除大量相似的冗余数据以减少训练时间,60
通过 adaboost 方法组合多个弱分类器形成一个强分类器,从而改善分类性能。文献[8]分析
MapReduce 框架的 Mapper 与 Reducer 机制,将大量的训练处理过程放到 Mapper 中,只输
出用于批更新的权值和偏置值,有效地减少了 I/O 代价较大的中间数据,提升了 BP 算法的
训练速度。文献[9]在 Hadoop、HaLoop、Spark 平台上分别实现了 BP 算法并进行了对比分析,
通过使用 bootstrapping 和多数投票方法来提高算法的准确度,取得了较好的效果。另外,65
Spark平台本身的机器学习库 MLlib也实现了基于 BP 训练算法的多层感知机,其以 L-BFGS
作为优化算法进行实现,但其收敛时间较长,尤其在数据量较大时表现不佳。本文基于传统
BP 算法进行改进并在 Spark 平台上实现,有效地减少了训练时间,提升了 BP 算法的性能。
2 BP算法的改进
BP 神经网络一般由多层组成,包括一个输入层、多个隐含层和一个输出层。研究表明,70
只含有一个隐含层的 BP神经网络能以任意精度逼近任意非线性函数[10],图 1即为典型的三
层 BP 神经网络的结构。
. . .
. . .
. . .
. . .
. . .
输入层 隐含层 输出层
x0
x1
xn
y0
y1
yn
图 1 三层 BP 神经网络结构
本文基于三层网络实现 BP 算法,针对传统 BP 算法的不足,从以下几个方面进行改进: 75
- 3 -
中国科技论文在线
自适应调节学习率
梯度下降法的原理在于每次迭代过程中,将网络中各权值按梯度下降最快的方向进行调
整,如公式(1)所示。
E
w
w
(1)
其中, 表示权值, 表示代价函数, 表示学习率。由公式可以看出,学习率的大小直80
接影响权值的改变速度,从而影响训练时间和训练精度。学习率过大,权值会在最佳点左右
来回震荡,难以收敛;学习率过小,权值调整过慢,会加长收敛时间。在训练过程中,误差
的梯度是不断变化的,需要动态根据公式(2)自适应调节学习率,使网络始终保持最大训练
速度。
1
1 1
i i i
i i i i
i
E E
E E
当
当
其他
(2) 85
其中, 是迭代次数, 是第 次迭代的学习率, 是第 次迭代的代价, 是学习率增大
倍数(一般取 ), 是学习率减小倍数(一般取 ),是最大误差变化率(一般取 )
增加动量因子
代价函数随权值变化的曲线中可能存在多个极小值,在训练过程中,网络易陷入某个局
部极小值而得不到全局最优解。可以按照公式(3)增加动量因子,在本次权值修改量中加入90
上次权值改变量,帮助跳出局部极小点。
1i i
E
w w
w
(3)
其中, 是动量因子(一般在 左右), 是第 次迭代的权值修改量。
采用小批量梯度下降法
梯度下降法有三种不同的形式,分别为 batch GD(批量梯度下降法)、SGD(随机梯95
度下降法)和 mini-batch GD(小批量梯度下降法)。Batch GD每次迭代需要对所有样本进
行训练,然后调整权值,当训练样本很大时迭代时间较长。SGD 则每次迭代只随机选择一
个样本进行训练,单次迭代时间很短,但需要的迭代次数较多,且噪声影响很大,每次更新
并不是向着整体最优方向进行。而 mini-batch GD是前两者的折中方案,每次迭代训练部分
样本,这样单次迭代时间不会很长,且迭代次数也不需太多,性能比前两者好得多,因此本100
文选择 mini-batch GD方法进行训练。
采用交叉熵代价函数
传统 BP 算法采用二次代价函数计算网络的误差,二次代价函数如公式(4)所示。
2
2
y t
E
(4)
其中,y为网络的输出值,t为网络的期望值。则权值的梯度如公式(5)所示。 105
'
E
y t f x
w
(5)
其中 为输出层激活函数的导数, 为输出层神经元的输入。由公式可以看出,权值的
- 4 -
中国科技论文在线
梯度与激活函数的导数成正比。在实际应用中,激活函数的导数往往有一段接近于零的区域,
这就导致网络学习速度很慢。本文通过采用交叉熵代价函数消除激活函数的导数对学习速度
的影响,交叉熵代价函数如公式(6)所示。 110
ln 1 ln 1E t y t y (6)
则此时权值的梯度如公式(7)所示。
E
y t x
w
(7)
可以看出,此时梯度大小不受激活函数的导数影响,只与输出值和期望值的偏差线性相
关,偏差越大则权值更新越快,符合学习速率的要求。 115
此外,本文的输出层采用 Softmax作为激活函数,如公式(8)所示。
z max
z max
z
e
f z
e
(8)
其中, 为神经元的带权输入, 为 的最大值。由公式可以看出,输出层所有神经元
的输出结果之和为 1,可以用离散分布很好的解释网络输出结果。Softmax 函数不仅适合于
多分类情况,而且能与交叉熵代价函数很好的配合,提升网络性能。 120
使用 early stop 防止过拟合
传统 BP 算法在网络误差值小于某个阈值或者两次迭代误差相差不大时停止训练,这样
不仅可能导致网络过度训练、对数据过度拟合,还可能延长训练时间,造成性能的下降。本
文使用 early stop 方法防止过拟合,首先将训练数据划分为训练集和验证集,然后在训练集
上训练网络,在验证集上测试准确率,发现网络误差不再下降后停止训练。每次迭代都进行125
一次验证,发现误差上升并不立刻停止,而是继续观察一定迭代次数,并记录此时最佳的网
络系数,若准确率一直未改善,则停止训练,并将网络权值赋为记录的最佳系数。使用此方
法分离独立的验证集,不仅可以使网络停在即将过度训练的状态,有效防止过拟合,还可以
减少冗余的训练时间,从而提升算法的性能。
3 改进算法在 Spark上的实现 130
Spark是一个新兴的并行计算框架,本文在 Spark 的架构及 API操作的基础上,结合上
节所述的改进措施,实现 BP 算法在 Spark 上的并行,算法步骤如下:
数据预处理
读取数据,并将离散特征的值转为其取值索引,扫描数据得到所有特征的最大值和最小
值,根据最值将所有特征进行归一化。 135
value value - min / max - min
然后将数据通过 randomSplit方法按照 的比例划分成训练集和验证集。
网络初始化
在 范围内随机初始化权值和偏置值,初始化网络结构为三层,隐含层使用 Sigmoid
激活函数,输出层使用 Softmax激活函数。输入层神经元个数对应于输入数据的特征个数,140
输出层神经元个数则与类别取值个数相同。
- 5 -
中国科技论文在线
小批量训练
使用 sample 方法对训练集进行抽样得到样本集,通过 treeAggregate 方法计算样本集的
梯度和、误差和以及样本数。各分区之间是并行执行的,分区内部则串行计算每一个样本,
最后将各分区的结果合并。分区内部计算步骤如下: 145
前向传播
通过前一层神经元的输出值 、权值 得到加权输入,然后应用激活函数 即得到输出值。
input x
output f input
反向传播 150
从输出层开始,逐层计算误差并向前传递,计算各层边的梯度 。 代表输出值, 代表
期望值, 代表权值, 代表激活函数,下标 、 、 分别代表输入层、隐含层、输出层。
输出层梯度计算:
δ y tO O O
O O Hy 155
隐含层梯度计算:
eH O O
' H H He f
H H Iy
计算网络误差 160
根据公式(6)计算交叉熵函数值,作为整个网络的误差。
计算梯度和及误差和
将 节和 节中的梯度和误差分别累加,得到整体样本的梯度和及误差和。
网络更新
根据 节中得到的梯度和及误差和,计算平均梯度及平均误差。根据公式(2)动态调整165
学习率,然后根据公式(3)更新网络权值,得到一个新的网络模型。
网络验证
将验证集的每个样本在网络上进行正向传播,输出层输出值最大的神经元代表的类别即
为预测类别,若预测类别与期望类别一致,则该条样本分类正确。统计分类正确个数,若其
小于当前记录的最大分类正确数,则将剩余迭代步数减一;否则更新最大分类正确数,继续170
迭代。
判断是否停止
若当前迭代次数已经达到最大迭代次数或者剩余迭代步数为零,则停止迭代,得到最终
的神经网络;否则返回 节继续迭代。
4 实验结果与分析 175
为了评价算法的性能指标,本文从准确率和训练时间两方面进行实验,并与Mllib中的
- 6 -
中国科技论文在线
多层感知分类器(MLPC)做了对比分析。实验集群由 1个Master和 4个 Slave 组成,每个
节点的 CPU为 12核 ,内存 64G,硬盘 800G。实验数据采用 UCI数据集中的 Iris、
glass、breast-cancer、connect-4、covtype等 5组数据,各组数据的类别数、特征数及样本数
如表 1所示。 180
表 1 UCI 上的 5 组数据
类别 特征 样本数
Iris 3 4 150
glass 6 9 214
breast-cancer 2 10 683
connect-4 3 126 67557
covtype 7 54 581012
将各组数据按照 的比例划分为训练集和测试集,在训练集上训练模型并在测试集上
测试准确率,五组数据对应的隐含层节点数分别为 5、6、6、14、10。实验结果如图 2所示。
图 2 两种算法的准确率对比 185
通过图 2可以看出,本文实现的 BP 算法在各组数据上的准确率与MLPC相差不大,都
接近于数据的真实准确率。
为了测试大规模数据,本文基于 covtype 通过数据复制的方式生成了样本数为 50 万、
100万、200万、500 万和 1000万等 5组数据,分别测试两种算法的时间性能,实验结果如
图 3所示。 190
图 3 两种算法的运行时间对比
通过图 3可以看出,本文实现的 BP 算法的运行时间比起 MLPC具有明显的优势,而且
数据量越大优势越显著,其原因在于改进 BP 算法采用了两种加速策略:小批量梯度下降法
- 7 -
中国科技论文在线
每次迭代并不需要学习整个数据集中的所有样本,而是只选取其中一部分进行训练,有效地195
减少了单次迭代的时间;early stop 方法使网络停留在模型已经充分训练而即将过度拟合的
临界点,有效地减少了迭代次数,从而减少总训练时间。
5 实验结果与分析
本文基于 Spark平台实现了 BP 算法,并针对传统 BP 算法的不足之处进行了一系列改
进,提高了算法的准确率,加快了训练时间,并有效防止了过拟合。通过与MLlib 的多层感200
知机进行实验对比发现,本文算法的训练时间具有明显的优势,很适合处理大规模数据。然
而,本文也有不足之处,由于算法在进行网络初始化时对权值随机赋值,隐含层节点数目根
据经验公式计算,对算法的准确性及训练时间都有不利影响。因此,今后将围绕改善网络结
构开展工作,进一步提高 BP 算法的性能。此外,也将继续研究其他数据挖掘算法在 Spark
平台上的并行化,充分利用 Spark 框架的性能优势挖掘重要信息。 205
[参考文献] (References)
[1] 刘翔. BP 算法的改进及其应用[D]. 太原:太原理工大学, 2012.
[2] Ghadimi S, Lan G, Zhang H. Mini-batch stochastic approximation methods for nonconvex stochastic
composite optimization[J]. Mathematical Programming, 2016, 155(1): 267-305. 210
[3] Graves A, Mohamed A, Hinton G. Speech recognition with deep recurrent neural networks[A]. 2013 IEEE
international conference on acoustics, speech and signal processing[C]. IEEE, 2013. 6645-6649.
[4] 温长吉, 王生生, 于合龙,等. 基于改进蜂群算法优化神经网络的玉米病害图像分割[J]. 农业工程学报,
2013, 29(13):150-157.
[5] Czauderna T, Seiffert U. Implementation of MLP networks running Backpropagation on various parallel 215
computer hardware using MPI[A]. Proc. 5th Int. Conf. Recent Advances in Soft Computing (RASC)[C]. 2004.
116-121.
[6] Thulasiram R K, Rahman R M, Thulasiraman P. Neural network training algorithms on parallel architectures
for finance applications[A]. International Conference on Parallel Processing Workshops, 2003. Proceedings[C].
IEEE, 2003. 236-243. 220
[7] Liu Z, Li H, Miao G. MapReduce-based backpropagation neural network over large scale mobile data[A]. 2010
Sixth International Conference on Natural Computation[C]. IEEE, 2010. 1726-1730.
[8] Zhou B, Wang W, Zhang X. Training Backpropagation Neural Network in MapReduce[J]. ccit-14, 2014.
[9] Liu Y, Xu L, Li M. The Parallelization of Back Propagation Neural Network in MapReduce and Spark[J].
International Journal of Parallel Programming, 2016:1-20. 225
[10] Saeidirad M H, Rohani A, Zarifneshat S. Predictions of viscoelastic behavior of pomegranate using artificial
neural network and Maxwell model[J]. Computers & Electronics in Agriculture, 2013, 98(98):1-7.