知識布局-神經網路-數學原理
前言
關於神經網路到底是什麼?這個問題,我回答不了,我只知道,神經網路是一個模型。神經網路分幾個層次,分別是輸入層,隱層,輸出層,這些層是由神經元組成。
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個神經元的輸入參數為:
則可以計算出來各個隱層神經元的輸入參數:
由於 ,f為sigmoid函數,故:
...
輸出層第j個神經元的輸入參數為:
按照這個順序直到算出輸出層結果。
反向參數更新
在實際問題中,我們可能有這樣的數據D={(x1,y1),(x2,y2)...}。我們拿到這些已知數據來訓練模型。用生成的模型來預測新的數據。如果我們使用Bp神經網路模型的話,訓練這個模型應用的就是誤差逆向傳播的思路。在不斷的減小誤差的過程中,更新相應的參數,從而得到一個準確的模型。
對於訓練樣本 ,假設神經網路輸出為
其中:
網路在 上的均方誤差為:
(說明:k是樣本的標識,l是輸出層神經元的個數,本例中l=3)
我們採用梯度下降演算法來進行更新參數,更新公式為:
通過此方法我們能夠求出wjk,θj,vij,γh這幾個參數的更新公式。然後通過迭代計算得到其值。
對於隱層神經元h和輸出層神經元j的連接權
其中:
根據鏈式求導法則:
這樣我們就得到了更新公式,通過迭代,我們就可以求出 。
與此類似我們可以求出θj,vij,γh的更新公式,這樣就可以求出相應的參數。
這樣我們就完成了bp神經網路的初步學習。
總結
說出來慚愧,我以前是應用數學專業的。由於數學學的差才被迫去搞程序猿。兜兜轉轉後,又來看這些公式了。通過本次學習,我明白了原理和代碼一樣重要。原理是告訴我們這個東西的形態,代碼可以幫助我們去解決問題。
引用
周志華 機器學習西瓜書 神經網路章節
推薦閱讀:
TAG:神經網路 | 機器學習 | 機器學習周志華著書籍 |