李克文,杜蓯聰,黃宗超,李瀟,柯翠虹
(中國石油大學(華東) 計算機科學與技術學院,山東 青島 266580)
油田生產信息化建設,基本實現了油水井、站庫數據的實時采集,油井的智能化管理需求日益突出。在油田生產過程中,油井受各種因素的影響出故障的概率很高,經常造成油井產量降低甚至躺井。目前,識別異常工況主要依靠簡單的參數超閾值報警,導致報警頻繁且有效率不高,問題原因仍主要采取人工分析,數據變化趨勢難以自動跟蹤、問題隱患難以超前發現、預防性治理和優化措施難以精準實施,難以滿足信息化條件下“預警式管理”的要求。所以,預警油井異常工況,指導技術人員超前采取治理與優化措施,對于提高油井開采效率,降低躺井率與維護成本,實現智能化精細化管理具有重要意義[1]。
為了提高油井異常工況的識別精度,世界各地的學者進行了大量的研究。考慮到油井生產數據的特征,即異常工況樣本少、維數大等特點,近年來識別異常工況的方法可分為兩類:基于統計[2]和傳統機器學習的方法[3]以及基于深度學習的方法[4-6]。對于第一類,Zhang 等[7]將支持向量機與遺傳算法相結合,提出基于GA-SVM 與頻域光譜法的變壓器油浸絕緣體的濕度預測;周斌等[8]提出一種基于Hessian 正則化支持向量機(Hessian正則化SVM)的多視角協同識別抽油機井工況方法。這些研究提高了異常工況檢測的準確性,但它們都忽略了工況數據類別不平衡的問題。王利君等[9]使用集成SMOTE、CLUSTER 與隨機森林的集成學習方法SCRF 進行結蠟預測,考慮了類別不平衡,但忽略了高維數據的問題且目標數據集相對較小,模型的泛化性能和自學習能力不足。
近年來,由于深度學習模型具有強大的特征提取能力及擬合海量數據的能力,因此被廣泛應用于故障檢測領域[10]。例如,Wei 等[11]提出基于電機數據的深度學習的抽油桿泵故障診斷,利用CNN 作特征提取器彌補了專家經驗的不足;Chen等[12]提出基于多尺度CNN 和LSTM 的軸承故障診斷,使用兩個不同內核大小的CNN 從原始數據中提取不同的頻率信號特征,然后利用LSTM 識別故障類型;Cabrera 等[13]提出基于LSTM 的往復式壓縮機故障診斷模型,其中超參數搜索由在每次迭代中限制搜索空間的貝葉斯方法完成;魏曉良等[14]提出了一種基于長短時記憶(LSTM)和一維卷積神經網絡(1D-CNN)相結合的空化故障診斷方法,用于高速柱塞泵故障診斷;Liang 等[15]提出一種使用自適應矩估計最大值(adamax)優化算法的雙向門控遞歸神經網絡(adamax-BiGRU)的瓦斯濃度預測模型,預警煤礦瓦斯事故。這些研究初步證明了深度學習模型在故障檢測領域的有效性。但是,LSTM 具有許多參數和復雜的結構,容易出現過擬合的問題。作為LSTM 的變體,GRU具有簡單的結構、較少的參數和較短的訓練時間,這比LSTM 更具優勢。但是,GRU 僅按順序考慮前向信息,不考慮反向信息。由兩個GRU 組成的雙向GRU(BiGRU)可以利用附加的后向生產數據,從而進一步提高模型預警異常的準確性。
在上述方法中,存在一個主要問題:實際生產數據中抽油井異常記錄遠小于正常生產記錄,即抽油井異常工況數據集往往存在類別不平衡的問題。上述方法僅考慮總體準確率,而忽略了類不平衡問題,導致少數類分類出錯率較高,實際上的異常工況檢測效果不理想。因此,本文提出了一種正共享損失函數[16],以增強少數類,即異常工況的檢出效率。
本文的主要工作如下:
1)針對工況樣本的灰度圖像,在CNN-BiGRU聯合網絡模型上引入注意力機制,從而提高模型對特征的學習能力,進一步提高識別異常工況的準確率。
2)除了將CNN-BiGRU-Attention 網絡用作特征提取器外,提出了正共享損失函數PSL。PSL引入一個額外的正則化項,以強調正負類的損失,且給樣本少的正類更高的權重,旨在減弱不平衡,有助于更好地識別異常工況。
CNN 網絡主要有兩個算子[17],一個是卷積層,另一個是池化層。卷積層作為特征提取器將數據集的工況樣本的灰度特征矩陣分割成若干子矩陣,每個卷積層中所有的特征子矩陣與同一個權值矩陣(卷積核)做卷積運算,通過卷積核刻畫圖片的局部模式來提取圖像的局部特征[18]。卷積運算可以提取數據集中人類無法理解的異常工況的局部抽象特征,起到過濾作用。池化層在卷積層之后,對卷積得來的特征進行篩查,減少特征數量來降低計算量,同時可以起到保留異常工況特征以及防止過擬合的作用。
門控循環單元(gate recurrent unit,GRU)是一種特殊的循環神經網絡(recurrent neural network,RNN),其與長短期記憶網絡(long-short term memory,LSTM)相似,是為了解決長期記憶和反向傳播中的梯度爆炸、梯度消失和長距離依賴等問題而提出的。
GRU 適宜于處理時間序列數據,對比LSTM,GRU 在性能相當的同時參數量更少,結構簡單,更易收斂,且計算速度比LSTM 更快。雙向GRU[19]在輸入序列上有兩個GRU 互相連接,每一個輸入的異常工況特征圖都會從正向和反向經過GRU,為神經網絡提供上下文的全局特征。在圖1 中,每個GRU 單元都在兩個方向上進行處理:GRU1是正向GRU,其內部結構如圖2 所示;GRU2是反向GRU,其內部結構如圖3 所示。

