陳 杰,張 挺*,杜 奕
(1. 上海電力大學計算機科學與技術學院,上海200090; 2. 上海第二工業大學工學部,上海201209)
(?通信作者電子郵箱bee921@163.com)
多孔介質重構[1]在石油地質勘探、地層學和巖石學的研究等諸多領域有著大量的應用,多孔介質模型可以用于定量研究多孔介質內部各種微觀因素(如孔隙結構、潤濕性、含水薄膜)對儲層宏觀性質的影響,它對研究儲層油氣充注過程和油氣滲流機理有關鍵作用,所以建立一個準確客觀的三維多孔介質重構模型對石油和天然氣勘探以及巖層研究有著重大意義。隨著實驗儀器的創新和新理論、新技術的突破,國內外研究團隊不斷提出新的多孔介質重構的方法,主要分為物理實驗方法和數值重構方法等[2]。
物理實驗方法使用實驗儀器掃描多孔介質樣品獲得大量的二維截面,然后通過建模程序形成三維多孔介質,但是設備使用成本高、實驗困難。
與物理實驗方法不同,數值重建方法[3]通常基于少量的二維或三維真實圖像,并通過隨機模擬或沉積巖過程模擬重構三維多孔介質。與物理實驗方法相比,雖然這些方法成本低,可以重構多種多孔介質,但耗時長,不能很好地重構頁巖等內部結構復雜的多孔介質。
多點統計法(Multiple-Point Statistics,MPS)[4]被認為是重構多孔介質和隨機模擬的典型數值方法,通過使用訓練圖像(Train Image,TI)來計算條件累積概率函數。然而,MPS 模擬速度慢且對內存要求高,模擬過程復雜。
深度學習(Deep Learning)[5]從問世起就倍受學術界和工業界的關注,它可以獲取高維數據中的復雜結構特征。將深度學習的相關技術應用到多孔介質重構的建模方法中,有助于提取訓練圖像的復雜結構特征。深度遷移學習(Deep Transfer Learning,DTL)[6]是深度學習領域的重要技術之一,它可以將在其他數據集中已經訓練好的模型快速轉移到另一個數據集上。DTL 可以視為深度學習和遷移學習的結合,在深度學習提取多孔介質的結構特征后,利用遷移學習將學習到的特征用于新的多孔介質重構結果中,使其能夠很好地擬合新的數據集,達到良好的效果[7]。
本文提出一種基于自適應深度遷移學習的多孔介質重構方法——ADTL(Adaptive Deep Transfer Learning),在多孔介質重構的建模過程中,不再對每一個未知點進行概率統計,在深度學習的隱藏層中加入一些自適應遷移層以減少來自不同多孔介質數據的分布差異。通過梯度下降學習訓練圖像的全部特征,然后再使用深度遷移學習將學習到的特征遷移到建模區域。
ADTL方法在重構過程中分為兩個重要階段:第一階段是訓練深度神經網絡,通過梯度下降找到合適的參數來完成訓練圖像特征的學習;第二階段是將深度神經網絡學到的特征復制到新的重構結果中。
與傳統的模擬方法(如MPS)相比,由于采用了顯卡加速和深度學習的優化算法,可大大縮短ADTL 的處理時間。另外,傳統方法不能將重構特征以參數形式存儲在磁盤上,所以每次重構都要重新掃描訓練圖像,非常耗時。而ADTL 方法在訓練一旦完成后,學習到的特征能夠以參數的形式存儲在硬盤中,所以可以重復利用,不必每次重新掃描訓練圖像,因此速度優勢明顯。
實驗針對砂巖數據使用ADTL 方法進行重構,并通過比較重構結果和訓練數據多點連通曲線、變差函數曲線和孔隙度,評估了該方法的性能。實驗結果表明,ADTL 方法的重構結果很好地保留了訓練圖像的結構特征,提高了重構的效率;而且與傳統的MPS 比較發現,ADTL 方法在重構質量、重構速度和內存占用方面具有優勢。
深度學習也稱為深層神經網絡,最初在1986 年被引入機器學習,深度學習就是基于神經網絡,使用許多簡單的非線性特征把原始數據轉化為更復雜的數據表達[8]。
深層神經網絡構造如圖1 所示,每層由若干神經元組成,X(x1,x2,…,xi)表示輸入特征向量,y 表示輸出預測值。訓練學習復雜任務時,每一層的網絡節點沒有數目要求,但是應設置較多的隱藏層。在前饋神經網絡中隱藏層為全連接層;在卷積神經網絡中,隱藏層可分為卷積層和全連接層。所有這些隱藏層中,排序較前的幾層能夠學習一些低層次簡單特征,排序較后的幾層能把簡單的特征結合起來,學習更為復雜的任務[9]。
對于深層神經網絡模型,損失函數可以衡量算法在單個訓練樣本中的效果,對于所有的訓練樣本,需定義一個損失函數,如式(1)~(2)所示:

其中:m、w 和b 分別表示輸入數據樣本的數量、神經元中的權重和偏差;i=1,2,…,m,表示輸入數據的數量;yi和yipre分別表示數據輸出的真實值和預測值。神經網絡反向傳播[6,9]時更新w、b 和J(w,b),在訓練模型過程中,找到合適的w 和b 來使得總損失函數J(w,b)最小。具體方法就是通過前向傳播[10]和反向傳播的迭代。
前向傳播時,對于每一個隱藏層,

其中:z 是每個隱藏層的輸出;a 是z 經過激活函數后的輸出;l為隱藏層序號(如z[l]表示第l層的輸出z)。
反向傳播時是通過鏈式求導完成參數迭代,如式(5)~(8)所示:

其中:α為學習率。

圖1 深層神經網絡模型Fig.1 Deep neural network model
遷移學習是由機器學習技術發展出的一種方法,主要是為了將機器學習領域已有的經典模型或者已經訓練好的模型用到新的領域和任務中,這樣可以不必對每一個新任務都重新訓練一次模型,不僅節省時間而且提高了模擬效率,降低了訓練數據需求量[11]。
對于許多需要使用遷移學習的任務,在遷移的來源任務中有很多數據,而遷移的目標任務中數據很少。如果想從源任務中學習并遷移一些知識到目標任務中,那么源任務和目標任務需要有同樣屬性的輸入。目標任務中的數據是想要擬合的數據,但其中真實數據的量一般較少,那么遷移學習可從一些目標相似度高并且擁有大量數據的源任務中獲得低層次的特征,然后將這些特征在目標任務中復現[12]。深度遷移學習就是在使用深度學習時加入遷移學習方法。
1.2.1 Finetune
Finetune[13]是一種深度遷移學習方法,它在進行深度遷移學習時,固定訓練模型的全部卷積層和部分全連接層,只訓練自己定制的部分全連接層。圖2 所示為一個深層神經網絡的結構圖,它是由輸入層、輸出層和隱藏層組成。深度遷移學習Finetune 的過程,就是將輸出層前面的一個或者幾個隱藏層定義為遷移層Ltransfer,如圖2所示;遷移層前面的隱藏層和輸入層定義為固定層Lfixed(包含卷積層和全連接層)。將已訓練完成的深層神經網絡結構中的遷移層Ltransfer進行隨機初始化操作,然后使用新的數據對整個網絡進行重新訓練,但每次前向傳播和反向傳播時不改變固定層Lfixed的參數,而是僅僅對遷移層Ltransfer和輸出層進行參數迭代,完成訓練后,原來的遷移層(淺色部分)變成了新的網絡層(深色部分)。圖2 中固定層和新的遷移層組合起來就是遷移完成以后完整的神經網絡結構。

圖2 深度遷移學習結構Fig.2 Structure of deep transfer learning
1.2.2 自適應深度遷移學習
因為Finetune 在訓練數據和測試數據分布相差較大的情況下效果較差,本文通過在深度學習遷移方法中加入自適應層(Adaptation Layer)[14]來完成源域和目標域數據的自適應,使得它們的數據分布更加接近,遷移效果更好。
如圖3 所示,在原本的遷移層中加入自適應層,然后進行Finetune。加入自適應層后,網絡的總損失為:

其中:L(yi)是網絡在數據集上的損失函數;L(Ds,Dt)是網絡的自適應損失,添加自適應損失的目的是在進行梯度下降時減少因不同數據分布差異導致的訓練結果不理想;λ 是自適應系數[14];Ds和Dt分別表示源數據和目標數據。

圖3 自適應深度學習結構Fig.3 Structure of adaptive deep learning
通過添加自適應層提高深度遷移學習的學習效果,但額外增加了計算復雜度,并且在設計自適應層時較為繁瑣[15]。文獻[16]中將自適應層替換為BatchNorm 自適應層,從而加入統計特征的適配性,這種方法稱為AdaBN(Adaptive Batch Normalization)[16],屬于自適應遷移學習。
AdaBN 實現簡單而且該方法不增加額外的參數,降低了重構的復雜性。只需將圖3 中的自適應層替換為一種新的數據層(稱之為BatchNorm 自適應層),然后進行Finetune。加入AdaBN 作用是解決來自不同數據集樣本的數據分布差異,AdaBN使用更新算法將數據集中的樣本標準化為零均值和同方差,從而緩解不同數據集的位移問題[16]。


其中:yj是神經元j 的輸出;xj為輸入;μj和σ2j分別為計算均值和計算方差。
對于第n 次迭代時輸入的m 個樣本,其輸入均值和輸入方差分別為μ和σ2。此時計算均值μj和計算方差σ2j的更新規則為:

其中:d 是第n 次迭代的輸入均值μ 與第n - 1 次迭代的計算均值之差;Nj是前n - 1 次迭代時所有的樣本數之和,即累計樣本數;運算符“←”表示每次迭代時更新符號左邊的數據。在第一次迭代時,μj和被分別初始化為0和1。
本文提出使用深度學習來整體提取訓練圖像中的結構特征,替代傳統的模擬方法(如MPS)掃描訓練圖像這一過程,然后使用自適應深度遷移學習中的AdaBN 方法將提取到的特征復制到模擬結果中,最終可以得到具有訓練圖像結構特征的重構結果。
算法具體步驟如下:
步驟1 首先從訓練圖像中獲取全部數據,為了加快深度學習的訓練速度和防止梯度爆炸,對數據進行隨機排序、歸一化等處理,得到數據集DS。
步驟2 設計深層神經網絡的結構,并將深層神經網絡結構劃分為固定層Lfixed、遷移層Ltransfer和輸出層Lout,在遷移層中加入BatchNorm自適應層。
步驟3 使用設計好的深層神經網絡對訓練圖像數據進行迭代擬合來學習其中的復雜特征,當訓練誤差達到要求時訓練結束,得到模型TS。TS中保存了神經網絡結構中每一層的權重w和偏差b。
步驟4 利用真實條件數據形成數據集DT,并在DT上對深度學習模型進行遷移學習。進行遷移學習的方法為:隨機初始化遷移層Ltransfer的所有參數,然后加入DT進行訓練,訓練神經網絡時保持固定層Lin參數不變,每次前向傳播和反向傳播時僅改變遷移層Ltransfer和輸出層Lout的參數,當總代價滿足要求后訓練完成,得到模型TT。
步驟5 將數據集DS的輸入特征向量作為模型TT的輸入,就得到了預測值,這些特征向量和對應預測值即為重構結果。
評價多孔介質重構結果優劣的標準與一般重構方法有較大的不同。一般重構方法中的重構數據與原始數據的相似度是由兩者在每個相同位置具有相同狀態值的元素的比例決定的。在一般重構方法中,該比例越高,重構相似度就越高,但是這個判定標準對于多孔介質重構并不適用。多孔介質重構并不要求隨機模擬結果與訓練圖像完全一致,它的真正作用體現在捕捉訓練圖像的結構特征,并將這些特征復制到重構數據中,這些結果是對訓練圖像結構特征的反映,重構效果的優劣在于這些結構特征是否被復制到重構數據中。
因此,本文評價重構結果時并不直接比較重構結果和訓練圖像是否相同,而是通過多個重構結果的孔隙度、變差函數[17],以及連接性曲線來衡量。
本文利用砂巖圖像重構來驗證本文方法的有效性,即使用深度學習對砂巖訓練圖像的孔隙結構特征進行學習,然后使用自適應遷移學習將這些特征和真實數據結合,完成砂巖圖像的重構。首先使用同步輻射掃描獲得砂巖數據(底面半徑為500 體素,高為1 022 體素的圓柱體砂巖),再從該砂巖不同位置隨機截取兩份80 × 80 × 80 體素的體數據分別作為訓練圖像與真實圖像,孔隙度分別為0.174 5 和0.176 3。真實圖像是指客觀存在的真實數據圖像,是實驗中需要模擬的目標,用來與模擬結果進行對比。由于訓練圖像與真實圖像從同一塊砂巖提取,故可以認為它們具有相似的孔隙結構特征,如圖4~5所示。

圖4 訓練圖像Fig.4 Training image

圖5 真實圖像Fig.5 Real images
圖4(a)是訓練圖像的外表面,圖中深色表示孔隙,淺色表示骨架;圖4(b)是訓練圖像正交剖面圖;圖4(c)是將砂巖骨架隱藏后的孔隙結構圖。從圖4 可知,訓練圖像的孔隙特征具有長連通性,并且有不規則的孔隙形狀。圖5(a)是真實圖像的外表面,圖5(b)是其剖面圖,圖5(c)是其孔隙結構圖。通過對真實圖像進行隨機采樣,得到了0.5%的點作為重構圖像的條件約束數據,其中孔隙點占采樣點的比例為0.174 2。
重構目標是使得重構圖像的孔隙結構與真實圖像的孔隙結構相似。數據集的輸入是1× 3 的輸入矢量X,矢量的每個維度的取值范圍{j=1,2,…,80},其中xij={x1j,x2j,x3j}為X 的三個特征向量,Y={0,1}為砂巖的結構值,0 表示骨架,1 表示孔隙。真實圖像采樣數據量和訓練圖像數據量分別是2 560 和512 000。
3.3.1 孔隙度對比
實驗中,深層神經網絡的輸入特征為每一個砂巖點的空間位置信息,每一個點的標簽值使用0表示骨架,1表示孔隙,通過ADTL 方法得到一個重構圖像結果(80 × 80 × 80 體素),如圖6 所示。圖6(b)的孔隙在不同截面上呈現出不規則形狀,而圖6(c)孔隙具有訓練圖像中孔隙長連通性的特征。ADTL 方法重構圖像的孔隙度為0.175 2,與真實圖像的孔隙度是十分接近的。

圖6 ADTL重構圖像Fig.6 Images reconstructed by ADTL
為了與其他經典重構多孔介質方法比較,又采用傳統的重構方法MPS 來對砂巖孔隙圖像進行重構,分別使用ADTL和MPS 進行了10 次重構來驗證結果。圖7 是MPS 方法得到的一個重構圖像,該MPS重構圖像孔隙度為0.171 9。

圖7 MPS重構圖像Fig.7 Images reconstructed by MPS
對比真實圖像、ADTL 重構圖像和MPS 重構圖像可看出,三種重構圖像在孔隙結構上均較為相似。表1 是MPS 和ADTL重構圖像10次的重構結果平均孔隙度,可見ADTL方法生成的圖像與真實圖像的孔隙度更為接近。

表1 MPS和ADTL重構圖像的10次重構結果平均孔隙度與真實圖像的平均孔隙度Tab. 1 Average porosities of 10 reconstruction results of DTL and MPS and average porosity of real image
表2 是MPS 和ADTL 方法分別進行10 次重構的圖像孔隙度,可以看出ADTL 方法的結果方差較小,說明波動較小,更為穩定,孔隙度分布更集中。

表2 MPS和ADTL方法10次模擬重構圖像的孔隙度Tab. 2 Porosities of 10 reconstruction results of DTL and MPS
3.3.2 變差函數對比
變差函數(Variogram)是評價多孔介質重構圖像效果的重要工具,計算公式見文獻[18]。設X、Y 和Z 方向上相鄰點之間的距離為1,變差函數的每對計算點之間的距離(單位:像素)作為變差函數曲線橫坐標。分別計算真實圖像、MPS重構圖像和ADTL重構圖像在X、Y、Z方向的變差函數,如圖8所示。ADTL 重構圖像與真實圖像在X、Y 和Z 方向變差函數的變化趨勢都更加相似,說明二者的孔隙結構特征更相近。
3.3.3 連接性曲線對比
變差函數能夠反映空間變化特征,但不足以表征多孔介質結構的多點相關性。多孔介質重構方法使用多點連接性(Multiple-Point Connectivity,MPC)[18]來評估重構結果。圖9所示是真實圖像、MPS 重構圖像和ADTL 重構圖像在X、Y、Z方向的MPC。在X、Y 方向上ADTL 方法的效果略優于MPS 方法,在Z方向上ADTL方法明顯優于MPS方法。

圖8 MPS、ADTL重構圖像及真實圖像的變差函數Fig.8 Variograms of real image and images reconstructed by MPS and ADTL

圖9 MPS和ADTL重構圖像及真實圖像的多點連接性曲線Fig.9 MPC curves of real image and images reconstructed by MPS and ADTL
3.3.4 內存和CPU性能對比
由于ADTL 方法在建模時主要使用計算機的GPU 進行模擬,相較于MPS 方法對內存和CPU 的使用更少,這使得該方法在模擬時對計算機的性能影響較小。
本文實驗環境:CPU 型號為Inter Core I7-8700 3.2 GHz,內存8 GB,GPU 型號為Nvidia GeForce GTX 1070(6 GB)。分別對兩種方法10 次重構過程的內存占用和CPU 使用率以及耗時進行記錄,然后求取平均值。如表3 所示,使用ADTL 方法對內存和CPU 的占用遠小于MPS 方法。ADTL 方法耗時同樣明顯少于MPS方法,說明ADTL方法效率更高。
本文提出了一種基于自適應深度遷移學習的多孔介質重構方法,通過對三維結構進行一個整體的學習,使其重構結果
在三個維度均能取得良好的效果。由于傳統多孔介質隨機重構(例如MPS 方法)建立的模型不是唯一的確定性模型,而是一系列的等概率隨機實現,所以可能需要多次建模得出平均結果,且這些結果方差較大。而本文方法的神經網絡建模過程是一個尋優學習的過程,建模時不容易陷入局部最優,得到的結果更為穩定,因此更有優勢。實驗結果表明在多孔介質重構建模中,使用自適應深度遷移學習得到的重構結果精度更高、連通性和結構特征更好,內存和CPU 的占用以及模擬耗時也遠低于傳統方法。