BP神經網路學習 1

2021-10-03 16:26:15 字數 1317 閱讀 4927

神經網路分為三層:輸入層(input layer),隱含層(hidden layer),輸出層(output layer)

(輸入層的個數由輸入層的特徵個數決定,而不是樣本的個數)

假設輸入層有n個節點,隱含層有m個節點,輸出層有k個節點

令w_ni_mj為輸入層第i個節點到隱含層第j個節點的乙個連線強度(這兩個節點之間的權值),bj為隱含層第j個節點的閾值

第i個輸入節點經過第j個隱含層的輸出為

w_ni_mj*xi+bj

所有的輸入節點經過第j個隱含層的輸出為

s=sum+bj i=1,2,3…n

當然並不能把s直接輸出

要通過傳遞函式/啟用函式(transfer function/activate function )f(.) 進行轉換就可以輸出了

bp神經網路由資料流的前向運算和誤差分析的反向傳播兩部分構成

正向傳播

方向為輸入層->隱含層->輸出層

每層神經元狀態只影響下一層神經元

使用規定好的引數來一層一層的進行計算直到最後輸出

反向傳播

當得到的值不符合期望值時,就會反向傳播根據損失函式來更新每一層神經元的引數值

神經網路的訓練就是不斷的在正反向傳播的交替中執行

每一次迭代都會更新一次閾值,通過梯度下降法來找尋最佳的閾值

有多少個訓練樣本就會進行多少次迭代

設神經網路三層分別為

正向:每一層都要進行的運算

z=wx+b

a=relu(z)

relu是在隱含層採用的啟用函式(最開始是採用的sigmoid函式,但是由於該函式容易出現梯度消失的情況,所以選擇效能更好的relu函式)

至於為什麼要加入啟用函式呢?

可以看到第乙個式子是乙個線性的函式,為了能夠更好的畢竟非線性的情況,所以引入了啟用函式,來對第乙個函式所得到的值進行變形

損失函式(使用交叉熵)

二分類問題:

l(y^,y) = -[y·log(y^ )+(1-y)·log(1-y^ )]

多分類問題:

l=-σy(j)·y^(j)

最終的cost

j(w,b) = 1/m·σl(y^(i),y(i))

現在的許多機器學習框架類如tensorflow等都不需要我們自己來構建反向傳播過程,只需要自己構建好正向傳播過程就可以了

//待我寫完就傳**

bp神經網路學習

import numpy as np 使用邏輯回歸進行分類 defnonlin x,deriv false if deriv true return x 1 x return 1 1 np.exp x 待分類的資料 x np.array 0,0,1 0,1,1 1,0,1 1,1,1 print x...

BP神經網路

基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...

BP神經網路

x 為輸入向量,y為隱藏層的神經元,z 為輸出層,d為目標真實值,本文預設 z 不經過sigmod處理。x y的權重為 w,y z的權重為 v yj ix iwij 1 oyi f y j 2 其中激勵函式f x 1 1 e x f x f x 1 f x 3 z k j f yj vjk 此時系統...