圖1 BiGRU 的網絡結構Fig.1 Network structure of BiGRU

圖2 正向GRU 單元的內部結構Fig.2 Internal structure of forward GRU unit

圖3 反向GRU 單元的內部結構Fig.3 Internal structure of reverse GRU unit
圖2 中的正向計算過程如下:
定義rt是正向GRU 在t時刻的重置門。公式如下:

式中:σ為sigmoid 函數;xt和ht?1分別是當前輸入值和上一個激活值;Wr是輸入權重矩陣;Ur是循環連接的權重矩陣。
類似地,定義zt是正向GRU 在t時刻的更新門。公式如下:

定義ht是正向GRU 在t時刻的激活值,即上一個激活值ht?1和候選激活值ht?之間的折中。

ht?公式如下:

式中:“·”代表哈達瑪乘積(Hadamard)。
當重置門rt關閉時,即其值接近于0,GRU 忽略先前的激活值ht?1,僅由當前輸入xt決定。這允許ht丟棄不相關的信息,從而更有效地表達有用的信息。
另一方面,更新門zt控制將ht?1中的多少信息傳遞給當前ht。
同樣,圖3 中的反向計算過程如下:

將兩個方向的結果求平均,以獲得最終輸出ht。

為了更好地解決深度學習預測模型中工況屬性的選擇問題,且所提出的方法對圖像處理更有效,將油井數據轉化為灰度圖像。數據集中共有41 維特征,為了保留數據集中每個樣本的所有特征,用8個0 填充,將其轉化為7×7 灰度圖像。轉化后的灰度圖像如圖4 所示,從左到右依次為無異常、泵漏、管漏,同一類別的圖片幾乎相同,但是不同類別的圖片之間存在很大差異。

圖4 樣本灰度圖像Fig.4 Sample gray image
本文提出的CBiA-PSL 模型是基于CNN-Bi-GRU-Attention 網絡和正共享損失函數PSL。CNNBiGRU-Attention 在CNN-BiGRU 聯合網絡的基礎上引入注意力機制,其結構如圖5 所示。首先,7×7 工況樣本灰度圖像作為CNN 的輸入,利用CNN、BiGRU 提取前后向相關特征,克服了CNN 缺乏對上下文的全局關注與BiGRU 缺乏對局部關注的不足,結合兩者的優點從全局和局部對異常工況特征學習訓練,并通過Attention 層增強相關特征表示[20-21],最后,通過softmax 層輸出分類結果。

圖5 CNN-BiGRU-Attention 模型結構Fig.5 Model structure of CNN-BiGRU-Attention
在CNN-BiGRU 聯合網絡架構的基礎上增加注意力機制對隱藏狀態加權計算以完成有效特征篩選。其核心是權重系數,首先學習每個特征的重要程度,而后根據重要程度為每個特征分配相應的權重,以區分各特征的重要性大小,提高工況識別的準確率。本文使用前饋注意力機制,其結構如圖6 所示。

圖6 注意力機制結構Fig.6 Structure of attention mechanism
首先生成目標注意力權重et,公式如下:

式中:σ是注意力學習函數tanh;St是第t個特征向量的初始狀態向量;wt表示第t個特征向量的權重系數矩陣;bt表示第t個特征向量相對應的偏移量。
然后將注意力權重概率化,通過softmax 函數生成概率向量 αt,公式如下:

