BP神經網路 真實值不一定是真實值

2022-07-09 18:51:10 字數 3933 閱讀 5858

bp神經網路學習筆記——祺祐

數學原理部分

還學習了

總結並思考

bp 神經網路(back propagation neural network),即反向傳播神經網路,是人工神經網路的一種,是一種按照誤差逆向傳播演算法訓練的多層前饋神經網路。簡而言之,bp 演算法就是採用梯度下降法來計算網路誤差平方的最小值。

此示意圖介紹的是含有單一隱藏層的bp神經網路,實際bp神經網路的隱藏層,可以是單層的也可以是多層的。\(x_1、x_2、...x_n\)是輸入資料,\(\overline _ \)是輸出層產生的。

與權重\(w_^1\)計算得到\(s_j^1\)(其中\(j\)是輸出層第\(j\)個節點的輸出):

\[s _ ^ = \sum _ ^ x _ \cdot w _ ^

\]再將\(s_j^1\)作為隱藏層的輸入,結合權重\(w_^2\)和啟用函式\(\theta(\cdot)\)計算得到\(s_j^2\):

\[s _ ^ = \sum _ ^ \theta ( s _ ^ ) \cdot w _ ^

\]其中啟用函式\(\theta(\cdot)\),一般使用s型函式(即sigmoid函式)

正向傳播的計算結果與實際值具有一定差距,因而需要使用誤差來糾正權重,再通過一次次的迭代使結果更加接近真實值。先得到輸出層\(\delta\)然後將輸出層\(\delta\)根據連線權重往隱層傳輸。

所有輸出層都會產生乙個誤差\(\delta e\) , 為使函式連續可導 , 這裡最小化方根差,定義損失函式\(l(e)\):

\[l ( e ) = \frac s s e = \frac \sum _ ^ e _ ^ = \frac \sum _ ^ ( \overline _ - y _ ) ^

\]\(e_j\)——輸出層產生的誤差

梯度下降法

曲面上方向導數的最大值的方向代表梯度的方向,因此我們在做梯度下降的時候,應該是沿著梯度的反方向進行權重的更新,可以有效的找到全域性的最優解。

\[\begin

l(e)降低\rightarrow e減小\rightarrow &\underline& \rightarrow 權重w_更新\\

&\downarrow&\\

&步長,學習率(係數)&

\end

\]

\[\frac ^ } = \frac ^ } \cdot \frac ^ } ^ }

\]由於

\[s _ ^ = \sum _ ^ x _ \cdot w _ ^

\]所以

\[\frac ^ } ^ } = x _

\]帶入式(6)得:

\[\frac ^ } = x _ \cdot \frac ^ }

\]再求\(\frac ^ }\):

\[\frac ^ } = \sum _ ^ \frac ^ } \cdot \frac ^ } ^ }

\]由於

\[s _ ^ = \sum _ ^ \theta ( s _ ^ ) \cdot w _ ^

\]所以

\[\frac ^ } ^ } = \frac ^ } ^ ) } \cdot \frac ^ ) } ^ } = w _ ^ \cdot \theta ^ ( s _ ^ )

\]帶入式(10)得:

\[\frac ^ } = \sum _ ^ \frac ^ } \cdot w _ ^ \cdot \theta ^ ( s _ ^ ) = \theta ^ ( s _ ^ ) \cdot \sum _ ^ \frac ^ } \cdot w _ ^ \]令

\[\delta _ ^ = \frac ^ }

\]則隱藏層\(\delta\):

\[\delta _ ^ = \theta ^ ( s _ ^ ) \cdot \sum _ ^ \delta _ ^ \cdot w _ ^

\]輸出層\(\delta\):

\[\begin

\delta _ ^ = \frac ^ } &=& \frac ^ \frac ( \overline _ - y _ ) ^ } ^ } \\

&=& ( \overline _ - y _ ) \cdot \frac _ } ^ } \\

