周 欣,王宜懷,姚望舒,葛新越
(蘇州大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇蘇州 215006)
在嵌入式測(cè)控系統(tǒng)中,控制終端通過(guò)傳感器對(duì)外界信息進(jìn)行檢測(cè),經(jīng)由放大電路、模數(shù)轉(zhuǎn)換模塊(analog to digital convert module,A/D轉(zhuǎn)換模塊)等,轉(zhuǎn)換成能被終端識(shí)別的數(shù)字信號(hào)(又稱為A/D值)。為便于測(cè)控系統(tǒng)使用,需將A/D值與實(shí)際外界信息對(duì)應(yīng),此對(duì)應(yīng)過(guò)程可稱之為物理量回歸。
目前常見(jiàn)的物理量回歸方法[1]有公式法,查表法,分段直線法,最小二乘法及三次樣條插值法等。但受采樣過(guò)程中傳感器自身采樣特性,放大電路與A/D轉(zhuǎn)換模塊轉(zhuǎn)換過(guò)程中所具有的非線性變換等因素的影響,待回歸A/D值與回歸后的物理量之間成非線性關(guān)系。上述方法雖可用于解決物理量回歸問(wèn)題,但存在一定的缺陷。如公式法利用固定數(shù)字公式進(jìn)行轉(zhuǎn)換,速度快,但準(zhǔn)確度不高;查表法根據(jù)輸入輸出表格進(jìn)行查找,占用空間過(guò)大;分段直線法的分段越多,精度越高,但其復(fù)雜性也不斷增加;而最小二乘法和三次樣條插值法是通過(guò)采樣數(shù)據(jù)確定相應(yīng)的匹配函數(shù),針對(duì)不同情況需重新確認(rèn)公式,且非線性關(guān)系較為復(fù)雜,不易確定合適公式。
針對(duì)上述情況,本文提出以A/D值作為輸入,傳感器測(cè)量的實(shí)際模擬量作為輸出,使用BP神經(jīng)網(wǎng)絡(luò)進(jìn)行回歸擬合。并針對(duì)BP神經(jīng)網(wǎng)絡(luò)易陷入局部極小值的問(wèn)題,選擇使用遺傳算法進(jìn)行參數(shù)優(yōu)化。將遺傳算法優(yōu)化后的BP神經(jīng)網(wǎng)絡(luò)與最小二乘法、三次樣條插值法及傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)進(jìn)行比較,實(shí)驗(yàn)表明,通過(guò)GA-BP算法能夠有效的提高物理量回歸的精度。同時(shí)提出一種回歸模型在MCU端應(yīng)用的方法,該方法能夠較好地在MCU進(jìn)行物理量回歸及參數(shù)更新,具有一定的實(shí)用性和適應(yīng)性。
反向傳播(back propagation,BP)學(xué)習(xí)算法,是一種基于誤差反向傳播的前向多層反饋的人工神經(jīng)網(wǎng)絡(luò)算法。通過(guò)梯度下降法,尋找實(shí)際輸出值和目標(biāo)值之間誤差平方的極小值,從而對(duì)網(wǎng)絡(luò)的連接權(quán)值進(jìn)行調(diào)整,達(dá)到在調(diào)整過(guò)的網(wǎng)絡(luò)模型中,對(duì)于每一組輸入都能得到期望輸出的目的[2]。
以A/D值作為輸入,傳感器測(cè)量模擬量作為輸出,可構(gòu)建單輸入輸出的神經(jīng)網(wǎng)絡(luò)模型。理論與實(shí)踐表明,含有一個(gè)隱藏層的BP神經(jīng)網(wǎng)絡(luò)具有逼近任何閉區(qū)間內(nèi)一個(gè)連續(xù)函數(shù)的能力[3],因此使用3層神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練和預(yù)測(cè)。其3層BP神經(jīng)網(wǎng)絡(luò)模型如圖1所示。
圖1 BP神經(jīng)網(wǎng)絡(luò)模型
在此網(wǎng)絡(luò)模型中,設(shè)訓(xùn)練樣例個(gè)數(shù)為D,網(wǎng)絡(luò)由1個(gè)輸入層單元,Q個(gè)隱藏層單元,1個(gè)輸出層單元構(gòu)成。
輸入層僅進(jìn)行數(shù)據(jù)的輸入,表示為ad=X,d=1,2,3,…,D為訓(xùn)練樣本編號(hào)。
隱藏層使用sigmoid函數(shù)作為激活函數(shù),提供非線性變換過(guò)程,其輸出為
hdi=sig(wiad+oi)
(1)
式中:wi為輸入層與隱藏層之間的權(quán)值;oi為輸入層與輸出層的權(quán)值,i=1,2,3,…,Q為隱藏層單元數(shù)。
輸出層同樣使用sigmoid函數(shù),其輸出為
(2)
式中:r為隱藏層與輸出層的閾值;vi為隱藏層節(jié)點(diǎn)與輸出節(jié)點(diǎn)的權(quán)值,i=1,2,3,…,Q為隱藏層單元數(shù)。
遺傳算法(genetic algorithm,GA)是一種模擬自然生存和遺傳機(jī)制的最優(yōu)解搜索算法[4]。通過(guò)選擇、交叉和變異對(duì)種群進(jìn)行多次迭代優(yōu)化,選擇符合當(dāng)前問(wèn)題的最優(yōu)解,其進(jìn)化過(guò)程如圖2所示。
圖2 遺傳算法種群進(jìn)化過(guò)程
該算法提供了一種求解復(fù)雜系統(tǒng)問(wèn)題的通用框架,其全局搜索策略和優(yōu)化搜索方法的計(jì)算不依賴問(wèn)題的具體領(lǐng)域,只需要確定影響搜索方向的目標(biāo)函數(shù)和適應(yīng)度函數(shù),便可以實(shí)現(xiàn)最優(yōu)解搜索。
針對(duì)傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程易陷入局部極小值的問(wèn)題,使用遺傳算法進(jìn)行優(yōu)化。將隨機(jī)生成的初始權(quán)值與閾值作為種群的個(gè)體,經(jīng)遺傳算法篩選出較為合適的解作為BP神經(jīng)網(wǎng)絡(luò)的權(quán)值與閾值;由BP神經(jīng)網(wǎng)絡(luò)模型進(jìn)行權(quán)值與閾值的進(jìn)一步調(diào)整,得到能夠較好反映輸入輸出非線性關(guān)系的訓(xùn)練模型,其訓(xùn)練過(guò)程如圖3所示。
圖3 GA-BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程
其具體執(zhí)行步驟如下:
(1)訓(xùn)練樣本歸一化。使用最大最小值歸一化對(duì)訓(xùn)練樣本進(jìn)行數(shù)據(jù)壓縮,保留數(shù)據(jù)特性的同時(shí),加快訓(xùn)練速度。
(2)確定網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。根據(jù)訓(xùn)練樣本確定隱藏層單元數(shù)、學(xué)習(xí)速率與激活函數(shù)等網(wǎng)絡(luò)參數(shù),生成相應(yīng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。
(3)生成初始種群。隨機(jī)生成權(quán)值與閾值的初始值,并將其作為種群的個(gè)體,進(jìn)行實(shí)數(shù)編碼。
(4)計(jì)算適應(yīng)度。適應(yīng)度函數(shù)為
(3)
式中:E為遺傳算法的目標(biāo)函數(shù),是BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練后實(shí)際輸出值和目標(biāo)值之間誤差平方和。
(5)選擇父代。按適應(yīng)度大小對(duì)個(gè)體進(jìn)行排序,并使用賭輪盤算法[5]篩選出2個(gè)個(gè)體作為父代。
(6)隨機(jī)交叉。父代以每層網(wǎng)絡(luò)的權(quán)值與閾值作為基因,采用隨機(jī)交叉算法,對(duì)基因進(jìn)行組合生成新的子代。
(7)變異。生成子代中,存在一部分個(gè)體發(fā)生變異,變異概率為0.01。變異個(gè)體的權(quán)值和閾值將重新賦值,生成新的基因。
(8)是否滿足停止條件。在不滿足停止條件時(shí),從原始種群中選擇部分適應(yīng)度高的個(gè)體與新生成子代組成新的種群,重復(fù)(4)~(7)的步驟繼續(xù)求解滿足情況的權(quán)值與閾值。
(9)權(quán)值與閾值的賦值。將遺傳算法求解的權(quán)值與閾值賦值給BP神經(jīng)網(wǎng)絡(luò),通過(guò)網(wǎng)絡(luò)訓(xùn)練進(jìn)一步實(shí)現(xiàn)參數(shù)的更新。
(10)權(quán)值與閾值的更新。通過(guò)網(wǎng)絡(luò)訓(xùn)練比較全局誤差極小值[6]來(lái)判斷是否生成滿足需求的權(quán)值與閾值,并使用誤差反向傳播方法對(duì)權(quán)值與閾值進(jìn)行更新,直到滿足目標(biāo)訓(xùn)練次數(shù)或目標(biāo)誤差。
(11)模型生成。保存最終權(quán)值與閾值及相關(guān)參數(shù),生成相應(yīng)的回歸模型。
本文針對(duì)傳感器模擬量的非線性問(wèn)題進(jìn)行回歸分析,故選擇隨光照強(qiáng)度變化,而阻值成非線性變化的光敏電阻獲取訓(xùn)練樣本。此處選用光敏電阻的型號(hào)為GM5506,其阻值隨光照強(qiáng)度的升高而降低,使用如圖4所示的采樣電路,其對(duì)應(yīng)電壓范圍為[0.55 V(亮),3.28 V(暗)],可測(cè)得[0 lux,15 000 lux]區(qū)間內(nèi)的光照強(qiáng)度。
圖4 光敏電阻采樣電路
控制終端的16位A/D模塊與采樣點(diǎn)連接,測(cè)試獲得一組光照強(qiáng)度和對(duì)應(yīng)A/D采樣值的訓(xùn)練樣本,該訓(xùn)練樣本數(shù)據(jù)能夠較好地涵蓋測(cè)量范圍及其變化情況,其數(shù)據(jù)如表1所示,其中1~18為訓(xùn)練數(shù)據(jù),19~26為測(cè)試數(shù)據(jù)。
表1 訓(xùn)練樣本——光照強(qiáng)度與A/D值樣本
為了對(duì)不同方法進(jìn)行比較,引入均方根誤差與決定系數(shù)對(duì)預(yù)測(cè)效果進(jìn)行評(píng)判。均方根誤差(root mean squared error,RMSE)計(jì)算觀測(cè)值與真實(shí)值之間的偏差,其值越小,預(yù)測(cè)效果越好。
(4)
式中:o為觀測(cè)值;t為真實(shí)值。
決定系數(shù)又稱為擬合優(yōu)度,通常使用R表示,反映的是回歸的擬合程度,其值越大,擬合程度越好,預(yù)測(cè)性能也就越優(yōu)。
(5)
本文實(shí)驗(yàn)?zāi)P褪褂肅#語(yǔ)言編程實(shí)現(xiàn),具有訓(xùn)練與驗(yàn)證功能。通過(guò)對(duì)模型的分析可知,其輸入與輸出神經(jīng)元個(gè)數(shù)均為1。采用sigmoid型函數(shù)作為激活函數(shù)的神經(jīng)網(wǎng)絡(luò)具有對(duì)任意連續(xù)函數(shù)的逼近能力[7],故選取sigmoid函數(shù)作為激活函數(shù),使用梯度下降法進(jìn)行權(quán)值與閾值的更新。隱藏層單元個(gè)數(shù)的范圍可依據(jù)經(jīng)驗(yàn)公式[8]計(jì)算得出:
(6)
式中:q為隱藏層單元數(shù);p為輸入層單元數(shù);m為輸出層單元數(shù);α為1~10之間的常數(shù)。
對(duì)于回歸模型,其隱藏層單元數(shù)范圍在3~11之間。經(jīng)多次實(shí)驗(yàn)驗(yàn)證得出隱藏層單元數(shù)為8時(shí),具有更好的擬合效果。設(shè)定學(xué)習(xí)速率為0.1,目標(biāo)誤差精度為0.000 001,初始權(quán)值和閾值隨機(jī)生成。
在此網(wǎng)絡(luò)結(jié)構(gòu)基礎(chǔ)上,使用遺傳算法對(duì)初始權(quán)值與閾值進(jìn)行優(yōu)化,初始種群大小為100,變異概率為0.01,迭代次數(shù)為1 000。
在上述網(wǎng)絡(luò)中,使用樣本中的訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練,得到對(duì)應(yīng)的權(quán)值與閾值參數(shù)如表2所示。
表2 BP神經(jīng)網(wǎng)絡(luò)各層參數(shù)
權(quán)值與閾值以及網(wǎng)絡(luò)相關(guān)參數(shù)共同構(gòu)成一個(gè)GA-BP網(wǎng)絡(luò)模型。使用該網(wǎng)絡(luò)模型對(duì)測(cè)試數(shù)據(jù)進(jìn)行驗(yàn)證分析,由表3可以看出,光照強(qiáng)度的預(yù)測(cè)值與實(shí)際值誤差基本能控制在可接受范圍以內(nèi)。
表3 測(cè)試樣例輸出測(cè)試
2.4.1 傳統(tǒng)方法與神經(jīng)網(wǎng)絡(luò)的對(duì)比
傳統(tǒng)的非線性回歸方法有最小二乘法和三次樣條插值法。最小二乘法通過(guò)最小化誤差平方和找尋最佳函數(shù)匹配[9],三次樣條插值法通過(guò)三彎矩法并結(jié)合邊界條件推導(dǎo)系數(shù)方程確定對(duì)應(yīng)的回歸函數(shù)[10],實(shí)際是在相鄰數(shù)據(jù)點(diǎn)之間確定一個(gè)三次樣條函數(shù)。
針對(duì)本文使用的訓(xùn)練樣本,使用最小二乘法和三次樣條插值法進(jìn)行回歸擬合,并使用測(cè)試樣例與BP神經(jīng)網(wǎng)絡(luò)進(jìn)行驗(yàn)證對(duì)比,圖5給出各方法的預(yù)測(cè)結(jié)果的回歸曲線,并列出各方法的均方根誤差和決定系數(shù),如表4所示。
圖5 光照強(qiáng)度與A/D值的物理量回歸曲線
表4 傳統(tǒng)方法與神經(jīng)網(wǎng)絡(luò)的對(duì)比
綜合圖5和表4可以看出BP神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確度優(yōu)于其余2種方法。最小二乘法與三次樣條插值法的擬合是確定具體公式及其系數(shù),BP神經(jīng)網(wǎng)絡(luò)確定網(wǎng)絡(luò)相關(guān)參數(shù)。3種方法在回歸形式上存在一定的區(qū)別,但都可轉(zhuǎn)換為使用一定的回歸公式進(jìn)行回歸預(yù)測(cè)。不同在于對(duì)不同的訓(xùn)練樣本,最小二乘法與三次樣條插值法需要重新確認(rèn)公式,而B(niǎo)P神經(jīng)網(wǎng)絡(luò)模型的回歸公式可不改變,僅需校正權(quán)值與閾值。同時(shí)BP神經(jīng)網(wǎng)絡(luò)可以通過(guò)不斷提升訓(xùn)練次數(shù)來(lái)減小誤差,達(dá)到更好的擬合效果,是一種具有較好擬合能力的非線性回歸方法。
2.4.2 BP神經(jīng)網(wǎng)絡(luò)優(yōu)化對(duì)比
由上述對(duì)比實(shí)驗(yàn)可知,BP神經(jīng)網(wǎng)絡(luò)對(duì)于傳感器模擬量的非線性回歸問(wèn)題具有較好的擬合能力。但BP神經(jīng)網(wǎng)絡(luò)存在易陷入局部極小值的特點(diǎn),針對(duì)此問(wèn)題使用遺傳算法進(jìn)行優(yōu)化。分別記錄下BP神經(jīng)網(wǎng)絡(luò)與GA-BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中每10 000次訓(xùn)練實(shí)際值與目標(biāo)值之間的誤差平方和,繪制成如圖6所示的曲線。并計(jì)算相應(yīng)的均方根誤差和決定系數(shù),如表5所示。
圖6 GA-BP與BP誤差狀態(tài)
表5 GA-BP與BP對(duì)比
從圖6可以看出,GA-BP神經(jīng)網(wǎng)絡(luò)模型在訓(xùn)練過(guò)程中的收斂速度明顯優(yōu)于傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)。同時(shí)結(jié)合表5可以看出,在訓(xùn)練相同次數(shù)的情況下對(duì)GA-BP的擬合程度優(yōu)于傳統(tǒng)BP算法,具有更好的預(yù)測(cè)準(zhǔn)確度。
模型訓(xùn)練過(guò)程在PC端完成,而生成的網(wǎng)絡(luò)模型則應(yīng)用于MCU端。圖7為訓(xùn)練模型在MCU端的應(yīng)用過(guò)程。
圖7 神經(jīng)網(wǎng)絡(luò)在MCU端應(yīng)用
針對(duì)上述流程,將BP神經(jīng)網(wǎng)絡(luò)在MCU端回歸預(yù)測(cè)功能封裝成構(gòu)件,構(gòu)件中各函數(shù)及功能如表6所示。
按圖8所示的結(jié)構(gòu)類型將網(wǎng)絡(luò)參數(shù)存儲(chǔ)在固定Flash區(qū)域;芯片啟動(dòng)后,使用BPinit函數(shù)讀取位于Flash區(qū)域的存儲(chǔ)參數(shù),構(gòu)建神經(jīng)網(wǎng)絡(luò)模型;實(shí)時(shí)使用A/D轉(zhuǎn)換模塊讀取傳感器A/D采樣值后,利用BPpredict函數(shù)進(jìn)行轉(zhuǎn)換到傳感器的實(shí)際輸出值;同時(shí)包含參數(shù)更新功能,當(dāng)計(jì)算結(jié)果存在誤差時(shí),可重新采集訓(xùn)練樣本在PC端訓(xùn)練,并將訓(xùn)練結(jié)果利用BPUpdate函數(shù)將網(wǎng)絡(luò)模型重新寫入相應(yīng)Flash區(qū)域。
以MKL36Z64[11](簡(jiǎn)稱KL36)芯片和S32K144[12](簡(jiǎn)稱S32K)芯片為例進(jìn)行MCU端預(yù)測(cè)實(shí)驗(yàn)。KL36屬于ARM Cortex-M0+內(nèi)核,其對(duì)應(yīng)的Flash為64 KB,RAM大小為8 KB;而S32K屬于ARM Cortex-M4內(nèi)核,其對(duì)應(yīng)的Flash為512 KB,RAM大小為60 KB;其內(nèi)置A/D轉(zhuǎn)換模塊精度均為16位。使用該構(gòu)件進(jìn)行光照強(qiáng)度的采樣與回歸,在KL36與S32K上均能按照如圖7所示的流程進(jìn)行回歸預(yù)測(cè)。
表6 BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)構(gòu)件
圖8 網(wǎng)絡(luò)參數(shù)存儲(chǔ)結(jié)構(gòu)體
本文針對(duì)非線性傳感器A/D值與模擬量之間存在的非線性關(guān)系難以確定回歸公式進(jìn)行表達(dá)的問(wèn)題,提出使用BP神經(jīng)網(wǎng)絡(luò)對(duì)傳感器A/D值與模擬量進(jìn)行回歸擬合。實(shí)驗(yàn)表明,使用BP神經(jīng)網(wǎng)絡(luò)能夠?qū)烧咧g的非線性關(guān)系進(jìn)行良好表達(dá),和最小二乘法與三次樣條插值法相比,BP神經(jīng)網(wǎng)絡(luò)的擬合程度明顯優(yōu)于其余2種方法,具有較高的準(zhǔn)確度,并能有效提升轉(zhuǎn)換后的精度。而使用遺傳算法優(yōu)化后的GA-BP神經(jīng)網(wǎng)絡(luò),能加快BP神經(jīng)網(wǎng)絡(luò)的收斂速度,回歸的精度也進(jìn)一步提升。同時(shí)提出一種在MCU端應(yīng)用的方法,網(wǎng)絡(luò)參數(shù)固化至MCU端存儲(chǔ),并利用BP神經(jīng)網(wǎng)絡(luò)構(gòu)件實(shí)現(xiàn)在MCU的回歸預(yù)測(cè),具有一定的實(shí)用性和適應(yīng)性。