最后,注意力權重配置。將生成的注意力權重配置給對應的隱層狀態St,使模型生成的注意力權重發揮作用,Y是最終輸出的狀態向量,為St的加權平均值,權值是 αt,公式如下:
在交叉熵損失函數中通過引入一個額外的正則化因子強調正類、負類的區別,構造正共享損失函數PSL,且給樣本數少的正類更高的權重,以減弱不平衡,更好地區分各類異常與正常的生產狀態,提高識別異常工況的準確率。
訓練CNN-BiGRU-Attention 網絡的目標是對異常工況特征進行提取,最大化識別異常工況的概率,這是通過最小化交叉熵損失函數實現的。給定一個包含m個樣本的訓練集:是第i個樣本,y(i)∈{0,1,2,···,K}是它的標簽。y(i)=0表示x(i)是負樣本,y(i)=k>0 表示x(i)是正樣本且x(i)屬于第k種工況。表示Softmax層的輸出,x(i)分類為j的概率(為)

損失函數如下:

標準交叉熵損失函數會平均懲罰每個類的錯分類誤差。但在實際情況下,將正樣本分類為錯誤的非零標簽并不是重大錯誤,因為仍將其識別為異常。也就是說,異常類間的分類出錯一般可以忽略,但異常和無異常間分類出錯是不可容忍的,即應更關注零標簽和非零標簽之間的錯誤分類導致的損失。為此,引入了額外的正則化因子,增加了異常工況錯分類到正常和正常錯分類到異常類的損失。改進后的損失函數如下:

式中:λ為控制參數。當 λ趨向于0 時,式(1)為標準交叉熵損失函數;當 λ足夠大時,區分不同異常工況的效果變弱,式(1)變為解決二分類問題的損失函數,旨在識別異常工況和正常生產數據。實驗中,默認設置 λ =1。在實際情況下,我們更關注能不能識別出異常工況,而不是異常工況間被錯分類的概率,因此引入的正則化項中各正類別的損失在其他正類間共享,稱式(1)為正共享損失函數。
異常工況樣本數少,數據集中正樣本數遠小于負樣本數,數據不平衡,因此為正類項引入參數 ω,ω為負樣本數與正樣本數的比值,旨在減弱不平衡,公式如下:

通過以上這兩個措施,從而讓CNN-BiGRUAttention 模型學習到更加具有辨別力的特征。通過標準反向傳播來更新網絡參數,Loss0為標準交叉熵損失函數,其導數已在文獻[16]中提供,損失函數中第二部分的偏導數計算如下:

正共享損失函數的偏導數計算如下:

本文使用的數據集來源于勝利油田若干采油廠上百萬條抽油井生產數據。原始的數據包括井組相關資料、日常管理資料、實時生產數據、示功圖采集數據、功圖分析數據、工況日志數據和管柱等資料,時間范圍是2019~2020 年。井組相關資料主要存儲單井基礎信息,包括井號、井別、地質儲量、對應的注水井配注量等數據資料;日常管理資料、實時生產數據、示功圖采集數據和功圖分析數據主要存儲動態示功圖及動態參數,如上下行電流、熱洗周期、日產液量、日產油量、含水等;工況日志數據主要存儲異常發生的井號、時間、工況類型、治理措施等;管柱資料主要存儲管柱圖、泵效、泵掛深等資料。以上數據在實際使用時往往存在問題:1)數據存在缺失、無效波動、重復值;2)數據時間段不連續;3)工況標簽缺失等。因此,為提高工況預警的準確性和精度,在建立異常預測模型前需進行預處理,得到數據質量較高的數據集。
初始油井實時數據通過缺失值填寫、光滑噪聲數據、刪除重復數據、去除無效波動、數值規約、切片等手段預處理,共保留135個特征字段。在數百個工況屬性中,由于許多工況屬性具有相似的公式和表達式,這些屬性之間相關性很高,去冗余后保留38個特征字段。考慮到油井異常會導致示功圖載荷和面積有較大變化,對示功圖進行特征量分解,獲取功圖面積、載荷差、載荷比3個新的特征,同時構造工況標識字段,泵漏標記為1,管漏標記為2,正常標記為0。原始數據經過預處理后,得到樣本數據集,共包含41個特征參數和1個目標參數。將異常工況類(含泵漏、管漏)統稱為正類,無異常統稱為負類。預處理后的樣本情況如表1 所示,正負類樣本極不平衡。劃分數據集中70%作為訓練集,30%作為測試集。