& =& e _ \cdot \frac _ } ^ } \\

& =& e _ \cdot \theta ^ ( s _ ^ ) \\

\end

\]

反向傳播之後我們得到了\(\delta\),現在可以得到權重的梯度了

第一層梯度(輸入和隱藏)

\[\frac ^ } = x _ \cdot \delta _ ^

\]第二層梯度(隱藏和輸出)

\[\frac ^ } = \frac ^ } \cdot \frac ^ } ^ } = \delta _ ^ \cdot \theta ( s _ ^ )

\]每個權重的梯度都等於與其相連的前一層節點的輸出乘以與其相連的後一層的反向傳播的輸出

得到梯度後,可根據以下公式更新權重:

\[\delta w _ ^ = - \eta \frac ^ } = -\eta \cdot x _ \cdot \delta _ ^ \\

w _ ^ ( n + 1 ) = w _ ^ ( n ) - \eta \cdot x _ \cdot \delta _ ^

\]\(\eta\)——學習率,步長。代表權值改變速度。

至此,我們通過梯度下降法更新了一次權重,也就意味著我們能夠進行一次又一次的迭代迴圈,得到我們想要的結果。

迴圈的迭代將以誤差達到我們所接受的範圍進行終止。

全域性誤差:

\[e=\frac\sum_^ \sum_^(\overline(p)-y_j(p))

\]bp神經網路作為全連線的神經網路,其數學原理主要是用的是高等數學的偏導數,導數等知識,並不難理解,並且在github中油不少此類**,matlab中也可以直接使用命令實現神經網路的構建。

bp神經網路的**結果真實性需要大量資料為保障。但對於工程實際問題,越複雜、越難以實現的專案資料恰恰越少。所以對於複雜專案,沒有資料的支撐,還不如使用公式推導,模糊綜合等方式。

例如,如果想對海上鑽井平台的風險性進行評估**。世界上一共有多少艘?能夠拿到的資料又有多少組?誤差會有多大?

我們知道,**值是通過不斷更新的權重乘以輸出值,在經過啟用函式最後進行輸出。而最後進行誤差計算的時候,實際值又如何獲得?這是我在處理筆記時的一點疑惑。

**得到的結果是風險對應的值,實際值也是風險對應的值,如果我能得到實際值,那為什麼還要**呢?

對於例子中的東西,我目前了解到的解決辦法是專家打分,模糊評價等方法進行真實值的得出。也就是說,真實值不一定是實際的,也可能是貼近實際的乙個值,但通過迭代資料的離散可以判斷訓練結果是否在貼近實際情況。

能人不一定是好領導

在工作中,許多大家公認的聰明能幹的人被提拔為領導。但有相當一部分人沒成為好領導,還有的人在領導崗位上非常失敗。下面,剖析一下失敗的原因 一 特能幹的領導。有的領導確實特別有本事,在本單位中,十八般武藝,樣樣精通,是不可多得的全才。由於自己特能幹,就經常看不慣別人幹的活,口頭語 你這樣幹的不行 看我怎...

路不一定是死的

前段時間給樓下座報表開發,asp.net2.0,客戶有乙個需求,就是報表中要求有 pdf格式的。起初,我有 gridview 匯出到word 或者excel 的資料,所以實現起來很容易,而匯出成 pdf,就犯難了,因為 pdf不是微軟自己的技術,所以在 net2.0 下是不可能有這樣現成的介面了。後...

能人不一定是好領導

在工作中,許多大家公認的聰明能幹的人被提拔為領導。但有相當一部分人沒成為好領導,還有的人在領導崗位上非常失敗。下面,剖析一下失敗的原因 一 特能幹的領導。有的領導確實特別有本事,在本單位中,十八般武藝,樣樣精通,是不可多得的全才。由於自己特能幹,就經常看不慣別人幹的活,口頭語 你這樣幹的不行 看我怎...