羣內神祕小伙解釋神經網絡入門,可留言提問呦~

1、什麼是神經網絡,它是如何計算的。

首先來看神經網絡長什麼樣子:

群內神秘小夥解釋神經網絡入門,可留言提問呦~

神經網絡

圖中表示的是一個輸入層是4,中間層為3,輸出層2的神經網絡,每個圈表示一個神經元,比如x1,x2,x3,x4,h1,h2,h3,y1,y2都是神經元。上圖是一個4*3*2的神經網絡。實際網絡可以有任意的輸入,任意的中間層,任意的輸出數量。比如可以是:10000*4343*3434*5434*3434*234*2這樣任意的層數。

圖中每一條連接的線叫做權重,比如x1->h1這條線。

瞭解了這些以後,我們來看一下神經網絡的計算

神經網絡是從輸入層計算,到中間層,一層一層計算到輸出,首先對輸入層x1,x2,x3,x4賦值,然後計算h1,h2,h3,最後計算y1,y2輸出。

h1的計算方法是:

x1*連接h1和x1的權重 + x2*連接h1和x2的權重 + x3*連接h1和x3的權重,,,,一直加到x4 最後再加一個偏執量

假定我們用w_x1_h1代表連接x1和h1的權重,則上式可以寫為:

x1*w_x1_h1 + x2*w_x2_h1 + x3*w_x3_h1 + x4*w_x4_h1 + Bias

本層神經元的輸入定義:

群內神秘小夥解釋神經網絡入門,可留言提問呦~

神經元的淨輸入

bias-偏執(表示本層每個神經元的偏執,注意,每個本層神經元都有一個偏執,就是一個數字) xi代表輸入層第i個神經元的值,wij代表連接輸入層第i個神經元,本層第j個神經元的權重。

  每個神經元的輸入,就是與這個神經元相連的上一層神經元乘以權重然後再神經元處相加,後面再加上偏執,這就是神經元的輸入

每個神經元的輸出等於神經元輸入應用一個激活函數,比如SIGMOID,公式如下:

output = sigmoid(input)

參數:output-輸出 input-神經元輸入 sigmoid-一個S形函數,原型:y=1/(1+exp(-x))

神經網絡就這樣計算到最後一層,每條連線都會發生計算,最後到y1、y2計算出一個輸出值。

2、神經網絡用來幹什麼。

神經網絡就是這樣的一個計算網絡,人們可能問,這個有什麼用,網絡本身可以根據一個輸入,產生一個輸出。

在我們上面學習的過程中,我們已經瞭解網絡中有哪些東西可以影響輸出值,不難想象,給定輸入值,網絡中還有權重和偏執,權重和偏執的值可以影響網絡的輸出。那麼可以得出一個結論,調整每個權重和每個神經元的偏執可以改變網絡輸出。

  網絡是一個計算流程圖,假定我們輸入數組X,結果輸出數組Y,X和Y都是一個數組,我們知道一個向量或者一個座標點也可以數組表示,這裡我們把向量或座標X和Y的映射關係表示為函數:

Y=net(X)

X向量經過net網絡,輸出Y,這樣我們就可以通過一個定量的方式來,X數組的數字個數稱為X的維度,那麼圖中X的維數是4,Y的維數是2,那麼net函數的功能就是輸入一個4維的點,輸出一個二維的點。假定一個網絡輸入是M維,輸出是N維,那麼這個網絡的功能就是輸入一個M維的點,輸出一個N維的點。

我們知道改變權重和偏執可以改變網絡的輸出,那麼可以得出一個結論:

通過調整權重和偏執參數,可以把網絡塑造成不同的函數。

我們想象,如果左邊輸入的是一個圖像的像素數組,大家都知道像素是0-255的數字。假如我們有一個100*100的圖像,我們定義一個 10000 * 1000 * 100 * 2 的網絡,我們期望能通過調整參數的方式,讓函數具有這樣的功能:當左邊輸入人的圖片時,結果輸出(1,0)這個點,當輸入汽車時,結果輸出(0,1),也就是說,可以用函數來分類,輸入一個圖像,讓函數輸出結果成為對應的類型,可以識別圖像是人還是車。

如果我們不做任何操作,那麼網絡是辦不到的,因為它的計算結果我們無法確定,那麼我們要改變這種計算結果,調整裡面的權重和偏執就可以辦到,可以將權重和偏執調整,然後網絡就可以識別了。調整權重和偏執的值可以改變網絡的輸出,那麼怎麼調整就成為關鍵,調整參數的目標是讓網絡按我們預期的輸出,具體的來說,我們希望通過調整參數,能讓這個網絡輸入圖像像素數組,輸出類別(0,1)還是(1,0),是人還是車。

3、調整參數,讓網絡計算的輸出按我們預期的那樣。

我們調整參數也不能亂調,因為亂調是沒有結果的。那麼我們調整一個參數是否有效怎麼來判斷呢?

比如:我們輸入人的像素,我們希望經過網絡以後,輸出是(1,0),當我們輸入是車,希望經過輸出結果是(0,1)。

下面就來看看我們怎麼調整參數。

我們開始輸入一張人的圖片,輸出一個(y1,y2),那麼開始輸出的(y1,y2)不是(1,0),我們想通過不斷調整權重和偏執讓它變(1,0),我們有辦法嗎?

我們就要找差距,我們用(1,0) - (y1,y2),相減後結果是(1-y1,0-y2),這個就是差距,我們在幾何裡學過歐氏距離一個點到另一個點的距離公式: L = ((x1-x2)^2 + (y1-y2)^2)^1/2,這個不會說了吧,我們可以把我們的輸出和希望的輸出得出一個距離,這個距離就是輸出和目標的差距離,我們用LOSS來表示,專業術語叫做損失。我們只要調整權重不斷的減小這個損失,就可以能讓網絡更接近我們的目標

我們先來看一種笨辦法,我們隨機選一個權重,我們讓它變大一點,計算出一個LOSS,讓它變小一點計算出一個LOSS,兩個LOSS比較一下,如果誰小就說明誰離調整的目標更近,就是有效的更新,如果通過暴力計算,我們對每個權重和偏執做調整, 。讓LOSS變得最小,那麼我們的函數就最接近我們的預期,比如我們輸入人和輸的圖片,輸出的點離(1,0)近,說明是人,離(0,1)近,說明是車。這樣,我們就有一個識別網絡。

我們把調整參數,讓LOSS最小的動作叫訓練

現在的問題成為,如何調整參數讓:目標與輸出距離縮小。不斷調整參數讓預期點與輸出的點的距離縮小

我們定義了LOSS,LOSS稱為損失。

我們複習一下函數的定義,自變量X和因變量Y。X->Y的映射F叫(X,Y)的函數。

對於某次固定的輸入值,我們把權重W看成自變量,LOSS看成因變量,那麼我們把它寫成函數:

LOSS = F(W)

我們看到這個函數以後,我們要讓LOSS變小,那麼我們怎麼調整W呢?我們學過導數知道,dy/dx,也就說是說,我們把x往導數反方向移動,可以讓函數值變小,那麼我們就這樣調整:對於 y=f(x)來說:x0 = x0 - (dy/dx) * delta ,delta是一個很小量,這樣就能減小y值,同理,我們的LOSS求對W的導數,將W值往反向調整,也可以減少LOSS,這樣我們就有了調整W的方法,這樣,我們就有辦法調整W讓LOSS減小了。

這就是反向傳播算法BP。BP主要是求LOSS對每個權重和偏執參數的偏導數,並把參數往偏導數的反向調整減小以減小LOSS,這樣我們求出偏導數就可以對參數進行更新了。

BP算法是部分神經網絡調整參數的一種方法,其核心思想是通過計算參數的偏導數來調整參數降低損失值。

下次我講講BP算法


分享到:


相關文章: