趙一
(廣東海洋大學數學與計算機學院 廣東省湛江市 524088)
因傳統的神經網絡,如卷積神經網絡(Convolutional Neural Networks, CNN) 輸入和輸出都是互相獨立的,所以需要使用特殊的方法把輸入和輸出緊密結合。而循環神經網絡(Recurrent Neural Network, RNN)是需要之前的序列信息才能夠使其任務繼續進行下去的神經網絡,所有的RNN 都具有一種重復神經網絡模塊的鏈式結構。在標準RNN 神經網絡模型中,這個重復的結構模塊以一種非常簡單的結構,即輸入層、隱藏層和輸出層。RNN 網絡只有一個單元,其更新過程是不停地乘以同一套權重,故而會發生梯度消失現象和梯度爆炸現象[1]。而LSTM 方法,是為了解決長期以來問題而專門設計出來的,LSTM 同樣是一種鏈式結構,但是它不同于單一神經網絡層,因為LSTM 方法中重復的模塊擁有一個不同的結構,其有四個特殊的構建組成,它們分別是單元狀態、遺忘門、輸入門、輸出門。LSTM 方法中網絡改進思路是針對RNN 隱藏層單一結構對短期輸入信息非常敏感的原因進行了改進,LSTM 方法是在RNN 網絡中增加了一個元胞狀態,使得經過其的輸入信息能夠選擇性的長期保存。LSTM 方法的關鍵問題有三個,即第一控制長期狀態,第二控制即時狀態輸入到長期狀態中,第三控制是否把長期狀態作為當前輸出結果。
因此,我們研究團隊提出了一種自適應度調節的遺傳算法優化方法,該方法把需要傳入LSTM 模型中的全連接層數和神經元個數作為染色體上的基因,代入到改進的遺傳算法中進行排序選擇,本文改進的排序法針對傳統的排序法只度量各個個體之間的優越次序,而并未度量各個個體的分散程度,通過引入BA 網絡的介性中心性公式對個體進行空間映射擁擠距離算子計算,因為中介中心性是一個結點擔當任意其他兩個結點的最短路徑的“橋梁”,所以一個結點充當“中介”的次數越多,則它的中介中心性就越大。通過該屬性,我們最終找出遺傳算法中的重要個體,算出其距離最小值和最大值,選擇時優先選擇擁擠距離大的,從而跳出局部最優解,得出全局最(近)優解,從而解決了預測準確率低的問題,使其準確率提高到95%
自從LSTM 方法1997 年誕生以來,研究者多集中在改進其記憶單元,最早的改進由Gers & Schmidhuber[2]在2000年提出,其方法增加了“peephole connections”,即每個門都可以“內視”其單元狀態。其后由Cho 等人[3]提出了一種LSTM 方法變種,即取消了輸入門,將新信息加入的多少與舊狀態保留的多少設為互補的兩個值(其和為1),即只有當需要加入新信息時,我們才會去遺忘;只有當需要遺忘時,我們才會加入新信息。之后比較知名的便是Yao 等人[4]在2015 年提出來Depth Gated RNN 模型,Koutnik[5]等人提出Clockwork RNN。但是Greff和Athiwaratkun[6-7]等人對上述幾種變種方法進行了初步比較,發現其在相同數據集上運行結果變化不大。
國內研究學者也提出了類似的改進LSTM 的方案,如文獻[8]的作者提出一種改進的螢火蟲算法,引入種群多樣性特征,作者希望通過種群多樣性指數來調節模型的位置更新,并引入自適應步長因子,改進其迭代步長,通過文獻實驗,表明了改進的螢火蟲算法具有較好的搜索性能,文章將改進的螢火蟲算法與LSTM 結合,構建了一種流量預測模型,利用了LSTM 對時間序列的歷史記憶性以及神經網絡對復雜非線性系統的擬合性,學習和記憶網絡流量的特征,能更好的選擇LSTM 全連接層的參數,所以可利用該模型針對未來時刻流量序列進行預測。但是上述文獻的作者并沒有考慮螢火蟲算法的缺陷,螢火蟲算法最早由Yang[9]于2008 年提出。在算法中,螢火蟲個體通過感知自己可感知范圍內其他螢火蟲的光亮,來確認其他個體的存在和吸引力,從而映射到多維空間下的最優解搜索過程。但是光信號的強度會伴隨傳播而衰減,則對于一個螢火蟲個體,它的光信號只能被小范圍的其他個體所感知。標準的螢火蟲算法有三個基本步驟,分別是:初始化、位置更新、亮度更新。在初始化階段,需設置各個參數,為群體中選中的單個螢火蟲定好位置,并將位置向量代入目標函數,計算出螢火蟲的絕對亮度。在位置更新階段,亮度大的螢火蟲吸引亮度小的螢火蟲向自身靠近完成位置更新。位置更新完成后,所有個體抵達新的位置,將位置向量代入目標函數,實現亮度的更新。但是遺傳學算法會隨機設置一個最大迭代次數,用來控制算法的執行時長,正是因為迭代次數的隨機性而導致求最優解的不穩定,如果最大迭代次數設置過小,則導致算法提前結束,得到局部最優解;反之,如果最大迭代次數設置過大,算法收斂速度過慢。因此國外團隊使用改進的遺傳算法來解決非線性極值的局部最優解問題,他們著力改進遺傳算法中的“交叉”和“變異”步驟,使其跳出局部最優尋找全局最優。其中文獻[10]使用Gaussian 分布的來實現隨機變異,其后,文獻[11]使用Cauchy 分布的兩翼寬大特性實現更大范圍的變異,以便找到全局最優解。
實驗中我們把全連接層數設為dense,LSTM 模型三個參數設置為input, units, sequences, input 表示傳進LSTM層的輸入,units 表示LSTM 模型中有多少個神經元,sequences 表示判斷是否為LSTM 最后一層,如果不是最后一層,則都需要保留所有輸出以傳入下一層LSTM。在設計網絡時,因設定的每層神經元代表一個學習到的中間特征(即幾個權值的組合),網絡所有神經元共同作用來表征輸入數據的特定屬性(如圖像分類中,表征所屬類別)。當相對于網絡的復雜程度(即網絡的表達能力、擬合能力)而數據量過小時,出現過擬合,顯然此時神經元表示的特征相互之間存在許多關聯和冗余。而在LSTM 模型中引入dropout 層作用是減少中間特征的數量,從而減少冗余,即增加每層各個特征之間的正交性。在原來的NSGA(帶精英策略的非支配排序遺傳算法)中,人們采用共享函數來確保多樣性,但需要共享半徑。為了解決這個問題,我們提出了復雜網絡的擁擠度概念:把種群看成是一個復雜網絡,其每個給定點的周圍個體密度用id 表示。它指出了在個體i 周圍包含個體i 本身但不包含其他個體的最小的長方形。中介中心性指的是一個結點擔任其它兩個結點之間最短路的橋梁的次數,如果個體介性中心性越大,則該個體是一個擁擠度越大。通過介性中心性選擇優秀個體組成新的父代,接著從第二代開始,將父代種群與子代種群結合,進行快速非支配排序,同時對每一個非支配層中的個體進行介性中心性計算篩選出重要的個體,選擇適合的個體組成新的父代種群。
具體模型如圖1 所示。

圖1:改進的遺傳算法-LSTM 模型框架
在改進NSGA-II 算法中,支配個數np,其代表在可行解空間中可以支配個體p 的所有個體的數量。首先,設初始種群規模為N,通過非支配排序的三個步驟選擇、交叉、變異得到第一代種群;第二步,將父代種群與子代種群結合,并對其快速非支配排序,同時對非支配層中的個體進行介性中心性計算,按照重要性進行排序,選取合適的個體組成新的父代種群。最后,通過遺傳算法的基本操作產生新的子代種群:依此類推,直到滿足程序結束的條件。如表1 所示。

表1:改進NSGA-II 算法
(1)首先,初始化一個規模為N 的種群,通過遺傳算法的選擇、交叉、變異三個基本操作獲到第一代子代種群;
(2)其次,從N-1 代開始,將其父代種群與子代種群合并,進行快速非支配排序,同時對每個非支配層中的個體進行介性中心性計算,根據非支配關系以及個體的介性中心性選取合適的個體組成新的父代種群;
(3)最后,通過遺傳算法的基本操作產生新的子代種群。
支配個數np。該量是在可行解空間中可以支配個體p 的所有個體的數量。被支配個體集合SP。該量是可行解空間中所有被個體p 支配的個體組成的集合。
介性中心性指的是一個結點擔任其它兩個結點之間最短路的橋梁的次數。一個結點充當“中介”的次數越高,它的中介中心度就越大。如果要考慮標準化的問題,可以用一個結點承擔最短路橋梁的次數除以所有的路徑數量。介性中心性算法步驟如表2 所示。

表2:介性中心性算法
首先,我們把需要優化的參數(包括LSTM 層數和全鏈接層數及每層的神經元個數)寫到列表num 中,然后將σit(i)作為取值依據,選取最短路徑條數排前5、前10、前15 和前20 的節點代入遺傳算法進行染色體篩選,把需要傳入文件列表num 當成染色體,需要優化的參數映射為染色體上的基因。

第一步:算遺忘信息,稱為遺忘門。計算公式如下:

第二步:決定單元狀態中存儲的信息,it表示要留下的信息, 表示遺忘權重。

利用遺忘門和輸入門,可以計算出新的單元狀態,計算公式如下:

最后輸出經過ReLU 激活,計算公式如下:

LSTM 與RNN 不同,在于狀態通過累加的方式計算:

在這一章中,我們進行了一系列的實驗對比來評估所提出的方法性能。所有實驗都是用Python 來實現的,所用電腦的CPU是 2.6GHz Intel(R) Core(TM) i7 CPU 和 16GB 內存。
實驗訓練集和測試集,我們選用mnist 手寫數據集,該數據集包含了0-9 的手寫數字。實驗首先創建deep_learning.py 文件,其中包含LSTM 層函數create_lstm(inputs, units,sequences)和創建全鏈接層create_dense(input, units)。由于傳統的遺傳算法,染色體上的基因取值范圍是相同的,但在LSTM 網絡中,由于基因的長度不一,所以在實驗中,我們把每條染色體設置為相同的長度。具體解決辦法:1.將每條染色體設置為相同的長度(本題來說,因為LSTM 層與全連接層層數最多三層,加上最前面兩個表示層數的基因,故每條染色體上有3+3+2=8 個基因),達不到長度要求的后面補零;2.先設置前面兩個基因,令其范圍分別在一到三之間,然后根據這兩個基因確定后面關于每層神經元個數的基因;3.對于交叉函數的修改,首先確定取出的兩條染色體(設為a 染色體和b 染色體)上需要交換的位置,然后遍歷兩條染色體在這些位置的基因,如果任一染色體上,此位置上的基因為0,則取消此位置的交換。ReLU 函數,該函數的表達式:

經過實驗表明,ReLU 函數對于隨機梯度下降的收斂有加速作用。其最大的優勢求導簡單,相對于sigmoid 和tanh的運算量,ReLU 函數可認為幾乎不存在計算量,因此對神經網絡的訓練有很好的加速作用。一般經驗是決定dropout之前,需要先判斷是否模型過擬合即dropout=0。欠擬合:嘗試調整模型的結構,暫時忽略下面步驟。dropout 設置成0.4-0.6 之間,再次訓練得到模型的一些指標。如果過擬合明顯好轉,但指標也下降明顯,可以嘗試減少dropout(0.2)如果過擬合還是嚴重,增加dropout(0.2)重復上面的步驟多次,就可以找到理想的dropout 值了。在優化神經網絡上,用常規的遺傳算法不易實現原因如下:傳統的遺傳算法中每條染色體的長度相同,但是優化LSTM 網絡時染色體的長度會因為層數的不同而不同,比如:a 染色體有一層LSTM層和一層全連接層,則這個染色體上共有6 個基因(兩個代表層數,兩個代表神經元個數)b 染色體有二層LSTM 層和二層全連接層,則這個染色體上共有6 個基因(兩個代表層數,四個代表每層的神經元個數)。
采用兩個指標:準確率,適應度來評估手寫體預測的質量。
Precision 和fitness 被定義為:

其中 TP 是正類(true positives)的數量,i.e.,即同一領域中的任意兩個服務是否被正確地分配給同一個類簇;FP是負類(false positives)的數量, i.e., 分配給同一個類簇的任何兩個服務實際上屬于不同的領域;FN 是正類判定為負類(false negatives)的數量, i.e., 同一領域中的任何兩個服務都分配給不同的類簇。

圖3:不同子代下兩種方法的適應度
為了滿足適應度取值非負的要求,則采用下面方法將目標函數f(x)轉換為個體適應度函數fitness(x),fitness 被定義為:

Cmax是一個適當的相對比較大的值,預先指定一個較大的數(進化到當前為止的最大目標函數)。注意,Precision和fitness 是正度量,也就是說,較高的值表示更好的服務聚類結果;而較低的熵值則表示更好的服務聚類結果。
在這一章節中,我們的實驗報告給出兩組評估結果:
(1)種群的代數對改進遺傳算法LSTM 模型適應度的影響;
(2)四種服務聚類方法的比較。
4.3.1 fitness 值的影響
在我們提出的方法中,適應度越大說明。R 值會影響訓練主題模型的質量,進而影響服務聚類的性能。為了評估每一代對適應度的影響,我們基于不同個體子代值對mnist 數據集進行識別,評比在不同子代對數據集識別的結果優劣,從1 到12 不同子代中選取最優的fitness。
圖 2-3 給出了不同子代下的手寫體識別的準確率。可以看出,本文改進遺傳算法結合LSTM 模型基于在第五代個體與第9 代個體上其適應度較強,優于一般遺傳算法LSTM模型約13%;其在第四代個體和第9 代個體上其對手寫數字識別與預測較為準確,其準確率優于一般遺傳算法LSTM模型12%。TABLE 3. 四種方法的評估結果。

圖2:不同子代下兩種方法的準確率
結果表明,我們在下面的實驗中應該選用6 代和7 代來進行模型訓練是可以得到較好的手寫體識別效果。
實驗數據表明,本文改進遺傳算法結合LSTM 模型基于在第五代個體與第9 代個體上其適應度較強,優于一般遺傳算法LSTM 模型約13%;其在第四代個體和第9 代個體上其對手寫數字識別與預測較為準確,其準確率優于一般遺傳算法LSTM 模型12%。TABLE 3. 四種方法的評估結果。