胡宏梅,別玉霞
(1.蘇州健雄職業(yè)技術(shù)學院人工智能學院,江蘇 太倉 215411;2.沈陽航空航天大學電子信息工程學院,遼寧 沈陽 110136)
粒子群優(yōu)化算法(Particle Swarm Optimization,PSO)是Kennedy 和Eberhart 受鳥群覓食的啟發(fā)而提出來的一種算法,將鳥群作為PSO 算法中的種群,每一只鳥相當于PSO 算法中一個粒子,鳥的覓食過程看作為粒子迭代進化過程,將鳥覓到的食物看作為PSO 算法欲求解問題的目標,找到食物的鳥即為所有粒子所追隨的對象,即最優(yōu)解。PSO 算法模擬鳥之間的個性化學習和彼此協(xié)作交互,促使整個群體不斷搜索并向最優(yōu)解靠近,常用來解決一些優(yōu)化問題。
PSO 算法初始化為一群隨機粒子,而每個粒子對應到優(yōu)化問題中都會得到一個適應值,同時,粒子的移動是通過不斷更新速度和位置完成的,而這兩個參數(shù)的更新是由當前的最優(yōu)粒子和個體最優(yōu)值來決定的,通過跟蹤這兩個極值從而達到搜索最優(yōu)解的目的。
假設欲求解問題的目標函數(shù)為:
記群體中粒子i的位置Xi=(xi1,xi2,…,xin),速度Vi=(vi1,vi2,…,vin),且該粒子所經(jīng)歷的最好位置記為Pi=(pi1,pi2,…,pin),整個群里所經(jīng)歷過的最好位置記為Pg=(pg1,pg2,…,pgn),則在跟蹤兩個極值移動過程中,該粒子第t+1 次迭代中速度和位置更新如式(2)所示:
式中:c1、c2為學習因子,也稱為加速常數(shù);r1、r2是在(0,1)之間產(chǎn)生的隨機數(shù);w為慣性權(quán)重;vij(t+1)為粒子i在第t+1 次迭代中第j維速度,vij∈[-vmax,vmax],其中,vmax是常數(shù),用來限定粒子的飛行速度。
速度更新公式中,包括了三個部分,第一部分是粒子i的慣性部分,反映出了粒子i的運動習慣,使其維持之前的運動速度,保證算法的全局搜索性;第二部分是認知部分,讓粒子i能記住自己所經(jīng)歷過的最好位置,并向其不斷逼近的趨勢,具有一定的目標性,防止隨機搜索而偏離最優(yōu)解;第三部分為社會部分,反映出粒子之間的協(xié)同合作性,使得粒子在保持自身移動的同時還能關(guān)注全局最優(yōu)值,并向其移動靠近,進而能達到搜索全局最優(yōu)的目的。
粒子i所經(jīng)歷過的最好位置Pi是由式(3)確定:
而整個群體所經(jīng)歷過的最好位置Pg(t)由式(4)決定:
PSO 算法的基本流程如下:
步驟1 初始化種群大小為M,維數(shù)為n及參數(shù)c1、c2、r1、r2。
步驟2 初始化M個粒子的速度V={V1,V2,…,VM}和位置X={X1,X2,…,XM}。
步驟3 計算每個粒子所對應的目標函數(shù)f(Xi(t)),并根據(jù)式(3)和式(4)更新個體最優(yōu)Pi和全局最優(yōu)Pg。
步驟4 根據(jù)式(2)更新粒子的速度Vi(t)和位置Xi(t)。
步驟5 是否達到最大迭代次數(shù)或最大閾值,如果是,則結(jié)束算法,輸出全局最優(yōu)解;如果否,則跳到步驟3 繼續(xù)執(zhí)行。
PSO 算法中主要涉及到的參數(shù)有:學習因子c1、c2,慣性權(quán)重w以及最大速度等。
慣性權(quán)重w是PSO 算法中比較重要的參數(shù)之一,它的大小決定了本次迭代中粒子飛行速度受上次迭代中飛行速度影響的程度,也間接決定了粒子全局和局部的搜索能力。
分析可知,w取較大值有利于全局搜索,但增大算法開銷,降低算法效率;w取較小值有利于局部搜索,加速算法收斂,但容易陷入局部最優(yōu),因此設置一個合適的w即可平衡全局和局部搜索能力,兼顧算法收斂速度和收斂精度,降低陷入局部最優(yōu)解的可能性,提高算法的整體性能。
Shi 等[2]通過一系列的實驗,得出慣性權(quán)重函數(shù)的線性下降范圍為[0.9,0.4],慣性權(quán)重范圍的確定使得粒子在搜索的前期能夠迅速明確最優(yōu)解所處的搜索范圍。根據(jù)慣性權(quán)重的變化,粒子的搜索速度和范圍也隨之變化,從而實現(xiàn)更加精確的搜索。但這種方法存在一個問題,即若粒子前期未能搜索到最優(yōu)位置,則后期隨著粒子全局搜索能力的下降,局部搜索能力的增強,則容易出現(xiàn)局部收斂,針對這一現(xiàn)象,提出了一種非線性慣性權(quán)重算法[3],其表示為
式中:wstart和wend分別為慣性權(quán)重的起始值和終點值,即最大值和最小值,k為控制因子,控制著慣性權(quán)重隨迭代次數(shù)的變化,文獻中指出k的取值為3.0~4.0 時,算法所達到的效果較好。
如圖1 所示,當?shù)螖?shù)在0 到200 之間時,慣性權(quán)重w從慢到快變化;而當?shù)螖?shù)在250 以上時,慣性權(quán)重w由快到慢變化,故粒子在搜索前期無法保持較大的搜索范圍,后期的收斂速度也受到一定的影響,同時,兩者慣性權(quán)重的交接點即0.675也處于這個范圍內(nèi),故在慣性權(quán)重近于交接點值時,可以通過增加迭代次數(shù)來擴大粒子的搜索范圍。
圖1 線性和非線性慣性權(quán)重函數(shù)曲線
如圖2 所示,可以看出k的取值不同,慣性權(quán)重的結(jié)果也會受到影響,k=0.5、1.5、3 和3.6 時,對應的慣性權(quán)重如圖2 所示,當k=0.5 時,慣性權(quán)重取值較大,搜索范圍較為廣泛,不易搜索到最優(yōu)解;當k=1.5 時,慣性權(quán)重取值的前期變化較為緩慢,能夠獲得較大的搜索范圍,而后期慣性權(quán)重相對于k=3 和3.6 時,減小得較為緩慢,很難在局部搜索中獲取最優(yōu)解。為了確保粒子在整個迭代過程中既能有效地進行全局搜索,又能有效進行局部搜索,讓粒子在前期能更精確獲得最優(yōu)解搜索范圍,后期能獲得最優(yōu)解,本文將采用非線性和線性相結(jié)合的方式來設置慣性權(quán)重,如式(7)所示:
圖2 k 取值不同時慣性權(quán)重的對比
學習因子c1使得粒子根據(jù)個體的歷史經(jīng)驗向個體最優(yōu)解靠近,而c2則使得粒子通過個體間的相互協(xié)作引導著粒子向全局最優(yōu)方向靠近。
當c1=0、c2=0 時,粒子只靠自身速度在進行盲目搜索;當c1≠0、c2=0 時,粒子將失去與其他粒子間的協(xié)作關(guān)系,僅靠自身能力搜索整個空間,缺乏搜索指導,其他粒子的優(yōu)勢將無法體現(xiàn),易陷入局部收斂;當c1=0、c2≠0 時,粒子的搜索主要依靠與其他個體間的相互協(xié)作,而缺少了對自身經(jīng)歷的學習,盲目跟隨群體中的最優(yōu)粒子,易錯過最優(yōu)解。因此,只有對c1、c2進行合理取值,才能使得粒子充分利用自身經(jīng)驗和個體間協(xié)作有效搜索全局最優(yōu)解。
本文以線性權(quán)重和非線性權(quán)重的交接點約為0.675 為分界點,當w大于等于交點時,則學習因子c1和c2分別取2.5 和0.5,而w小于交點時,學習因子c1和c2分別取0.5 和2.5,具體如式(8)所示:
粒子群里的粒子速度主要是用來控制粒子在搜索空間中的移動距離。通常,粒子速度越大,其每次搜索跨越度就越大,全局搜索能力就越強。但如果粒子最大速度設置過大,在提高其全局搜索能力的同時也提高了粒子的自由度,這樣容易使粒子跳過最優(yōu)解,很難搜索到全局最優(yōu);反之,如果粒子最大速度設置過小,每次迭代粒子在空間中移動就相對緩慢,局部搜索能力增強,全局搜索能力變?nèi)?,粒子容易陷入局部最?yōu)。vmax的選擇通常憑經(jīng)驗給定,并一般設定為問題空間的10%~20%。
如圖3 所示,首先將語音信號分成訓練語音和識別語音,然后進行預處理和特征參數(shù)提取,得到兩組隨機向量序列;接著通過矢量量化器把兩組隨機向量序列轉(zhuǎn)化成兩組觀測序列,一組用于訓練DHMM 模型,一組用于識別,最后利用Viterbi 算法計算測試觀測序列在每個DHMM 上的輸出概率,輸出概率最大的詞就是識別結(jié)果。而本文所做工作對應的是圖3 識別過程中矢量量化里的碼書設計。
圖3 語音識別方法
從一段語音中提取M個特征矢量作為矢量量化碼書設計的訓練矢量,其維數(shù)為k,而碼書大小為N。粒子群算法采用的是基于碼書的編碼方式,每個編碼和可行解相互對應,每個粒子對應一個碼書,即每個粒子對應具有N個碼字的碼書。在這種編碼方式下,每個粒子都是由N個聚類中心(碼字)組成,故每個粒子的速度Vi和Xi位置都是N×k維矢量,均可表示為:
數(shù)據(jù)維數(shù)為k,給定n個粒子,最大迭代次數(shù)為Tmax。最初將訓練矢量任意歸類,隨后將采用最近鄰條件和質(zhì)心條件獲取初始粒子。初始化中,粒子i的位置矢量即為矢量量化碼書的胞腔質(zhì)心,其速度矢量可隨機初始化為0,按照此過程循環(huán)n次,即可產(chǎn)生n個粒子速度和位置矢量。
在矢量量化碼書設計中,通常采用類內(nèi)、類間離散度以及矢量不均勻來衡量碼書設計算法的性能,本文采用類內(nèi)離散度的倒數(shù)作為適應度函數(shù)。設訓練矢量為Z={z1,z2,z3,…,zM},利用適應度函數(shù)確定最佳劃分,將訓練矢量聚類到每個胞腔中形成最終碼書為Y={y1,y2,y3,…,yN}。式(11)給出了類內(nèi)離散度J的求解方法:
式中:d(zi,yj)為胞腔i內(nèi)所有訓練矢量到其質(zhì)心的距離,ziεRj表示胞腔j內(nèi)的所有訓練矢量。
類間離散度是指碼書中各胞腔質(zhì)心間的距離,其值越大,說明收斂性能越好,碼書質(zhì)量越高,其計算公式如式(13)所示:
式中:yi和yj分別是指第i、j胞腔的質(zhì)心,T為轉(zhuǎn)置。
適應度函數(shù)采用類內(nèi)離散度的倒數(shù)表示,用f表示,如式(14)所示,c為一個調(diào)節(jié)常數(shù)。由適應度函數(shù)可知,類內(nèi)離散度越小,則適應度值越大,碼書質(zhì)量性能越好。
為了避免算法陷入局部最優(yōu)及過早收斂等問題,本文將引入柯西變異策略以改進算法的收斂速度和收斂精度等問題。
柯西變異公式如式(15)所示,其中CM 為柯西變異算子,rand 為均勻分布在(0,1)范圍內(nèi)的任意實數(shù)。
若粒子的種群規(guī)模為N,f()代表第t次迭代中第i個粒子的適應度表示第t次迭代中粒子群適應度的平均值,根據(jù)式(15)計算粒子群的聚集度δ,當f()距離偏差越大時,δ值越大,說明群多樣性越好;當f()距離偏差越小時,δ值則越小,說明群多樣性越差。
當δ 步驟1 算法初始化。從一段語音中按要求提取M個訓練矢量Z={z1,z2,z3,…,zM},其中,zi為k維矢量。將其隨機劃分聚類,得到初始碼書,每個碼書有N個碼字,將此步驟循環(huán)L次,生成L個初始碼書,作為粒子群中L個粒子的初始位置X={x1,x2,x3,…,xL},粒子的初始速度V={v1,v2,v3,…,vL}、個體極值Pi和全局極值Pg設置為0。 步驟2 參照式(1)和式(2)更新粒子速度和位置,計算并比較其適應值,記錄下此次循環(huán)中所有粒子經(jīng)歷的最好位置及其適應值,與全局極值Pg相比較,若適應度小于Pg時的適應度,則更新全局極值Pg;同時,記錄此次循環(huán)中每個粒子所經(jīng)歷的最好位置及其適應值,將其與自身個體極值Pi相比較,若適應值小于自身Pi所對應的適應值,則更新該粒子的個體極值Pi,更新公式參照式(3)和式(4)。 步驟3 計算粒子群的聚集度δ和柯西變異算子CM,比較兩者大小,當δ 步驟4 根據(jù)最近鄰劃分原則,以粒子的更新位置為質(zhì)心,重新將訓練矢量進行劃分聚類。聚類完成后,根據(jù)聚類結(jié)果更新確定新的質(zhì)心,形成新的碼書,計算類間離散度。 步驟5 當算法達到最大迭代次數(shù)或最大閾值要求時,算法結(jié)束,比較類間離散度,輸出最優(yōu)碼書,否則,t=t+1,轉(zhuǎn)到步驟2。 本文在MATLAB 平臺上運行,選取一段長60 s的語音信號,其中選取40 s 語音作為訓練信號,20 s語音作為測試信號,采樣頻率FS 為8000 次/s,采樣精度NBITS 為16 位精度的采樣,幀長frame 為160,采樣點sample 為500。 算法中的參數(shù)選取源于經(jīng)驗值,粒子數(shù)N=30,c1、c2取值見式(8),慣性權(quán)重w的選取依據(jù)式(7),wmax取為0.9,wmin取為0.4。本文將從收斂性和重構(gòu)信號兩個方面對比兩種算法的不同。 如圖4 和圖5 所示,收斂性對比:在codebook 為512 時,迭代次數(shù)為20,此時,標準PSO 出現(xiàn)了過早收斂現(xiàn)象,且全局最優(yōu)值(距離)取值很大,收斂最小值為506.734 8,未達到收斂要求,而改進后的PSO 在迭代次數(shù)=20 時依然在遍歷搜索,未完成收斂,全局最優(yōu)值(距離)取值最小為49.594 9;在codebook 為1 024 時,迭代次數(shù)為31,兩個算法均呈現(xiàn)逐步收斂,但標準PSO 收斂最小值為43.577 7,而改進后的PSO 收斂最小值卻達到了0.832 4,接近原始信號提取的特征值。 圖4 codebook=512 時 圖5 codebook=1 024 時 重構(gòu)信號對比:通過標準PSO 和改進后的PSO兩個算法對原始信號進行量化重構(gòu),重構(gòu)后的信號波形如圖6 所示,標準PSO 重構(gòu)后的信號相對于原始信號丟了部分數(shù)據(jù),改進后的PSO 重構(gòu)后的信號雖然出現(xiàn)了雜波,但整體信號特征保留,同時,通過人的聽覺感知兩個信號的不同,標準PSO 重構(gòu)后的信號丟失了部分信息,導致聽起來邊界不清,內(nèi)容不易理解,而改進后的PSO 重構(gòu)后的信號雖出現(xiàn)“吱吱啦啦”的聲音,但語音內(nèi)容容易理解。 圖6 語音信號重構(gòu)對比 粒子群優(yōu)化算法是受鳥群覓食的啟發(fā)而提出的一種群智能優(yōu)化算法,常被用于解決多目標優(yōu)化問題。本文將粒子群算法用于語音信號識別中,為了提升信號識別質(zhì)量,提出一種柯西變異和粒子群聚集度混合擾動方法改進標準粒子群算法,實現(xiàn)當粒子群聚集度小于柯西變異算子時,則認為此時粒子群多樣性欠缺,通過變異當局最優(yōu)值擾動粒子聚類,避免粒子的過早收斂,增加全局遍歷性,實驗結(jié)果從兩個方面驗證了改進粒子群算法的性能,證明了其有效性和改善度。4 實驗結(jié)果
5 結(jié)論