廖有為, 曹偉嘉, 蔣劍鋒, 楊留方
(1.云南民族大學(xué) 電氣信息工程學(xué)院,云南 昆明 650031;2.云南省高校無(wú)線傳感器網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650031)
氣體傳感器測(cè)量時(shí)易受環(huán)境濕度的影響[1],不同濕度影響輸出精度,因此需要對(duì)濕度補(bǔ)償。濕度補(bǔ)償一般有硬件補(bǔ)償和軟件補(bǔ)償兩種。硬件補(bǔ)償存在補(bǔ)償電路受電子元件漂移和元件焊接的精密度影響、調(diào)試?yán)щy等缺點(diǎn),致使整個(gè)測(cè)量電路的可靠性降低,而且還存在成本較高的問(wèn)題[2]。軟件補(bǔ)償?shù)姆椒ㄖ饕胁逯捣?、最小二乘法、多?xiàng)式擬合法,但是這些軟件補(bǔ)償方法存在計(jì)算量較大、擬合精度低等缺陷[3]。神經(jīng)網(wǎng)絡(luò)具有很好的非線性擬合能力,本文提出使用改進(jìn)反向傳播(back propagation,BP)神經(jīng)網(wǎng)絡(luò)和利用遺傳算法(genetic algorithm,GA)全局搜索優(yōu)化BP神經(jīng)網(wǎng)絡(luò)補(bǔ)償傳感器濕度誤差[4]。
SnO2氣敏元件對(duì)濕度敏感的根本原因是吸附的H2O分子與SnO2氣敏材料發(fā)生化學(xué)反應(yīng)所致,當(dāng)環(huán)境相對(duì)濕度升高(即空氣中水分子濃度增大),加速了分子在氣敏材料表面的吸附,自由電子濃度升高,致使傳感器氣敏電阻減小[5]。相同溫度的同一濕度下,隨著濃度的升高,傳感器的輸出電壓也隨之增大,但是在不同濕度下,輸出電壓的增長(zhǎng)與濃度的增加關(guān)系是非線性的。不同濕度下,相同輸出電壓對(duì)應(yīng)不同的濃度,濃度和輸出電壓關(guān)系非線性,這給濃度測(cè)量帶來(lái)不便。為提高精確度,應(yīng)采用補(bǔ)償方式減小濕度干擾。
BP 神經(jīng)網(wǎng)絡(luò)一般由輸入層、隱含層和輸出層三部分構(gòu)成,如圖1所示。訓(xùn)練樣本經(jīng)輸入層進(jìn)入網(wǎng)絡(luò),在隱含層和輸出層對(duì)樣本數(shù)據(jù)進(jìn)行訓(xùn)練,更新其權(quán)閾值。
圖1 BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
1)正向傳播算法
輸入的樣本,從輸入層經(jīng)過(guò)隱含層逐層進(jìn)行處理,通過(guò)所有的隱含層之后,經(jīng)由激活函數(shù)傳向輸出層。輸出層將實(shí)際輸出和期望輸出進(jìn)行對(duì)比,如果實(shí)際輸出與期望輸出有偏差,則進(jìn)入反向傳播過(guò)程。
假設(shè)輸入層節(jié)點(diǎn)為m個(gè),隱含層節(jié)點(diǎn)為q個(gè),輸出層節(jié)點(diǎn)為n個(gè),輸入層與隱含層之間的權(quán)值為wji,隱含層的激活函數(shù)為f1(·),隱含層到輸出層之間的權(quán)值為wkj,輸出層的激活函數(shù)為f2(·),則隱含層中節(jié)點(diǎn)輸出為
(1)
輸出層節(jié)點(diǎn)輸出
(2)
這樣BP網(wǎng)絡(luò)即完成了從m維空間向量對(duì)n維空間的近似映射。
2)BP算法
(3)
對(duì)于p個(gè)樣品,全局偏差為
(4)
為減小誤差,把誤差信號(hào)按原來(lái)正向傳播的路徑反向傳回,調(diào)節(jié)隱含層中的各個(gè)神經(jīng)元的權(quán)值系數(shù),讓全局偏差信號(hào)E趨向于最小。
學(xué)習(xí)過(guò)程中,標(biāo)準(zhǔn)BP算法對(duì)所有的權(quán)值使用一個(gè)統(tǒng)一的學(xué)習(xí)速度,每步的長(zhǎng)度與其方向斜率成比例,其權(quán)值更新的基本公式[6]為
ΔWkj(n)=η·G(n)
(5)
式中η為步長(zhǎng)參數(shù)(即學(xué)習(xí)速率);ΔWkj為第n次權(quán)值修正量;G(n)為當(dāng)前誤差函數(shù)對(duì)權(quán)值的梯度,α為動(dòng)量因子,n為迭代的次數(shù)。由于BP只用局部梯度信息,故η值必須很小,從而使該算法跳過(guò)極小值,這使得學(xué)習(xí)收斂速度變慢,為加快收斂速度,常用的方法是加入動(dòng)量因子,其權(quán)值更新式為
ΔWkj(n+1)=α·ΔWkj(n)+α·η·g(n)
(6)
式中α為動(dòng)量因子,用來(lái)作為減小阻尼局部振蕩的量,且動(dòng)量因子一般在0.9附近。
為提高網(wǎng)絡(luò)訓(xùn)練速率,避開陷于局部的極小值的不利情形,達(dá)到擬合標(biāo)準(zhǔn)等要求,提出了改進(jìn)BP算法的方法:運(yùn)用Levenberg-Marquardt法作為訓(xùn)練方式,優(yōu)化標(biāo)準(zhǔn)BP神經(jīng)網(wǎng)絡(luò),適當(dāng)調(diào)節(jié)學(xué)習(xí)速率和動(dòng)量因子,使改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)收斂更快,均方誤差更小。
但是,BP神經(jīng)網(wǎng)絡(luò)在進(jìn)行訓(xùn)練的過(guò)程中,存在訓(xùn)練時(shí)間過(guò)長(zhǎng),易陷入局部最小值等不足之處。針對(duì)這一問(wèn)題,本文使用GA,對(duì)BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程進(jìn)行優(yōu)化,以減小迭代次數(shù)與訓(xùn)練時(shí)間。
GA是一種基于基因遺傳學(xué)法則和自然選擇的全局搜索方法,其本質(zhì)是選擇—交叉—變異算子的循環(huán)過(guò)程,直到找到最優(yōu)結(jié)果或者滿足終止條件。該算法可得出BP神經(jīng)網(wǎng)絡(luò)的最合適權(quán)閾值,提高模型預(yù)測(cè)精度。
本文設(shè)計(jì)的 GA-BP神經(jīng)網(wǎng)絡(luò)算法在 MATLAB上實(shí)現(xiàn),算法主要流程如下[7,8]:1)初始網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),初始神經(jīng)網(wǎng)絡(luò)權(quán)閾值長(zhǎng)度,GA對(duì)初始化編碼,得到初始種群;2)設(shè)計(jì)適應(yīng)度函數(shù),用適應(yīng)度函數(shù)計(jì)算染色體適應(yīng)度;3)進(jìn)行選擇、交叉和變異操作產(chǎn)生新的種群;4)達(dá)到終止條件,獲取全局最優(yōu)的網(wǎng)絡(luò)權(quán)值和閾值,否則返回上述步驟(3);5)代入最佳權(quán)閾值,進(jìn)行BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,從而得到全局最優(yōu)解。
依據(jù)GA的特性設(shè)計(jì)參數(shù),其中種群大小設(shè)置為10;染色體采用二進(jìn)制形式編碼,交叉概率為0.7,變異概率為0.08,進(jìn)行調(diào)節(jié)參數(shù)[9]。
基本測(cè)試電路如圖 2所示,Vh為加熱電壓,VC為工作電壓,VO為輸出電壓,RL為負(fù)載電阻。
圖2 基本測(cè)試電路
利用神經(jīng)網(wǎng)絡(luò)擁有復(fù)雜的非線性映射、自組織、自學(xué)習(xí)及推理能力的特性,結(jié)合GA對(duì)傳感器進(jìn)行濕度補(bǔ)償。要達(dá)到上述目標(biāo),首先要對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,訓(xùn)練樣本由實(shí)驗(yàn)數(shù)據(jù)提供。實(shí)驗(yàn)所用傳感器是二氧化錫(SnO2)為主要材料的異丙醇?xì)怏w傳感器,工作電壓為10 V,加熱電壓為4.5 V,通過(guò)控制變量法測(cè)試。以60 %RH,24 ℃條件為標(biāo)準(zhǔn),計(jì)算未補(bǔ)償時(shí)與標(biāo)準(zhǔn)值之間的誤差百分比如表1所示。
表1 不同相對(duì)濕度下氣體傳感器部分測(cè)試結(jié)果未補(bǔ)償時(shí)誤差百分比
為了使神經(jīng)網(wǎng)絡(luò)更好地運(yùn)算,將樣本數(shù)據(jù)輸入網(wǎng)絡(luò)之前,首先進(jìn)行歸一化處理[10],如下
(7)
(8)
使用 MATLAB 2017的BP神經(jīng)網(wǎng)絡(luò)工具箱及MATLAB自帶工具箱對(duì)數(shù)據(jù)進(jìn)行處理[11]。采用 BP算法對(duì)樣本進(jìn)行訓(xùn)練,輸入層設(shè)1個(gè)節(jié)點(diǎn),隱含層選5個(gè)節(jié)點(diǎn),隱含層的個(gè)數(shù)不固定,輸出層設(shè)為1個(gè)節(jié)點(diǎn)。輸入向量的范圍是[0,1],隱含層采用Losig函數(shù),輸出層采用 Purelin函數(shù),網(wǎng)絡(luò)訓(xùn)練函數(shù)為Trainlm。設(shè)置訓(xùn)練目標(biāo)誤差為0.000 01,最大訓(xùn)練次數(shù)設(shè)為3 000次,將樣本庫(kù)數(shù)據(jù),經(jīng)過(guò)不斷調(diào)試,訓(xùn)練神經(jīng)網(wǎng)絡(luò)得到期望的預(yù)測(cè)效果。
使用標(biāo)準(zhǔn)BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練濕度環(huán)境為45 %RH~90 %RH的樣本,樣本數(shù)為600個(gè)數(shù)據(jù),預(yù)測(cè)效果及訓(xùn)練誤差百分比,如圖3所示,其中絕對(duì)誤差百分比最大為14.3 %,最小接近0,平均絕對(duì)誤差百分比為5.7 %。
圖3 BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)絕對(duì)誤差百分比
通過(guò)實(shí)驗(yàn)增大訓(xùn)練數(shù)據(jù),調(diào)節(jié)參數(shù)改進(jìn)BP神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測(cè),預(yù)測(cè)結(jié)果效果得到改善,樣本預(yù)測(cè)最大絕對(duì)誤差百分比為13.2 %,平均絕對(duì)誤差百分比為3.04 %,絕對(duì)誤差百分比在3 %以下比較集中,大于4 %的部分偏差較大,對(duì)整體預(yù)測(cè)效果有較大影響。
采用GA對(duì)BP神經(jīng)網(wǎng)絡(luò)優(yōu)化,預(yù)測(cè)絕對(duì)誤差百分比如圖4所示,最大絕對(duì)誤差百分比為7.2 %,平均絕對(duì)誤差百分比為1.96 %,大部分絕對(duì)誤差百分比分布在3 %以下,且預(yù)測(cè)誤差小于1 %的比重大,使不同的濕度下輸出結(jié)果波動(dòng)減小,提高整體預(yù)測(cè)準(zhǔn)確度。
圖4 GA-BP預(yù)測(cè)絕對(duì)誤差百分比
計(jì)算改進(jìn)BP網(wǎng)絡(luò)和GA-BP網(wǎng)絡(luò)的訓(xùn)練數(shù)據(jù),可得到表2的數(shù)據(jù)結(jié)果。
表2 神經(jīng)網(wǎng)絡(luò)訓(xùn)練結(jié)果
由于氣體濃度不同時(shí),測(cè)量輸出電壓不同,在輸出小電壓時(shí)小的誤差引起的誤差百分比較大,使絕對(duì)誤差百分比分布有波動(dòng),使用平均絕對(duì)誤差百分比作為衡量預(yù)測(cè)效果的指標(biāo),通過(guò)實(shí)驗(yàn)室測(cè)試增大數(shù)據(jù)和改進(jìn)BP神經(jīng)網(wǎng)絡(luò)提高預(yù)測(cè)精度。對(duì)比表2中的數(shù)據(jù)可知,使用GA-BP網(wǎng)絡(luò)算法比使用BP神經(jīng)網(wǎng)絡(luò)的平均絕對(duì)誤差百分比減少65.6 %,比使用改進(jìn)BP算法的平均絕對(duì)誤差百分比減少35.3 %,均方根誤差為0.035 6波動(dòng)小。
通過(guò)改進(jìn)BP神經(jīng)網(wǎng)絡(luò)和結(jié)合GA優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的方法,減小不同環(huán)境濕度對(duì)傳感器輸出的影響,得到準(zhǔn)確的輸出結(jié)果。測(cè)試結(jié)果顯示,使用GA優(yōu)化BP神經(jīng)網(wǎng)絡(luò),平均預(yù)測(cè)誤差百分比降為1.96 %。GA-BP網(wǎng)絡(luò)算法預(yù)測(cè)誤差百分比與標(biāo)準(zhǔn)BP算法和改進(jìn)BP神經(jīng)網(wǎng)絡(luò)相比,分別減少65.6 %,35.3 %,波動(dòng)小穩(wěn)定性更好。使用GA-BP網(wǎng)絡(luò)算法使傳感器的測(cè)量準(zhǔn)確性和濕度可靠性得到有效的提高,改進(jìn)算法對(duì)傳感器輸出性能有提高。在后續(xù)的研究中,將拓寬溫濕度測(cè)試范圍,并進(jìn)一步優(yōu)化算法,提高異丙醇?xì)怏w濃度檢測(cè)的精度。