知識布局-神經網路-數學原理

前言

關於神經網路到底是什麼?這個問題,我回答不了,我只知道,神經網路是一個模型。神經網路分幾個層次,分別是輸入層,隱層,輸出層,這些層是由神經元組成。

1>預測數據

大概流程是:輸入層--->隱層--->輸出層

2>參數更新

每個神經元上面有一些參數,機器訓練完成之後,模型的參數就都確定了(後續參數仍然可以更新)。訓練部分,我在下面的文章中進行詳細描述。

故本文分前向數據預測和反向參數更新(反向誤差傳遞)兩個部分。

註:本文是理論介紹不涉及編碼,此處有tensorflow的代碼實現。

bp神經網路

輸入層3個神經元;一個隱層,4個神經元;輸出層3個神經元。如下圖所示:

相關說明

輸入層第i個神經元和隱層第j個神經元的鏈接權為vij

隱層第j個神經元和輸出層第k個神經元的連接權為wjk

隱層第h個神經元的閾值用γh表示

輸出層第j個神經元的閾值用θj表示

激活函數使用sigmoid函數

註:vij,wjk,γh,θj這些參數都需要訓練才能得到。在前向數據預測章節,我們假設模型已經訓練完了。

前向數據預測

數據從輸入層進入網路,然後經過隱層,最後通過輸出層輸出。

我們假設這個神經網路模型已經訓練完成。也就是相關說明裡面的幾個參數都已經確定。

假設輸入層到隱層的權係數V為:

假設閾值γ

...(還有幾個參數,由於篇幅問題,就不假設了)

這時我們輸入數據X為:

隱層第h個神經元的輸入參數為:

則可以計算出來各個隱層神經元的輸入參數:

α_{1}=v_{11}*x_{1}+v_{21}*x_{2}+v_{31}*x_{3}=1*1+1*2+1*5=8

α_{2}=v_{12}*x_{1}+v_{22}*x_{2}+v_{32}*x_{3}=1*2+1*3+1*6=11

α_{3}=v_{13}*x_{1}+v_{23}*x_{2}+v_{33}*x_{3}=1*3+1*4+1*7=14

α_{4}=v_{14}*x_{1}+v_{24}*x_{2}+v_{34}*x_{3}=1*4+1*5+1*8=17

由於 eta=f(α-γ) ,f為sigmoid函數,故:

...

輸出層第j個神經元的輸入參數為:

按照這個順序直到算出輸出層結果。

反向參數更新

在實際問題中,我們可能有這樣的數據D={(x1,y1),(x2,y2)...}。我們拿到這些已知數據來訓練模型。用生成的模型來預測新的數據。如果我們使用Bp神經網路模型的話,訓練這個模型應用的就是誤差逆向傳播的思路。在不斷的減小誤差的過程中,更新相應的參數,從而得到一個準確的模型。

對於訓練樣本 (x_{k},y_{k}) ,假設神經網路輸出為

其中:

網路在 (x_{k},y_{k}) 上的均方誤差為:

(說明:k是樣本的標識,l是輸出層神經元的個數,本例中l=3)

我們採用梯度下降演算法來進行更新參數,更新公式為:

(註:μ為學習率)

通過此方法我們能夠求出wjk,θj,vij,γh這幾個參數的更新公式。然後通過迭代計算得到其值。

對於隱層神經元h和輸出層神經元j的連接權 w_{hj}

其中:

均方差

輸出層神經元輸出值

輸出層神經元的輸入參數

激活函數

根據鏈式求導法則:

這樣我們就得到了更新公式,通過迭代,我們就可以求出 w_{hj}

與此類似我們可以求出θj,vij,γh的更新公式,這樣就可以求出相應的參數。

這樣我們就完成了bp神經網路的初步學習。

總結

說出來慚愧,我以前是應用數學專業的。由於數學學的差才被迫去搞程序猿。兜兜轉轉後,又來看這些公式了。通過本次學習,我明白了原理和代碼一樣重要。原理是告訴我們這個東西的形態,代碼可以幫助我們去解決問題。

引用

周志華 機器學習西瓜書 神經網路章節

推薦閱讀:

TAG:神經網路 | 機器學習 | 機器學習周志華著書籍 |