计算机系统应用  2019, Vol. 28 Issue (3): 250-254   PDF    
基于自适应学习率BP神经网络的火点定位模型
王古森1, 高波2     
1. 陕西国防工业职业技术学院, 西安 710300;
2. 西安全阶智能科技有限公司, 西安 710016
摘要:为了解决传统BP (Back Propagation)神经网络收敛较慢的问题, 通过BP神经网络搭建火点预测模型, 采用一种自适应学习率的方法改进BP神经网络, 经比较该算法收敛较快, 模型输出可达到预期效果. 同时利用现场可编程逻辑门阵列(FPGA)的动态可重构技术实现了改进后的神经网络, 通过仿真和结果测试, 该设计在预测结果的基础上又大大减少了预测时间, 为环保预测、检测轨迹规划提供了一定的理论基础.
关键词: BP神经网络    FPGA    火点预测    自适应学习率    
Fire Location Model Based on Adaptive Learning Rate BP Neural Network
WANG Gu-Sen1, GAO Bo2     
1. Shaanxi Institute of Technology, Xi’an 710300, China;
2. Xi’an full scale Intelligent Technology Co. Ltd., Xi’an 710016, China
Abstract: In order to solve the problem of slow convergence of traditional BP (Back Propagation) neural network, through the BP neural network build the fire point prediction model, we use an adaptive learning rate method to improve the BP neural network, by comparison, the algorithm converges faster, and the output of the model achieves the desired effect. At the same time, an improved algorithm is realized by using the dynamic reconfigurable technology of FPGA. Through the simulation and results test, the design greatly reduces the prediction time on the basis of the prediction results and provides a theoretical basis for environmental prediction and detection trajectory planning.
Key words: BP Neural Network (BPNN)     FPGA     fire point prediction     adaptive learning rate    

1 引言

由于我国北方部分城市冬季大量燃烧秸秆, 不仅造成了空气污染, 也造成了大量的安全隐患, 给市民生活和城市建设带来很多的不便. 近年来, 国家加大力度治理此项问题, 但仍然无法完全杜绝. 现阶段在发现火点时及时报告、及时记录, 再由执法人员采取相应制止措施, 以加强火点位置及燃烧时间的监测, 同时定期监测, 加强重点区域的管理, 提前采取相关措施, 提高城市空气质量水平和城市安全水平. 在通过对过往年度冬季秸秆焚烧的监测记录入手, 预测出火点大致出现的位置及时间, 加强对此处的监管, 并利用无人机、无人车完成多点预测位置的数据采集, 能够有效的预防和减少冬季秸秆燃烧的数量.

目前预测学习领域常用CNN (卷积神经网络), BP神经网络等. CNN常用于较为复杂的图像处理上, BP神经网络用于函数逼近、模式识别等[1]. 而火点预测是根据已有的火点数据进行预测, 属于一种函数逼近, 且在预测的实时性上有一定要求, 故BP神经网络是一个很好的选择.

采用BP神经网络模型对火点进行预测, 大大提高了环保工作的效率及人力、物力成本. 在预测完成后还可以通过预测的位置对无人机或无人车规划行动路线, 设置自动巡视功能. 发现火点后一方面将火点信息采集发送回人工控制台, 另一方面自动训练数据, 修正行动路线. 因此使用BP神经网络预测火点有很广泛的应用前景.

传统BP神经网络中极小值比较多, 所以很容易陷入局部极小值, 这就要求对初始权值和阀值有要求, 要使得初始权值和阀值随机性足够好, 可以多次随机来实现. 而训练次数多使得学习效率低, 收敛速度慢. 为了加速算法收敛. 常用的改进算法如: 引入动量项、自适应步长等, 学习率随着迭代次数增加而线性减小, 此类方法可以减少训练次数, 但依然无法达到高速的训练效果, 训练速度提高有限.

2 火点预测模型构建

由于冬季温度较低, 焚烧秸秆不仅与所处位置有关, 而且与附近几天的天气情况也有很大的关系.

2.1 数据来源

由于每年的10月到12月是秸秆焚烧较为严重的几个月, 因此对某市自2011年至2015年每年10月至12月3个月每天的秸秆焚烧数量及天气情况为数据输入. 并以2016年及2017年作为模型验证数据.

数据来源参考中华人民共和国生态环境部发布的数据[2], 结合某市环保局提供的相关数据.

2.2 神经网络模型构建

在BP神经网络中, 单个样本有m个输入, 有n个输出, 在输入层和输出层之间通常还有若干个隐含层. 一个三层的BP网络就可以完成任意的m维到n维的映射. 即这三层分别是输入层(I), 隐含层(H), 输出层(O)[3]. 如图1所示.

BP神经网络分为正向传递和误差信号反向传递两个过程.

正向传播过程如下: 设节点i和节点j之间的权值为wij, 节点j的阀值为bj, 每个节点的输出值为xj, 而每个节点的输出值是根据上层所有节点的输出值、当前节点与上一层所有节点的权值和当前节点的阀值还有激活函数来实现的. 具体计算方法如下[4]:

${S_{{j}}} = \sum\limits_{i = 0}^{m - 1} {{w_{ij}}} {x_i} + {b_j}$ (1)
${x_{{j}}} = f({S_j}) = \frac{{1 - {e^{ - {S_j}}}}}{{1 + {e^{ - {S_j}}}}}$ (2)

其中, f(Sj)为激活函数, 一般选取s型函数或者线性函数. 这里我们选取双极性的Sigmoid函数在非线性处理后输出.

图 1 BP神经网络结构

反向传播过程: 由于BP神经网络的主要目的是反复修正权值和阀值, 使得误差函数值达到最小, 设输出层的所有结果为dj, 则误差函数为

$E(w,b) = \frac{1}{2}\sum\limits_{j = 0}^{n - 1} {{{({d_j} - {y_j})}^2}} $ (3)

通过沿着相对误差平方和的最速下降方向, 连续调整网络的权值和阀值, 根据梯度下降法, 权值矢量的修正正比于当前位置上E(w, b)的梯度, 对于第j个输出节点有梯度值:

$\frac{{\partial E(w,b)}}{{\partial {w_{ij}}}} = {\delta _{ij}}\cdot {x_i}$ (4)

其中,

${\delta _{ij}} = ({d_j} - {y_j}) \cdot f({S_j}) \cdot (1 - f({S_j}))$

那么对于隐含层和输出层之间的权值为:

$\begin{gathered} {w_{ij}} = {w_{ij}} - \eta \cdot \frac{{\partial E(w,b)}}{{\partial {w_{ij}}}} \\ = {w_{ij}} - \eta \cdot {\delta _{ij}}\cdot {x_i} \\ \end{gathered} $ (5)

由于传统的BP神经网络学习速率是固定的, 因此网络的收敛速度慢, 需要较长的训练时间[5]. 对于一些复杂问题, BP神经网络需要的训练时间可能非常长, 这主要是由于学习速率太小造成的. 在传播过程中, 其误差的梯度变化是非线性的, 当学习率固定时, 当学习率较小时, 学习速率较慢, 则结果收敛较慢; 若学习率较大时, 则容易引起振荡. 对此我们使用一种自适应学习率对BP神经网络进行改进. 可以将式(5)调整为:

$\begin{gathered} {w_{ij}}(k + 1) = {w_{ij}}(k) - \eta (k) \cdot \{ {\delta _{ij}}(k) \cdot {x_i}(k) \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;- {\delta _{ij}}(k - 1) \cdot {x_i}(k - 1) \cdot \mu - 1\} \end{gathered} $ (6)
$\eta (k) = {2^\lambda }\eta (k{\rm{ - }}1)$ (7)
$\lambda = {\rm{sign[}}{\delta _{ij}}(k) \cdot {x_i}(k) \cdot {\delta _{ij}}(k - 1) \cdot {x_i}(k - 1)]$ (8)

式(6)(7)(8)以进化论中的进退法为理论基础, 即连续两次观测训练的误差值, 如果误差下降则增大学习率, 误差的反弹在一定的范围内, 则保持步长, 误差的反弹超过一定限度则减小学习率[6], 而学习率的变化根据误差大小呈指数性增长或减小, 同时对误差引起的振荡有一定的抑制作用. 这样就能快速完成算法收敛, 达成及时预测的效果.

3 模型训练及验证

由于输入及输出数据的位置信息是二维向量, 为了验证模型的实用性, 对输出数据与实际数据作差取平方的形式体现两者之间的误差. 即训练所得数据与实际位置的矢量差.

地球并不是一个标准的球体, 不同位置的经度和纬度所对应的地球切面圆的周长也不同, 故要算出误差的矢量值, 不能使用经纬度直接计算, 需要将经纬度转换为距离单位进行计算.

因测量所处的维度大致在北纬40°左右, 计算误差时以米(m)为单位, 计算如下:

${m_{{j}}} = 360^\circ /(2\pi R \cdot \cos 40)$ (9)
${m_{{w}}} = 360^\circ /2\pi R$ (10)
${\rm{e}}(t) = \sqrt {{{(\frac{{{x_{ot}} - {x_{it}}}}{{{m_j}}})}^2} + {{(\frac{{{y_{ot}} - {y_{it}}}}{{{m_w}}})}^2}} $ (11)

其中, R为地球半径, 约6371 000 m, mj为东西方向即(经度)上1 m对应的实际度数; mw为南北方向即(纬度)上1 m对应的实际度数; e(t)位置的矢量差, 单位为米(m).

根据训练所得结果, 利用式(11), 仿真误差图如图2所示.

图 2 输出矢量误差图

图2可以看出, 模型输出的矢量误差基本在50米以内, 当使用无人机或无人车的摄像头观察火点时, 可以在有效范围内获得火点的相关信息.

在此基础上, 对比使用自适应学习率前后的BP神经网络的迭代次数. 因学习率模型设置的初始值为0.1, 故使用传统BP神经网络时学习率即为0.1.

图3图4可见, 使用固定学习率需要在400次左右才能完成收敛, 而使用自适应学习率的BP神经网络只需要30次左右, 即改进后的神经网络大大减少了迭代次数, 加快了收敛过程, 且不会发生较大的振荡.

图 3 固定学习率收敛曲线

图 4 自适应学习率收敛曲线

解决了模型的可行性问题, 下面就可以开展算法的实现工作了.

4 BP神经网络的FPGA实现

FPGA的动态可重构技术, 指的是按照时序把整个设计划分成各个不同的功能模块, 并且可以根据实际需要通过对功能模块的增加或减少来动态调整整个电路系统. 在设计中使用该技术可以使 FPGA 硬件资源利用率得到有效提高.

神经网络的实质是采用梯度下降法来不断修改神经元之间的联接权值,以此达到求解最优解的目的. 文中使用Xilinx公司的Zynq-7000系列FPGA芯片, 使用400 MB作为主时钟, Verilog为开发语言.

根据算法主要将神经网络分为激活函数模块、运算模块、数据更新和外围接口模块四个模块.

4.1 激活函数

由于输入层的激活函数为非线性函数, 由于激活函数选取的为双线性S函数, 将数据分割为[0, 1]、[1, 2]、[2, 3]、[3, 4]等[7], 在这些区间内通过文献[7]的逼近函数实现激活函数.

4.2 运算模块

运算模块主要实现数据的乘、累加, 使用FPGA内置的DSP48E辅助完成功能. DSP48E是Xilinx 7系列FPGA的专用DSP模块, 运算速度可以达到600 M/s以上, 适合运用于乘累加运算.

由于运算过程是大量的定点数运算, 直接运算会存在截尾操作, 这样就会影响运算的精度, 所以运用Xilinx自带的IP核将定点数转换为浮点数, 然后进行乘加运算, 运算后再利用IP核将浮点数转换为定点数输出. 同时运算模块需要在正向传播和反向传播中交替使用, 这就需要将不同时刻的运算值交替更新到不同的寄存器中.

4.3 权值更新

权值更新包括权值修正量的计算和权值更新两部分. 根据式(6)到式(8), 权值修正计算设计如图5所示.

图 5 权值更新模块示意图

图5W(k)为k时刻的权值, eta_η为学习率, D(k)为k时的梯度值.

学习率的计算部分为将上一次计算的梯度值与本次计算的梯度值取最高位, 即符号位进行异或, 得到符号函数的结果, 再通过移位完成学习率的更新. 使用新一轮的学习率与本次的权值, 再根据梯度值, 得出下次计算的权值.

由于权值在学习训练后需要一直保存, 在计算完本次收敛的权值后, 数据需要掉电保存, 所以这里使用外挂Flash, 型号为AT24C16A. 它是一个标准的I2C接口总线的Flash. FPGA在完成权值修正计算后将更新的权值存储在外部Flash中. 而其他中间数据则存在内部寄存器中.

4.4 外围接口

外围接口主要实现数据的输入、Flash控制(I2C接口)等.

4.5 总控制状态机

图6所示, 算法的状态跳转首先读取Flash中的权值信息, 然后从正向传播到反向误差的训练, 利用上文提到的各个模块将训练所得权值重新存储到Flash中, 直到所得输出基本到达期望值时停止训练.

图 6 神经网络控制状态机

5 仿真及验证

根据图5设计学习率更新模块, 其仿真如图7所示.

图7中eta_n为学习率, vid_data为梯度值, 在误差训练阶段, eta_n根据vid_data的改变进行移位, 改变学习率.

完成FPGA设计后, 将FPGA输出结果保存为txt格式, 然后导入Matlab进行数据比较, 以2017年10月到12月的数据为参考, 其结果误差如图8所示.

图8发现, FPGA输出的矢量误差最大约50 m, 与模型误差基本一致.

图 7 学习率自适应仿真图

图 8 FPGA实际输出矢量误差

设计传统BP神经网络学习率为0.1, 改进BP算法初始学习率为0.1, 均为三层神经网络, 激活函数为式(2).

对比使用PC端传统的BP神经网络、改进的BP神经网络、及FPGA端使用传统的BP神经网络、改进的BP神经网络训练速率. PC端使用C语音完成设计, 使用VS2013作为开发工具, 使用CPU的主频为3.6 GHz. FPGA使用文中的设计模块. 而由于FPGA不能直接计算算法消耗的时间, 故从读完Flash中的权值开始计数, 直到训练完成输出期望的数据, 计算消耗的周期, 从而算出时间.

表 1 不同平台上算法的消耗时间(单位: s)

表1可以看出在经过自适应学习率改进和使用硬件实现的BP神经网络, 在完成预测的基础上学习和训练效率上提高了约200倍.

6 结束语

本文从冬季秸秆焚烧的火点入手, 根据往年留下的大量数据, 设计了一种基于BP神经网络的改进模型, 比之传统的BP神经网络, 其收敛速度提高了近10倍, 从而大大加快了训练的速度. 与此同时利用FPGA可重构技术, 将设计的模型在硬件上完成设计及实现, 对比输出数据, 验证了模型与FPGA设计的准确性. 利用改进后的算法和FPGA硬件实现的神经网络, 比之PC端的BP神经网络, 运算速度获得大大提高. 这不仅在环境保护火点预防监测有很大的应用前景, 同时也为后期无人机及无人车的路线自动规划提供了一定的理论基础.

参考文献
[1]
黎育权. 基于BP神经网络的多因素人口增长预测. 电子技术与软件工程, 2018(10): 169.
[2]
中华人民共和国生态环境部. 秸秆焚烧监测报告. http://www.mee.gov.cn/hjzl/dqhj/jgjsjcbg/. (2011-06-26) [2018-01-09]
[3]
高宇航. 一种改善BP神经网络性能的方法研究. 微型机与应用, 2017, 36(6): 53-57, 61. DOI:10.19358/j.issn.1674-7720.2017.06.017
[4]
位俊雷, 张利军, 李泽元. 基于FPGA的神经网络PID控制器设计与实现. 自动化与仪器仪表, 2017(10): 106-108. DOI:10.14016/j.cnki.1001-9227.2017.10.106
[5]
曾武序, 钱文彬, 王映龙, 等. 一种基于Python和BP神经网络的股票预测方法. 计算机时代, 2018(6): 72-75, 80. DOI:10.16644/j.cnki.cn33-1094/tp.2018.06.021
[6]
于群, 张铮, 屈玉清, 等. 基于ARMA-BP神经网络组合模型的电网大停电事故损失负荷预测. 数学的实践与认识, 2018, 48(9): 144-153.
[7]
杨景明, 杜韦江, 吴绍坤, 等. 基于FPGA的BP神经网络硬件实现及改进. 计算机工程与设计, 2018, 39(6): 1733-1737, 1773. DOI:10.16208/j.issn1000-7024.2018.06.041