李政清,穆繼亮,莫小琴
(1. 三亞學院理工學院,海南 三亞 570200;2. 中北大學儀器與電子學院,山西 太原 030000)
在工業(yè)生產(chǎn)中,大部分數(shù)據(jù)都具有時序性,其排列順序包含著重要的信息。對時序數(shù)據(jù)進行分析時,常常會有一些特殊的數(shù)據(jù)與其它 數(shù)據(jù)呈現(xiàn)的波動規(guī)律不同,這些數(shù)據(jù)被稱為異常點,異常點通常是由于系統(tǒng)誤差和隨機誤差造成的。異常點會直接影響到數(shù)據(jù)預測的結(jié)果,因此對異常點的識別與檢測非常重要。目前對異常點的判別方法主要有[1-4]:統(tǒng)計方法、距離方法、聚類方法、密度方法和極值理論方法等。時序數(shù)據(jù)主要通過簡潔的方式表示數(shù)據(jù)的基本特征,因此設(shè)計出合適的算法加快數(shù)據(jù)處理和識別數(shù)據(jù)處理異常點具有重要的意義。
文獻[5]使用多模態(tài)數(shù)據(jù)流技術(shù)和大數(shù)據(jù)流技術(shù)分別對異常和濫用進行檢測,由模糊規(guī)則對異常和濫用的輸出結(jié)果執(zhí)行最后的檢測,并采用特征向量對數(shù)據(jù)流的實時運行狀態(tài)進行描述,該方法能夠較全面的反映數(shù)據(jù)流的基本特征,具有良好的擴展性,但沒有對多模態(tài)數(shù)據(jù)流加以考慮。文獻[6]對實例進行處理得出線性組合關(guān)系,并求出實例的鄰近關(guān)系矩陣,為了自動選擇鄰近關(guān)系及算法中的參數(shù),采用譜聚類方法對數(shù)據(jù)的異常點進行識別,將異常點在11個真實數(shù)據(jù)集上進行比較,結(jié)果表明該方法具有較高的穩(wěn)定性,但計算過程耗時較長。文獻[7]提出統(tǒng)計的異常點檢測方法,對有增長率的時間序列數(shù)據(jù)進行預處理,通過正態(tài)分布概率密度函數(shù)對置信區(qū)間外的異常點進行修正,并采用壓縮變換函數(shù)防止對異常點的過糾正處理,該方法的預測精度具有明顯的提升,但還需要對潛在的異常點做進一步的判斷。
基于以上研究,針對時序數(shù)據(jù)處理異常點識別過程卷積計算復雜度較高、模型占用空間大及運行速度慢等問題,本文提出基于時序CNN的FPGA數(shù)據(jù)處理異常點識別方法。
時序數(shù)據(jù)的表示形式不統(tǒng)一,不利于直接應用卷積神經(jīng)網(wǎng)絡,因此需要對時序數(shù)據(jù)進行特征提取。在數(shù)據(jù)采集和處理過程中,由于設(shè)備、系統(tǒng)和外部環(huán)境等原因可能造成數(shù)據(jù)發(fā)生錯誤,因此實際中的數(shù)據(jù)不僅包含有用的數(shù)據(jù),還包含異常的數(shù)據(jù)。
數(shù)據(jù)異常點會造成數(shù)據(jù)質(zhì)量下降,影響數(shù)據(jù)的一致性與可靠性。根據(jù)錯誤數(shù)據(jù)的來源,可將錯誤數(shù)據(jù)分為噪聲錯誤和缺失錯誤兩種類型。根據(jù)噪聲錯誤中噪聲的分布情況,可將其分成若干種類的噪聲,如高斯、泊松、散斑、椒鹽噪聲等噪聲的一種。缺失數(shù)據(jù)一般分為數(shù)據(jù)片段缺失和部分值缺失兩種情況。由于實際中噪聲錯誤和缺失錯誤比較復雜,若使用添錯誤的加方法,很容易將錯誤繼續(xù)添加到數(shù)據(jù)中,因此本文從以下幾方面加以考慮。
高斯噪聲:在通信過程中,通信信道很容易受到自然源的寬帶高斯噪聲影響,因此在數(shù)據(jù)采集過程中,由于不良的光照、透射和高溫等均會導致傳感器上產(chǎn)生高斯噪聲,高斯會隨著灰階的概率密度函數(shù)發(fā)生改變,公式可表示為
(1)
其中,a表示灰階;σ表示標準差;μ表示均值。
泊松噪聲:一般在亮度較低或高倍電子放大電路中存在泊松噪聲,泊松分布屬于離散概率分布,公式可表示為
(2)
散斑噪聲:一般在有源雷達或孔徑雷達周圍存在散斑噪聲,它是一種顆粒狀的干擾,主要影響醫(yī)學超聲和光學掃描的質(zhì)量,散斑噪聲是一種乘性噪聲,公式可表示為
ρspe=bimag+n*bimag
(3)
其中,n表示指定均值和方差的均值噪聲。
椒鹽噪聲:椒鹽噪聲通常由圖像信號中尖銳的干擾造成的,通過-1、0、1表示稀疏出現(xiàn)的黑白雜點,其可以模擬數(shù)據(jù)中的隨機錯誤。
數(shù)據(jù)片段缺失:每段數(shù)據(jù)均由若干數(shù)組組成,可以隨機刪除數(shù)據(jù)中的某段,在數(shù)據(jù)中添加數(shù)據(jù)片段缺失錯誤。首先確定需要添加缺失錯誤的起始位置和終止位置,然后在起始到終止部分的數(shù)組中添加錯誤。
部分值缺失:在錄入信息的過程中,經(jīng)常出現(xiàn)一些數(shù)據(jù)缺失的情況,因此通過隨機刪除數(shù)據(jù)中某些值的方式添加錯誤。首先通過一個變量確定是否對當前的數(shù)據(jù)添加錯誤,若需要添加,隨機的確定添加缺失錯誤的起始位置和終止位置,對起始到終止部分的數(shù)據(jù)添加錯誤;若不需要,則不對該段數(shù)據(jù)處理。
由于數(shù)據(jù)的采樣頻率不同,為了保證不同數(shù)據(jù)關(guān)聯(lián)的有效性,需要對各個數(shù)據(jù)進行對齊處理,并提取出數(shù)據(jù)的特征。對于各種類型的數(shù)據(jù)樣本,將其轉(zhuǎn)化為可通過樞軸模態(tài)的時間戳表示形式,對樣本應用合并函數(shù)collapse functions進行處理,從而使所有數(shù)據(jù)具有相同長度。在collapse functions函數(shù)處理過程中,會舍棄時間間隔較小的數(shù)據(jù)序列。首先取出文本中的各個數(shù)據(jù),然后將得到的數(shù)據(jù)進行對齊保存data[i],data[i]表示對齊數(shù)據(jù)中的第i個單詞。通過這樣的處理方式,可以清楚的知道每個數(shù)據(jù)中的單詞個數(shù)。
原始數(shù)據(jù)信息量較大,若進行直接計算會占用大量的存儲空間,且大量的數(shù)據(jù)并非都是有用的,導致訓練模型難以收斂,因此使用GloVe方法對原始數(shù)據(jù)中含有明顯特征的數(shù)據(jù)淺層特征進行提取。GloVe算法中融入了先驗統(tǒng)計信息,不僅可以提高模型的訓練速度,還能控制單詞的權(quán)重,目標函數(shù)用公式可表示為
(4)
其中,ei和ej分別表示單詞i和j對應的詞向量;xij表示單詞j在單詞i中出現(xiàn)的次數(shù)和;gi和gj表示偏置項;f(xij)表示修正函數(shù)。
在模型訓練過程中,對卷積神經(jīng)網(wǎng)絡預處理可以提高運算速度,有利于模型的定點量化。卷積神經(jīng)網(wǎng)絡由輸入層、卷積層、激活層和全連接層組成,卷積計算實際上是數(shù)據(jù)乘積后的累加操作,公式可表示為
(5)
(6)
其中,β表示縮放因子;μ表示均值;σ2表示方差;χ表示較小的正數(shù);δ表示偏置。歸一化層的增加對數(shù)據(jù)訓練起到積極作用,但多一層的運算,在一定程度上會降低運算速率,因此將歸一化層的參數(shù)合并到卷積層的權(quán)值參數(shù)中,合并后卷積計算公式可表示為
(7)
經(jīng)過變換后,卷積計算在每次計算過程中都會減少開方和除法的運算操作,可大大提高卷積的運算速率。對激活層采用ReLU函數(shù)進行處理,公式表示為
(8)
在FPGA中浮點運算相比定點運算要耗費更多的時間,不同CNN模型的權(quán)值在零點兩側(cè)呈對稱分布,不同卷積層的權(quán)值具有動態(tài)性,若對其進行定點量化[9],將CNN模型中所有層的參數(shù)量化為同一范圍,會造成較為嚴重的精度損失,因此采用動態(tài)指數(shù)定點方式對參數(shù)進行量化。將每層參數(shù)分到Arr數(shù)組中,且每組中小數(shù)部分的位數(shù)是相同的,不同組間有差異。將每個網(wǎng)絡層分為輸入、權(quán)重和輸出三組,方便覆蓋每層參數(shù)的動態(tài)范圍。動態(tài)定點量化計算公式可表示為
(9)
由于輸入層每次傳入的數(shù)據(jù)不一樣,每層輸出的差異較大,不能確定輸入的量化范圍,為了減少計算量、保證精度,本文采用散度計算輸入?yún)?shù)定點化的尺度。首選構(gòu)建數(shù)據(jù)和定點數(shù)的映射關(guān)系,設(shè)置一個閾值H,通過閾值與定點數(shù)的最大值計算輸入尺度Sin。在選擇閾值和尺度時盡量減少數(shù)據(jù)丟失,可設(shè)置矯正數(shù)據(jù)集對輸入尺度進行選擇,通過計算最小化散度確定最佳尺度,最小化散度用公式可表示為
(10)
其中,φ[x]和φ[x]表示離散概率分布。當散度為最小值時,可以求出閾值H,進而求出每層參數(shù)的尺度Sin,公式可表示為
(11)
在CNN模型計算中,卷積層的輸出由多個嵌套循環(huán)卷積組成,導致卷積層計算量大、耗時多,而這種情況非常適合將CNN算法映射到FPGA中實現(xiàn)硬件加速。FPGA框架主要有CNN訓練參數(shù)和硬件約束參數(shù)兩組輸入?yún)?shù),主要包含映射階段和實現(xiàn)階段。在映射階段,F(xiàn)PGA框架將CNN訓練結(jié)果切分成若干細粒度子圖,并將其映射到FPGA集群的各個節(jié)點上。在實現(xiàn)階段FPGA的RTL代碼生成器根據(jù)映射階段產(chǎn)生的參數(shù)配置文件為FPGA節(jié)點建立加速器代碼。
FPGA框架利用CNN訓練結(jié)果對若干卷積層特征進行顯式劃分,將算法簡化到可以在多項式的時間要求內(nèi)求解完畢。FPGA算子圖切分分為粗粒度切分和細粒度切分兩個步驟。
(12)
大規(guī)模集群:卷積引擎的數(shù)量為Neng_i,卷積引擎的最大性能為Per(Neng_i),那么卷積引擎的需求和系統(tǒng)處理能力用公式可表示為
(13)
在FPGA集群中,一部分卷積引擎和緩存器可分別采用硬核單元(θNeng_i)和(?Bufi)構(gòu)建,另一部分卷積引擎和緩存器可分別采用軟核單元((1-θ)Neng_i)和((1-?)Bufi)構(gòu)建,F(xiàn)PGA的硬件約束條件用公式可表示為:
(14)
其中,f2,…f5表示返回對應模塊所占用邏輯資源的個數(shù)。
小規(guī)模集群:為了使所有的CNN訓練加速器都存入小規(guī)模集群中,采用模型參數(shù)均衡方法,目標函數(shù)最小化存儲需求用公式可表示為
Nee=max(f6(?iBufi)+f7(?iBufi,(1-?)Bufi))
(15)
其中,f6和f7表示返回對應模塊所占用邏輯資源的個數(shù)。采用模型參數(shù)均衡方法可以將最后幾層FPGA所需的模型參數(shù)存儲到前幾層的遠程FPGA上,充分利用前幾層FPGA多余空間存儲器,對于CNN模型的所有卷積層,僅需使用FPGA片上存儲器即可。
為了驗證基于時序CNN的FPGA數(shù)據(jù)處理異常點識別方法的有效性,本文選擇C語言編寫程序在FPGA上實現(xiàn)數(shù)據(jù)異常點識別的加速計算,選擇格式為PascalVOC的人臉數(shù)據(jù)集進行實驗。人臉數(shù)據(jù)集包含2000張圖像數(shù)據(jù),隨機選取1500張作為訓練集,剩余500張作為測試集,CNN模型為15層的卷積網(wǎng)絡。
保持每層輸入特征值位寬不變的情況下,對權(quán)值定點量化,驗證人臉數(shù)據(jù)集每類平均準確率值隨量化位寬的變化情況,同時驗證平均準確率、精度和召回率隨量化位寬的變化情況,實驗結(jié)果如圖1所示。
a.不同類別平均準確率變化
b.平均準確率、精度、召回率變化
圖1 權(quán)值定點化結(jié)果
從圖中可以看出,本文方法對權(quán)值定點化具有較好的魯棒性,當權(quán)值參數(shù)壓縮到8bit時,壓縮率比較大,數(shù)據(jù)精度和平均準確率損失較小,說明本文方法可以充分利用FPGA資源,高效讀取數(shù)據(jù),可充分識別數(shù)據(jù)處理中的異常點。
提取量化后的模型參數(shù),使用C語言搭建網(wǎng)絡模型后,輸入量化后的人臉數(shù)據(jù)訓練集,將真生成的文件導入開發(fā)板上,輸入數(shù)據(jù)進行驗證,得到加速器SoC各個資源的利用情況如表1所示。
表1 加速器SoC各個資源利用情況
從表中可以看出,處理器與加速器在工作頻率為300MHz下,完成單張圖片數(shù)據(jù)所需要的推理時間為118.5ms,與其它FPGA的實現(xiàn)方法相比,在能效和峰值性能上有較大的提升。
本文提出一種基于時序CNN的FPGA數(shù)據(jù)處理異常點識別方法,設(shè)計了卷積計算策略,通過C語言編寫程序在FPGA上實現(xiàn)數(shù)據(jù)異常點識別,選擇人臉數(shù)據(jù)集進行實驗。本文方法不僅有較高的運算峰值,還具有較高的FPGA資源利用率,通過人臉識別數(shù)據(jù)集對平均準確率、精度和召回率進行驗證,損失均在1%以內(nèi),說明本文方法可有效利用FPGA資源,充分識別數(shù)據(jù)處理中的異常點。