王古森,高 波
1(陜西國防工業(yè)職業(yè)技術學院,西安 710300)
2(西安全階智能科技有限公司,西安 710016)
由于我國北方部分城市冬季大量燃燒秸稈,不僅造成了空氣污染,也造成了大量的安全隱患,給市民生活和城市建設帶來很多的不便.近年來,國家加大力度治理此項問題,但仍然無法完全杜絕.現(xiàn)階段在發(fā)現(xiàn)火點時及時報告、及時記錄,再由執(zhí)法人員采取相應制止措施,以加強火點位置及燃燒時間的監(jiān)測,同時定期監(jiān)測,加強重點區(qū)域的管理,提前采取相關措施,提高城市空氣質量水平和城市安全水平.在通過對過往年度冬季秸稈焚燒的監(jiān)測記錄入手,預測出火點大致出現(xiàn)的位置及時間,加強對此處的監(jiān)管,并利用無人機、無人車完成多點預測位置的數(shù)據(jù)采集,能夠有效的預防和減少冬季秸稈燃燒的數(shù)量.
目前預測學習領域常用CNN (卷積神經網絡),BP神經網絡等.CNN常用于較為復雜的圖像處理上,BP神經網絡用于函數(shù)逼近、模式識別等[1].而火點預測是根據(jù)已有的火點數(shù)據(jù)進行預測,屬于一種函數(shù)逼近,且在預測的實時性上有一定要求,故BP神經網絡是一個很好的選擇.
采用BP神經網絡模型對火點進行預測,大大提高了環(huán)保工作的效率及人力、物力成本.在預測完成后還可以通過預測的位置對無人機或無人車規(guī)劃行動路線,設置自動巡視功能.發(fā)現(xiàn)火點后一方面將火點信息采集發(fā)送回人工控制臺,另一方面自動訓練數(shù)據(jù),修正行動路線.因此使用BP神經網絡預測火點有很廣泛的應用前景.
傳統(tǒng)BP神經網絡中極小值比較多,所以很容易陷入局部極小值,這就要求對初始權值和閥值有要求,要使得初始權值和閥值隨機性足夠好,可以多次隨機來實現(xiàn).而訓練次數(shù)多使得學習效率低,收斂速度慢.為了加速算法收斂.常用的改進算法如:引入動量項、自適應步長等,學習率隨著迭代次數(shù)增加而線性減小,此類方法可以減少訓練次數(shù),但依然無法達到高速的訓練效果,訓練速度提高有限.
由于冬季溫度較低,焚燒秸稈不僅與所處位置有關,而且與附近幾天的天氣情況也有很大的關系.
由于每年的10月到12月是秸稈焚燒較為嚴重的幾個月,因此對某市自2011年至2015年每年10月至12月3個月每天的秸稈焚燒數(shù)量及天氣情況為數(shù)據(jù)輸入.并以2016年及2017年作為模型驗證數(shù)據(jù).
數(shù)據(jù)來源參考中華人民共和國生態(tài)環(huán)境部發(fā)布的數(shù)據(jù)[2],結合某市環(huán)保局提供的相關數(shù)據(jù).
在BP神經網絡中,單個樣本有m個輸入,有n個輸出,在輸入層和輸出層之間通常還有若干個隱含層.一個三層的BP網絡就可以完成任意的m維到n維的映射.即這三層分別是輸入層 (I),隱含層 (H),輸出層(O)[3].如圖1所示.
BP神經網絡分為正向傳遞和誤差信號反向傳遞兩個過程.
正向傳播過程如下:設節(jié)點i和節(jié)點j之間的權值為wij,節(jié)點j的閥值為bj,每個節(jié)點的輸出值為xj,而每個節(jié)點的輸出值是根據(jù)上層所有節(jié)點的輸出值、當前節(jié)點與上一層所有節(jié)點的權值和當前節(jié)點的閥值還有激活函數(shù)來實現(xiàn)的.具體計算方法如下[4]:
其中,f(Sj)為激活函數(shù),一般選取s型函數(shù)或者線性函數(shù).這里我們選取雙極性的Sigmoid函數(shù)在非線性處理后輸出.
圖1 BP 神經網絡結構
反向傳播過程:由于BP神經網絡的主要目的是反復修正權值和閥值,使得誤差函數(shù)值達到最小,設輸出層的所有結果為dj,則誤差函數(shù)為
通過沿著相對誤差平方和的最速下降方向,連續(xù)調整網絡的權值和閥值,根據(jù)梯度下降法,權值矢量的修正正比于當前位置上E(w,b)的梯度,對于第j個輸出節(jié)點有梯度值:
其中,
那么對于隱含層和輸出層之間的權值為:
由于傳統(tǒng)的BP神經網絡學習速率是固定的,因此網絡的收斂速度慢,需要較長的訓練時間[5].對于一些復雜問題,BP神經網絡需要的訓練時間可能非常長,這主要是由于學習速率太小造成的.在傳播過程中,其誤差的梯度變化是非線性的,當學習率固定時,當學習率較小時,學習速率較慢,則結果收斂較慢;若學習率較大時,則容易引起振蕩.對此我們使用一種自適應學習率對BP神經網絡進行改進.可以將式(5)調整為:
式(6)(7)(8)以進化論中的進退法為理論基礎,即連續(xù)兩次觀測訓練的誤差值,如果誤差下降則增大學習率,誤差的反彈在一定的范圍內,則保持步長,誤差的反彈超過一定限度則減小學習率[6],而學習率的變化根據(jù)誤差大小呈指數(shù)性增長或減小,同時對誤差引起的振蕩有一定的抑制作用.這樣就能快速完成算法收斂,達成及時預測的效果.
由于輸入及輸出數(shù)據(jù)的位置信息是二維向量,為了驗證模型的實用性,對輸出數(shù)據(jù)與實際數(shù)據(jù)作差取平方的形式體現(xiàn)兩者之間的誤差.即訓練所得數(shù)據(jù)與實際位置的矢量差.
地球并不是一個標準的球體,不同位置的經度和緯度所對應的地球切面圓的周長也不同,故要算出誤差的矢量值,不能使用經緯度直接計算,需要將經緯度轉換為距離單位進行計算.
因測量所處的維度大致在北緯40°左右,計算誤差時以米(m)為單位,計算如下:
其中,R為地球半徑,約 6371000 m,mj為東西方向即(經度)上1 m對應的實際度數(shù);mw為南北方向即(緯度)上1 m對應的實際度數(shù);e(t)位置的矢量差,單位為米(m).
根據(jù)訓練所得結果,利用式(11),仿真誤差圖如圖2所示.
圖2 輸出矢量誤差圖
由圖2可以看出,模型輸出的矢量誤差基本在50米以內,當使用無人機或無人車的攝像頭觀察火點時,可以在有效范圍內獲得火點的相關信息.
在此基礎上,對比使用自適應學習率前后的BP神經網絡的迭代次數(shù).因學習率模型設置的初始值為0.1,故使用傳統(tǒng)BP神經網絡時學習率即為0.1.
由圖3、圖4可見,使用固定學習率需要在400次左右才能完成收斂,而使用自適應學習率的BP神經網絡只需要30次左右,即改進后的神經網絡大大減少了迭代次數(shù),加快了收斂過程,且不會發(fā)生較大的振蕩.
圖3 固定學習率收斂曲線
圖4 自適應學習率收斂曲線
解決了模型的可行性問題,下面就可以開展算法的實現(xiàn)工作了.
FPGA的動態(tài)可重構技術,指的是按照時序把整個設計劃分成各個不同的功能模塊,并且可以根據(jù)實際需要通過對功能模塊的增加或減少來動態(tài)調整整個電路系統(tǒng).在設計中使用該技術可以使 FPGA 硬件資源利用率得到有效提高.
神經網絡的實質是采用梯度下降法來不斷修改神經元之間的聯(lián)接權值,以此達到求解最優(yōu)解的目的.文中使用Xilinx公司的Zynq-7000系列FPGA芯片,使用400 MB作為主時鐘,Verilog為開發(fā)語言.
根據(jù)算法主要將神經網絡分為激活函數(shù)模塊、運算模塊、數(shù)據(jù)更新和外圍接口模塊四個模塊.
由于輸入層的激活函數(shù)為非線性函數(shù),由于激活函數(shù)選取的為雙線性S函數(shù),將數(shù)據(jù)分割為[0,1]、[1,2]、[2,3]、[3,4]等[7],在這些區(qū)間內通過文獻[7]的逼近函數(shù)實現(xiàn)激活函數(shù).
運算模塊主要實現(xiàn)數(shù)據(jù)的乘、累加,使用FPGA內置的DSP48E輔助完成功能.DSP48E是Xilinx 7系列FPGA的專用DSP模塊,運算速度可以達到600 M/s以上,適合運用于乘累加運算.
由于運算過程是大量的定點數(shù)運算,直接運算會存在截尾操作,這樣就會影響運算的精度,所以運用Xilinx自帶的IP核將定點數(shù)轉換為浮點數(shù),然后進行乘加運算,運算后再利用IP核將浮點數(shù)轉換為定點數(shù)輸出.同時運算模塊需要在正向傳播和反向傳播中交替使用,這就需要將不同時刻的運算值交替更新到不同的寄存器中.
權值更新包括權值修正量的計算和權值更新兩部分.根據(jù)式(6)到式(8),權值修正計算設計如圖5所示.
圖5 權值更新模塊示意圖
圖5 中W(k)為k時刻的權值,eta_η為學習率,D(k)為k時的梯度值.
學習率的計算部分為將上一次計算的梯度值與本次計算的梯度值取最高位,即符號位進行異或,得到符號函數(shù)的結果,再通過移位完成學習率的更新.使用新一輪的學習率與本次的權值,再根據(jù)梯度值,得出下次計算的權值.
由于權值在學習訓練后需要一直保存,在計算完本次收斂的權值后,數(shù)據(jù)需要掉電保存,所以這里使用外掛 Flash,型號為AT24C16A.它是一個標準的I2C接口總線的Flash.FPGA在完成權值修正計算后將更新的權值存儲在外部Flash中.而其他中間數(shù)據(jù)則存在內部寄存器中.
外圍接口主要實現(xiàn)數(shù)據(jù)的輸入、Flash控制(I2C接口)等.
如圖6所示,算法的狀態(tài)跳轉首先讀取Flash中的權值信息,然后從正向傳播到反向誤差的訓練,利用上文提到的各個模塊將訓練所得權值重新存儲到Flash中,直到所得輸出基本到達期望值時停止訓練.
圖6 神經網絡控制狀態(tài)機
根據(jù)圖5設計學習率更新模塊,其仿真如圖7所示.
圖7中eta_n為學習率,vid_data為梯度值,在誤差訓練階段,eta_n根據(jù)vid_data的改變進行移位,改變學習率.
完成FPGA設計后,將FPGA輸出結果保存為txt格式,然后導入 Matlab進行數(shù)據(jù)比較,以2017年10月到12月的數(shù)據(jù)為參考,其結果誤差如圖8所示.
由圖8發(fā)現(xiàn),FPGA輸出的矢量誤差最大約50 m,與模型誤差基本一致.
圖7 學習率自適應仿真圖
圖8 FPGA 實際輸出矢量誤差
設計傳統(tǒng)BP神經網絡學習率為0.1,改進BP算法初始學習率為0.1,均為三層神經網絡,激活函數(shù)為式(2).
對比使用PC端傳統(tǒng)的BP神經網絡、改進的BP神經網絡、及FPGA端使用傳統(tǒng)的BP神經網絡、改進的BP神經網絡訓練速率.PC端使用C語音完成設計,使用VS2013作為開發(fā)工具,使用CPU的主頻為3.6 GHz.FPGA使用文中的設計模塊.而由于FPGA不能直接計算算法消耗的時間,故從讀完Flash中的權值開始計數(shù),直到訓練完成輸出期望的數(shù)據(jù),計算消耗的周期,從而算出時間.
表1 不同平臺上算法的消耗時間 (單位:s)
由表1可以看出在經過自適應學習率改進和使用硬件實現(xiàn)的BP神經網絡,在完成預測的基礎上學習和訓練效率上提高了約200倍.
本文從冬季秸稈焚燒的火點入手,根據(jù)往年留下的大量數(shù)據(jù),設計了一種基于BP神經網絡的改進模型,比之傳統(tǒng)的BP神經網絡,其收斂速度提高了近10倍,從而大大加快了訓練的速度.與此同時利用FPGA可重構技術,將設計的模型在硬件上完成設計及實現(xiàn),對比輸出數(shù)據(jù),驗證了模型與FPGA設計的準確性.利用改進后的算法和FPGA硬件實現(xiàn)的神經網絡,比之PC端的BP神經網絡,運算速度獲得大大提高.這不僅在環(huán)境保護火點預防監(jiān)測有很大的應用前景,同時也為后期無人機及無人車的路線自動規(guī)劃提供了一定的理論基礎.