神經網路分為三層:輸入層(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 此時系統...