一种基于spark的遗传算法优化的BP神经网络并行化方法
技术领域
本发明涉及机器学习算法并行化领域,特别涉及一种基于spark分布式计算框架的遗传算法优化的BP神经网络并行化方法。
背景技术
BP(Back Propagation)神经网络是1986年由Rinehart和McClelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络。BP神经网络的主要思想,包括正向传播信号和反向传播误差。在正向传播过程中,输入信号通过隐层处理后传递给输出层。若输出值与预期的值不等且大于误差可接受范围,则进入误差反向传播过程。误差通过隐层向输入层传递,进行误差调整。通过不断调整各层之间的权值,使得输出误差达到可接受范围或达到最大学习次数为止。
遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。它是由美国的J.Holland教授1975年首先提出,其主要特点是直接对结构对象进行交叉和变异操作;具有内在的隐并行性和更好的全局寻优能力;采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。
BP神经网络算法存在收敛速度慢和容易陷入局部极小点的缺点,基于遗传算法优化的BP神经网络,首先用遗传算法优化BP网络的权值和阈值,以提高网络的收敛速率,克服易陷入局部极小的不足。
传统的BP神经网络训练方法,是在单机上串行处理数据集,但是随着信息化社会的飞速发展,需要进行数据挖掘的数据量急剧增大,达到了海量数据的级别,因此传统的BP神经网络训练方法在处理海量数据集时会有很大的问题,比如耗时非常长,甚至是内存不足无法训练等问题。
Spark是Apache推出的分布式计算框架,提供了并行编程模型,用户只需调用相关的API即可完成分布式处理程序,为大数据的处理提供了有利的条件。因此,基于spark框架实现遗传算法优化的BP神经网络算法并行化,可以弥补上述问题。
发明内容
为了能更好的解决海量数据条件下的训练效率问题,本发明提出了一种基于spark的遗传算法优化的BP神经网络并行化方法,采用新一代并行计算技术,在不影响训练精度的条件下,提高BP神经网络的收敛速度,提高训练效率,实现BP神经网络在多个节点上并行计算。
本发明采用基于新一代分布式计算框架spark,实现遗传算法优化的BP神经网络并行化方法,包括如下步骤:
步骤1:数据预处理,将全局训练集切分成多个子集和,并且存储到HDFS或者其他的分布式文件系统中;
步骤2:采用spark并行编程模型改进遗传算法对BP神经网络的权值进行全局进化寻优,经过一定次数的进化迭代后,得到优化的网络初始权值。具体流程如下:
(1)在spark集群中启动实现map接口的作业,各个节点将部分训练数据作为RDD输入,将每个个体编码成染色体,生成新的种群RDD数据集;
(2)将新生成的种群RDD作map转换处理,根据适应度函数计算每个个体的适应度值;
(3)由个体适应度值所决定的某个规则,如轮盘赌方法,选择将进入下一代的个体,生成优胜劣汰后的种群RDD;
(4)将(3)中生成的种群RDD作交叉操作;
(5)将(4)中生成新的种群RDD做变异操作;
(6)若迭代次数满足条件或结果达到收敛条件,得到初始网络权值,结束;否则,进入(2)进行下一轮的迭代。
步骤3:在各计算节点上,都采用优化后的网络初始权值建立自身的神经网络结构;
步骤4:采用spark并行编程模型改进并行的BP神经网络算法,对原始训练数据集进行迭代训练。具体流程如下:
(1)在Driver进程中读取网络初始权值,并广播到每个计算节点;
(2)在每个计算节点上用初始权值都实例化一个网络结构;
(3)在每个计算节点上,使用批量训练的模式将部分样本作用于网络上,进行一定次数的迭代后输出网络权值;
(4)综合各个节点的输出获得新的网络权值,并根据网络权值的调整量决定是否进行再次迭代。
步骤5:输出训练后的神经网络结构。
与现有技术相比,本发明所提供的一种基于spark的遗传算法优化的BP神经网络并行化方法,能更好的解决海量数据条件下的训练效率问题。通过采用新一代并行计算技术,改进遗传算法对BP神经网络的权值进行全局进化寻优,经过一定次数的进化迭代后,得到优化的神经网络初始权值,再使用并行的BP神经网络算法进行迭代,最终输出网络结构。在训练过程中,各个阶段都是可以多节点并行处理的,这样能大大提升BP神经网络的收敛速度,在不影响训练精度的条件下,提高训练的效率。
附图说明
图1为本发明方法的流程图。
图2为改进的并行遗传算法流程图。
图3为改进的遗传算法并行化示意图
图4为改进的并行BP神经网络算法流程图。
图5为BP神经网络并行化示意图。
具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
如上所述,本发明所提供的一种基于spark的遗传算法优化的BP神经网络并行化方法,更好的克服海量训练数据条件下的问题,通过遗传算法对BP神经网络的权值进行全局进化寻优,经过一定次数的进化迭代后,再使用BP神经网络算法进行迭代,并且各个阶段都是可以并行处理的,这样能大大提升BP神经网络的收敛速度,提高训练的效率。以下结合说明书附图和具体实施方式对本发明的方法做进一步详细说明。
在执行算法之前,需要根据具体的应用场景对一些参数进行初始化,如遗传算法的最大迭代次数、染色体编码规则、个体适应度函数、进行选择操作的具体函数、进行交叉操作的概率Pc、具体的基因交换规则,进行变异操作的概率Pm等。
参考图1,本发明的具体步骤包括:步骤1:数据预处理,将数据处理为文本向量,将全局训练集切分成多个子集和,并且存储到HDFS或者其他的分布式文件系统中;步骤2:采用spark并行编程模型改进遗传算法对BP神经网络的权值进行全局进化寻优,经过一定次数的进化迭代后,得到优化的网络初始权值;步骤3:在各计算节点上,都采用优化后的网络初始权值建立自身的神经网络结构;步骤4:采用spark并行编程模型改进并行的BP神经网络算法,对原始训练数据集进行迭代训练,直到结果收敛或满足最大迭代次数;步骤5:输出训练后的神经网络结构。
具体的,参考图2和图3,本发明的步骤2中使用改进的并行遗传算法优化神经网络初始权值,具体包括如下步骤:
(1)个体编码
将遗传算法的初始输入数据存储在HDFS上,建立初始种群数据集RDD。在spark集群中启动实现map接口的作业,各个节点将部分训练数据作为RDD输入,在具体处理函数中,每次读取一个个体对象,根据具体的染色体编码规则,将个体编码成染色体,并输出该染色体对象,生成新的种群RDD数据集。
(2)计算适应度
将编码后的个体计算其适应度。具体地,将新生成的种群RDD作map转换处理,在具体处理函数中,每次处理一个染色体对象,根据具体的适应度函数,计算每个个体的适应度值,将每个个体和其适应度值组成新的对象,即<个体,适应度值>,并输出该对象,生成新的RDD。
(3)选择操作
综合(2)中所有节点的输出,在具体处理函数中,将由适应度值所决定的某个规则(如轮盘赌方法),复制选择进入下一代的个体,输出需要进入下一代的个体,生成优胜劣汰后的种群数据集RDD。
(4)交叉操作
得到选择操作的种群RDD后,需要进行交叉操作,按照交叉操作的概率Pc选出种群中需要进行交叉操作的染色体,随机作两两配对处理,每两个染色体中的部分基因进行交换。具体地,可以将选择操作后的种群RDD作flatMap转换处理,在具体处理函数中,每次读取一个个体,按照概率Pc决定是否输出该个体。然后将筛选后的所有个体作map转换处理,在具体处理函数中,每次读取两个染色体对象,根据具体的基因交换规则,将两个染色体的部分基因进行交换,并输出这两个新的染色体对象,生成交叉操作后的种群RDD。
(5)变异操作
得到交叉操作的种群RDD后,需要进行变异操作,按照变异操作的概率Pm选择出需要进行变异操作的个体,然后对这些个体上的某位基因进行突变。具体地,可以将交叉操作的种群RDD作map转换处理,在具体处理函数中,每次处理一个染色体对象,根据变异操作的概率Pm决定该染色体是否需要进行基因突变。若需要进行突变,按照相应的基因突变规则将该染色体上的某位基因进行变异,然后输出变异后的染色体对象;否则直接输出该染色体对象。最后,生成变异操作后的种群RDD;
(6)输出优化后的初始网络权值
若迭代次数达到设定的最大迭代次数或计算结果达到收敛条件,结束遗传算法的迭代训练,同时将变异操作后的种群RDD作map转换处理,在具体处理函数中,每次处理一个染色体对象,根据具体的染色体解码规则,将染色体转换成具体的对象,并输出该对象,得到初始网络权值,并且将网络权值存储到HDFS中;否则,进入(2)中进行下一轮的迭代。
参考图4和图5,本发明的步骤3、步骤4中使用改进的并行BP神经网络算法进行迭代训练。基于数据的并行化思路,将全局训练集切分成多个子集和,在每个计算节点中都建立一个完整的神经网络结构,且网络结构的初始状态是一致的。算法并行化思想体现在,进行训练时每个计算节点均是用部分样本数据进行训练,当每个计算节点内到达最大迭代次数或者达到了某个收敛条件后,再输出权值,最后进行汇总,由汇总结果决定是否进行下一次的迭代。具体的包括如下几个步骤:
(a)广播训练参数
在算法开始前,在Driver中读取经过遗传算法优化后得到的初始网络权值,通过spark提供的broadcast方式将网络权值、训练参数发送到每个计算节点(或者通过共享的方式)。
(b)建立一致的网络结构
每个计算节点在算法执行前,根据Driver广播的参数,建立自身的一个完整的神经网络结构,并且每个节点的网络结构的初始状态是一致的。
(c)各节点独立迭代训练
读入训练样本,建立训练样本数据集RDD,并作flatMap转换处理。在每个计算节点上,在具体处理函数中,每次读取部分样本,使用批量训练的模式将部分样本作用于网络上,不同的节点使用不同的训练样本数据进行训练。进行一定次数的迭代后,或者训练达到一定条件后(该条件可以是输出误差达到一定水平,权值改变量达到一定水平,即该部分样本已在本节点达到收敛状态),输出网络权值向量。
(d)综合汇总
综合各个节点的输出,得到的网络权值向量数据集RDD,并将该RDD作reduce动作处理。在具体的处理函数中,作归并处理,每次将每两个网络权值向量作累加计算,并且对向量的个数进行计数。归并结束后,最终得到总的网络权值向量和,以及向量个数总和。最后在Driver中将网络权值向量和作算术平均计算,获得均值网络权值向量。将均值网络权值向量中的各个分量作为新的网络权值。
(e)输出网络结构
将新的网络权值输出到HDFS中。若新的网络权值达到收敛条件,训练结束,同时输出经过迭代训练后得到的网络结构;否则进入到步骤(a)中进行下一轮的迭代。
综上所述,本发明提出了一种基于spark的遗传算法优化的BP神经网络并行化方法,以上说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。