張蔚



摘? 要:深度學習本質是一種經驗化的方法,伴隨計算機能力的提高,深度學習已可用于越來越多的實踐。本文探索了將深度學習(主要是一維CNN及RNN)用于空空導彈測試自動數據判讀的可行性。利用深度學習的相關特性,可以很好地實現判讀數據的特征工程,可一定程度避免人為提取數據特征進行判讀所帶來的不穩定性。
關鍵詞:深度學習;神經網絡;數據判讀
神經網絡的具體方法理論提出已久,但受制于硬件計算能力一直未得到較為廣泛的應用。近年來由于高并發計算能力的提高(比如將高性能GPU用于一般計算以及出現專用于人工智能高并發計算的芯片TPU)以及高并發計算社區的完善(比如NVIDIA公司所推出的CUDA和開源的OpenCL,徹底封裝了高并發計算的底層實現,其中CUDA還有非常完善的對于人工智能計算的支持),神經網絡的使用代價正在變得越來越可接受,而深度學習是一種多層次的神經網絡實現,通過一定量層次的增加,可以使網絡實現復雜度更高的邏輯,相應也增加了計算復雜度。
傳統上對于數據判讀的人工智能方法主要通過淺層的分類方法實現,比如SVM [1],其方法是在一個多維的特征空間中劃分出一個離不同分類樣本集合中的邊界上的分類樣本距離之和最小的一個超平面,是一種典型的二分類方法,在特征工程明確的前提下,這種分類的方法十分可靠。但在特征工程不明確時,這種方法則不具有穩定性,多數情況下判別的好壞完全取決于人工分類的好壞,更不用說在某些情況下,特征之間還存在一定的相關性。而神經網絡的方法淡化了提取特征的過程,如果簡單地理解即,輸入的特征完全取決于樣本所擁有的可能性,而樣本的可能性不會多于樣本在所有采樣點的組合,通過足夠量的數據去盡可能遍歷所有可能性,就可能去擬合一個網絡盡可能覆蓋樣本具有的特征。深度學習作為層次較多的神經網絡,因而可以實現一種類似人類的判讀效果,比如經典的由Yann LeCun實現的手寫數字的判讀,早期就被用于自動讀取郵政編碼,還有近年來熱門的卷積神經網絡對圖片分類的效果,基于循環神經網絡的機器翻譯及語音生成等[2],另外在航空航天的數據處理也已有相關的應用[3]。同時,測試數據的類型差別較大,比如對于周期的時鐘量如果只判斷頻率,對于電壓量如果只判斷某一階段的幅值,這些有明確特征工程的數據都不需要通過神經網絡實現判讀,而如果要關注比如時鐘頻率是否有相位突變,是否有不可接受的某些波動,對于電壓量關注其建立過程的曲線是否符合以往的一致性,還有一些無法歸納類型但體現產品工作的某一特征的測試曲線,以上種種,適合通過神經網絡的方法進行判讀。
1.深度學習對應的實現方法及其用于數據判讀適用性分析。
常用的深度學習方法包括以下幾種,其他網絡模型大多是以下幾種方法的變體,有些模型雖然有更好的驗證精度和最終測試結果,但也一定程度上提高了算法復雜度。
1.1 密集層(即Dense層或稱全連接層)深度學習網絡
較為簡單地神經網絡模型實現及訓練的一般方法如下:
1. 完成數據工程,將數據標準化,將數據隨機分為訓練集、驗證集以及測試集;
2. 先選取較為合適的網絡層次,網絡規模(即每一層所擁有的節點數量);
3. 隨機生成前向傳播矩陣,但不可為零,通常取值為0~1之間,否則進行反向傳遞的時候梯度無法計算;
4. 運用合適的激活函數(sigmod,ReLU,tanh,softmax等)計算前向傳播fp并得到預測值;
5. 根據實際值與預測值計算得到殘差,計算反向傳播bp,常用的bp計算方法是按照傳播矩陣貢獻系數所貢獻的誤差比例,得到每一層的誤差,依據最大梯度原則(即 ,其中δ為反向傳播殘差,σ為學習率),針對一層中的每個節點更新對應的傳播矩陣的每一行系數;
6. 將訓練集進行迭代計算,選取合適的輪次訓練網絡,使用驗證集對網絡參數進行驗證評估,調整網絡參數,包括網絡層次,網絡每一層節點數量,及訓練輪次數量。最后使用測試集對該網絡模型用于實際情況進行評估。
因此,按照上述方法,網絡訓練過程中并沒有人為的特征提取過程,但是該模型卻面臨兩個重要的問題,其一是輸入數據量不足或數據量分布過于集中于某一特征則導致網絡訓練成熟度不足,如果一味增加訓練輪次,則可能導致訓練出來的網絡過早擬合,即對訓練集的測試數據表現良好,對驗證集中未曾見過的數據表現不佳;其二是網絡層次增加導致的梯度消失問題,在需要表達足夠復雜的邏輯時,如果層次過多則網絡會變得無法訓練(雖然增加不同特征的數據能一定程度消除這種問題)。其本質矛盾是數據質量與網絡模型可訓練之間的矛盾。考慮導彈測試中一條比如1萬個采樣點的遙測數據,如果通過這種方式進行計算,則需求的數據量是遠多于1萬條的,這一點在實際測試中不可接受,因此通過一定的限制條件減小數據量是十分必要的。
1.2 卷積神經網絡(CNN)
因為完全的Dense層網絡連接數量過于龐大,且如果對數據的分布特性判斷不佳,選取的數據不夠具有代表性,那么最終訓練出的網絡除了過擬合的問題,還有可能導致一種意料之外的情況,比如對圖像的分類問題,有可能因為圖像噪聲導致網絡的錯誤分類。實際上噪聲所包含的信息對于分類并沒有意義。簡單的理解就是數據經常體現了一種局部特征,現實中收集到的數據也都有一定分布特征,這所有的錯誤情況既包含了局部的判錯情況,也包含了局部與局部之間,局部與整體的各種組合,因此不太可能把所有的錯誤情況樣本收集到輸入給網絡(現實中收集到的數據多數都是一般情況,這一點也符合概率)。所以就有了對網絡的學習范圍進行限制的方法,CNN就是這種思維具體實現。
CNN主要在圖像識別領域有廣泛應用,其構成的思想也與傳統上數字圖像處理中邊緣檢測,圖像分塊等的方法十分相似,即對圖像用卷積的方法與卷積核相關,突出特定頻率特征的響應。相比Dense層網絡,CNN沒有使用全連接,通過與圖像卷積的方法,輸出的卷積層的每個點實際上僅與輸入中這個點周圍一定范圍內的卷積塊有關,取決于卷積核的大小(一般是3×3或者5×5),這樣就大大減小了連接的密集度,而這樣使用地邏輯在于圖像中一個像素點與它周圍的點是有很大的相關性的,這一點對于導彈的測試數據判讀也是同理。 輸入的樣本深度通常為1或者3(表示顏色通道),一次卷積后輸出卻是多深度的,這個深度取決于卷積核,其體現了卷積核所能擁有的模式數量,因為卷積過程就是凸顯圖像或數據中存在卷積核對應的模式,最終這些模式的存在導致分類,神經網絡所需要做的就是訓練出這一模式。在前面的卷積層則表現了邊緣這種高頻分量,對于導彈測試數據的判讀來說則是類似上升下降沿的數據點。求得卷積并將相同的模式合并后,需要對該層輸出進行激活得到這一層最終的輸出,CNN中卷積層所使用的通常為relu函數(其相對于sigmod函數收斂快且十分易于計算,但不適合最終分類的激活,因為它沒有上確界,所以僅適用于中間層的激活)。
經過卷積后進行了一步池化(Pooling)操作(即數據集中化的意思),通常方法有均值池化(Avg-Pooling)和最大池化(Max-Pooling),示例如下:
Pooling層存在的意義在于進一步減少最終輸出Dense層的元素數量,因為元素數量減少,相應的整個網絡連接的數量也減少了,不會因為數據輸入不足使網絡無法訓練。其邏輯在于相對的高頻分量如邊緣所體現的模式,在組合后可以體現小的圖像分塊的模式,即由邊緣構成細節,由細節構成局部,由局部構成小的圖塊。
卷積神經網絡用于圖像識別所采用的池化方法通常為最大池化,相對于均值池化來說,最大池化更容易通過激活,對于高頻的比如邊緣的特性,如果使用均值池化,其特征就會變得不明顯。
以一個典型的網絡(比如LeNet)為例,其層次劃分的示意圖如下:
方法基本等同于純Dense層網絡,只不過CNN的傳播矩陣是由卷積核構成的,而在其最后兩層網絡則使用了Dense層,僅因為最后兩層的數據量已足夠小,且Conv層的每個圖像元素(Feature Map)的尺寸也已足夠小,不適合進行卷積(因為卷積是強化被卷積圖中符合卷積層特征的圖塊,經過多次池化,每個像素的關聯已經足夠小了,與其增加卷積核的數量把每一種可能包含進去,不如直接密集層連接)。則將最后一層Conv層的Feature Map按照每個像素展開為Dense層的每一個元素,然后進行最后一步傳播,使元素數量較小到適合判別的范圍。其判別結果殘差的反向傳播與純Dense網絡同理,Dense層網絡之間,Pooling層到Conv層的反向傳播均使用最大梯度原則,Conv層到Pooling層的殘差的反向傳播則通過直接映射的方式將殘差均分到原有的Conv層。
對于導彈測試數據判斷來說,測試數據可以看作是包含特征的一維圖像,數據圖像同樣具有相近點之間的相關性,因此可以考慮CNN的方法以降低輸入數據的樣本量。由于測試數據的極短的時間內(比如一個數據點)的突變很難體現其特征,而往往代表信號受到干擾(在不同環境下的測試數據通過遙測回傳時有可能受到干擾),因此對于一維CNN用于測試數據判斷時,其卷積核的尺度可以相應地變大,卷積核的深度相比二維圖像也應該相應減少,因為圖像的細節模式通過旋轉等二維的變化并不會發生改變,因此不同的卷積核對于二維圖像來說,可以只是不同角度的結果,而測試數據只有一個維度,如果選取的卷積核深度較大(即卷積核的模式較多),會對測試數據的分布質量帶來不必要的要求,或者造成最終結果過擬合(這一點也可以通過驗證集試驗得到,但考慮一個較為合理的值可以避免過多地通過驗證集結果調整網絡參數,以此避免不必要的計算量)。
考慮實際測試中獲得的導彈測試數據分布狀態,通常最終產品狀態的測試結果,正常的測試結果分布較多,異常的結果少,且個例特點較為集中,因此應采用方法降低訓練網絡的過擬合。參考CNN用于圖像分類中的方法,對于圖像分類來說,其樣本量相對卷積核可選的模式來說還是較少的,因此也存在類似的問題,對于這種問題,CNN的處理方式通常包括Dropout方法和圖像的數據增強。Dropout具體實現方法即在中間層每次relu激活后,隨機對其少部分元素清零,即部分保持未激活狀態,進行網絡訓練,在訓練過程中相當于引入了隨機的誤差,也相當于梯度下降的時候會隨機地向一個靠近最大梯度的方向下降,而不是直接向最大梯度方向下降,不容易使梯度下降落入局部殘差最小的區間,以這種方法即使增加訓練的輪次,也不會使網絡過早的擬合。圖像的數據增強則是依據圖像的特性,放大縮小、拉伸、旋轉等操作不會從根本上改變圖像的識別,因此對輸入樣本進行此類操作可以增加有效樣本的數量。相對于導彈的測試數據判讀也是同理,對于局部細節來說,用Dropout方法引入隨機誤差,即表示了一定程度的隨機細節干擾也是可以接受的,這一點也符合實際判讀的數據特征。對于數據增強的方法,考慮到最終產品因為問題在單元模塊層級已大量篩查,可用數據大多為正常的測試結果,而數據判讀的重點則是尋找異常的結果,因此除了對異常數據進行時間尺度上的位移變換作為新的樣本,也可依據導彈測試的工作邏輯生成一些合適的異常樣本作為輸入。
1.3 循環神經網絡(RNN)
循環神經網絡(RNN)是一種可以構建時間尺度上聯系的神經網絡,因此適用于基于上下文環境的數據判讀,生成數據、數據預測等[4],適合于處理層次化的數據[5],比如類似于自然語言的翻譯,對未來一段時間溫度曲線的判斷等,可以說RNN是一種適合于處理序列數據的神經網絡結構[6]。對于導彈的測試數據判讀來說,由于一次測試數據中,不同的數據項目之間可以有存在相關性的情況,比如在某條數據發生狀態變化的時刻,另一條數據在延后一定時間后應發生相應的狀態變化,或取某一特定值才體現正確值。對于這種情況,如果只是對一條數據的一個項目單獨判讀,則會可能導致對于相對延時的錯誤判讀。RNN則可以一定程度上解決這種問題。相比于一般的神經網絡,其激活前的輸入除了包含經過傳播矩陣的上一層輸入及偏置值,還包括來自上一時刻的狀態傳播,具體如下:
其中, 代表偏置。
因此如何確定前置狀態值state的取值是較為重要的,如果state狀態只與前一時刻相關聯,構成的網絡較為簡單,同時有可能導致梯度消失問題,因此通常使用的RNN方法為長短期記憶(LSTM)方法[7]。
其前向傳播方法示意如下
其中,隱藏層可以為不止一層,隱藏層中的單一單元示意如下,其輸入包含三項:輸入向量樣本、上一時間序列的輸出結果向量、上一時間的輸出狀態向量。
LSTM的網絡中包含三個門限即輸入門、遺忘門、輸出門。
圖中左下為輸入門,sigmod函數取值在0到1之間,圖中的×也并非表示向量內積或叉積,而是向量的每一個元素和門限向量的同一位置元素相乘組成一個新的向量,因此輸入門計算得到的向量就如同一個門限控制輸入成分向后傳遞的量,決定輸入門限的包括上一次時間序列的輸出結果,上一次時間序列的攜帶狀態及本次的輸入。其中: