如何將全波形反演FWI與人工智慧AI的神經網路做對比?

Koma_Wong發表於2018-09-15

目錄

1.全波形反演

2.神經網路


全波形反演可以說現在被地球物理界的小夥伴做爛了,一提到全波形反演大家先到的就是高精度...各種優點,可是他卻有著與人工智慧的同樣的缺陷,那就是計算量的限制。但是在當下,隨著計算技術的不但進步,雖然有人說摩爾定律已死,但是現在各種超級計算機橫空出世,我們國家的曙光、天河等位居世界前列,相信,為了得到高精度的結果,這點計算花費是值得的,今天就來簡單對地球物理的全波形反演(Full Waveform Inversion)和神經網路(Neural Network)進行簡單的對比。

1.全波形反演

總所周知,全波形反演其實就是數學方法的堆疊(其實大部分的科學研究最終都要歸功於數學,但是為什麼沒有諾貝爾數學獎呢?這個故事留給大家自己搜尋)。全波形反演的流程其實非常簡單:建立資料和模型的非線性關係是要點。假如資料為D,模型為M,他們之間的關係是A,那麼簡單的關係就是:

AM=D

A說白了就是人類一直研究的自然規律(突然想起一句話:世間萬物都是由分子構成“來自《大灌籃》”),地球物理學的常用規律是動力學和運動學理論,前者是波動理論,後者是旅行時理論,同時,當引數出現誤差時候,方程就轉變成了:

A\Delta M=\Delta D

這裡的\Delta D就是資料誤差,其實就是波形反演中觀測資料與模擬資料之間的誤差,\Delta M就是模型誤差,就是我們需要更新的模型引數更新量。通常研究過程中加入修正量,叫做bias(偏置):

A\Delta M = \Delta D + bias

這個變數的引入通常會產生一定的修正作用,我們常說到的井約束等資訊等。

人類法則是人類從自然法則中獲取的一個無線接近於自然法則的定律。

2.神經網路

神經網路的原理大同小異,但是他的區別在於“人類法則”未知,需要通過大量的資料進行訓練才能獲取的一種規律。

y = ax + b

將其寫成神經網路的通用符形式為:

y = wx + bias

其中w為權重,bias為偏置。

如何建立這個“人類法則”的初始狀態呢?這裡就引入了一個叫做sigmoid函式和softplus函式的隨機變數,用這個隨機變數建立初始權重和偏置。

給出一個GitHub開源專案中的sigmoid函式的例子,專案名稱mnist-neural-network,請大家自行搜尋:

/*返回一個 正態分佈的隨機數*/
double
random_normal_distribution (void)
{
    return sqrt (-2.0 * log (drand ())) * cos (2.0 * M_PI * drand ());
}

/*返回一個此範圍內的偽隨機數*/
int
random_integer (int min, int max)
{
    return min + rand () / (RAND_MAX / (max - min + 1) + 1);
}

/*sigmoid函式*/
double
sigmoid_to_number (double number)
{
/*
a    sigmoid = 0     i=-9999...99
b            = 0.5   i=0
c            = 1     i=9999...99
*/
    /* exp (double) returns a "double" value, so casting is not required */
    return 1.0 / (1.0 + exp (-number));
}

/*sigmoid的導數*/
double
sigmoid_prime_to_number (double number)
{
    /* Avoid to call same function 2 times */
    double sigmoid_number = sigmoid_to_number (number);

    return sigmoid_number * (1.0 - sigmoid_number);
}

建立完整的初始狀態後,就可以根據最速下降法或者其他一些數學方法計算梯度(權重)和修正量(偏置)了,這裡需要一系列的神經網路劃分,不同的神經網路對於訓練結果也會有不同的結果。給出一個簡單的神經網路例項:

這個例子是手寫數字識別的網路劃分,每個手寫字型有28*28=784個畫素,最終的輸出只有0~9數字。

相關文章