表1 預處理后的樣本情況Table1 Sample condition after pretreatment
本文實驗在服務器下進行,硬件設備CPU 型號為Intel(R)Xeon(R)CPU E5-2630L v3 @ 1.80 GHz,內存大小48 GB。實驗環境為Python3.8,借助Keras2.4.3 搭建神經網絡,后端使用TensorFlow 2.4.0。
實驗參數設置如下:卷積核大小設置為5×5,步長為1,隱藏層的數量為1,隱藏層單元數為128,隱藏層丟包率為0.5。學習率為0.01,BiGRU 的時間步長為8,隱層單元數為64,批次大小為128,迭代次數為50。
3.4.1 對比度得分
可以通過測試集上每個樣本的分類準確率來驗證模型的有效性,但是對于檢測問題,正樣本和負樣本之間的對比度更能反映模型性能。因此,定義對比度得分作為度量,為測試集,是模型把分為負類的概率。對比度得分定義如下:

γ的取值范圍是?1~1,表示模型識別正樣本、負樣本的能力。
3.4.2 混淆矩陣
混淆矩陣如表2 所示。TPm表示正確預測的m類陽性樣本數,Emn表示m被歸類為n的錯誤分類樣本數。FNm表示m被歸類為其他類的錯分類樣本數,FNA=EAB+EAC,FNBC可同樣計算得到;FPm表示其他類被歸類為m的錯分類樣本數,FPA=EBA+ECA;TNm表示正確預測的m類負樣本數,TNA=S?FNA?FPA?TPA。真陽性率TPRm表示所有實際為m類的樣本被正確判斷為m類的比率,公式如式(1)所示;假陽性率FPRm表示所有實際為其他類的樣本被錯誤判斷為m類的比率,公式如式(2)所示。


表2 多分類的混淆矩陣Table2 Confusion matrix of multi classification
為了評估CBiA-PSL 模型,本文選擇了3個指標:AC(準確率)、DR(檢出率)和FR(錯誤報警率):

將學習速率設置為0.01,對損失函數執行隨機梯度下降(SGD),50 次迭代后,采用標準交叉熵損失函數(Loss0)的CNN-BiGRU-Attention 模型的對比度得分為0.58,采用正共享損失函數PSL(Loss)的CNN-BiGRU-Attention 模型的對比度得分為0.63,有0.05 的提高,如圖7 所示。這表明引入正共享損失函數可以提高異常類的檢出效率。

圖7 對比度得分Fig.7 Contrast score
第2個實驗將CBiA-PSL 與其他5 種用于異常工況檢測的機器學習/深度學習方法進行比較,包括:CNN-BiGRU-Attention、卷積神經網絡CNN、雙向長短時記憶網絡BiLSTM、雙向門控循環單元BiGRU、隨機森林RF。各模型的AC 值、DR 值、FR 值如圖8、表3、表4 所示,CBiA-PSL模型訓練過程的損失如圖9 所示。從圖8 可以看到,CBiA-PSL 的AC 值為88.2%,高于其他5 種方法。此外,分析表3 可以得出結論,CBiA-PSL 可以提高少數類(泵漏、管漏)的DR 值,且正常類的DR 值保持不變,即提高了異常類的檢出率。分析表4,少數類的FR 值有時為0,式(1)~(5)表明該方法未檢測到異常類別時,DR 和FR 均為0。表4 表明本文提出的方法可以將異常類的錯誤報警率維持在較低水平。因此,本文所提出的方法CBiA-PSL 可以在總體準確率較高的情況下,提高異常類的檢出率,并降低錯誤報警率。

圖9 模型訓練集的損失圖Fig.9 Loss graph of model training set

表4 各模型的FR 值Table4 FR value of each model

圖8 各模型的AC 值Fig.8 AC value of each model

表3 各模型的DR 值Table3 DR value of each model
本文基于CNN-BiGRU 聯合網絡特征學習模型,使用改進的CBiA-PSL 網絡進行抽油井異常工況預警,利用CNN 局部特征的強學習能力提取工況樣本灰度圖像的局部特征,BiGRU 提取全局前后向特征并加強CNN 池化層特征的聯系,加入注意力機制獲取樣本中的重點特征,降低噪聲特征的干擾,從而完成有效特征篩選,提高模型對異常工況特征的學習能力。除了將CNN-BiGRUAttention 網絡用作特征提取器外,針對工況樣本數據集不平衡的問題,本文提出正共享損失函數PSL,該函數強調異常類和非異常的損失,而不是每個子類的損失,有助于學習比Softmax 損失函數更多的判別特征,且給樣本少的正類更高的權重,以學習參數,減弱了不平衡,有助于更好地識別異常工況。
實驗結果表明,用本文提出的CBiA-PSL 網絡模型進行異常工況預警,可以取得較高的AC值、DR 值,較低的FR 值,即本文提出的CBiAPSL 方法能有效處理不平衡數據集,并且對于異常類和整體的預測都有較高的精度。未來的工作如下,由于預警時間也是異常預警的關鍵,因此在保證準確率的同時必須確保模型能滿足異常預警的時間要求,同時優化網絡模型參數,進一步提升模型對異常工況預警的精度。