神經網路是乙個有多個輸入的函式,每一層的節點的輸出為上一層節點輸出的函式:yi=f(bi+e(wij*xj))。 e(wij*xj)表示對j=1->n(n為上層節點數),計算wij*xj的和。函式f一般為f(x)=1/(1+e^(-x))。x^y表示x的y次方
上一層的輸出又可以表示為上上層輸出的函式,直到輸入層,展開來後輸出層就是輸入層的函式:outi=fi(in1,in2,...),out=[out1,out2,..]=vf(in1,in2,...),輸出結果out為乙個陣列或者叫向量,fi與vf都是函式,vf(x)=[f1(x),f2(x),...]
bp網路通過輸出out與期望的標準輸出std(也是乙個陣列或者說向量)進行比較,來修改網路的權值,比較函式funce(out,std)的輸出為數值,表示out與std的差異,有不同的funce函式可以使用,比如funce(out,std)=0.5*e( (outi-stdi)^2 ),e( (outi-stdi)^2)表示(out1-std1)^2+(out2-std2)^2+...,funce越小表示out與std越接近,bp網路的學習目標是使funce達到盡可能的小(應該說是對所有輸入達到盡可能的小,functotal=(funce1+funce2+...+funcen)/n,funcei表示對第i個輸入的funce(out,std)的值,不過感覺差別不大,計算functotal感覺麻煩了點)
通過計算funce(out,std)可以獲取對於本次輸入,神經網路的輸出與期望的輸出的差異,接下來根據差異對權值進行修改,注意out是輸入的函式,也是權值的函式,現在輸入為固定值,可以修改的為權值,即現在權值才是變數,比如y=a*x,可以理解為y是x的函式,也可以理解為y是a的函式,主要看x與a哪個是可變數。funce為out的函式,所以funce也是權值的函式,funce=func(b,w)=func(v)(b表示閾值的集合,w表示權重的集合,要詳細表示太麻煩,比如第i層第j個節點的閾值(表示成bij?),比如第i層第j個節點對於上一層第k個節點的權重(表示成wijk?),閾值與權重都是權值,v表示權值的集合,v=[v1,v2,...])
權值修改利用最速下降法,通過求導,往導數反方向移動來使函式進入區域性最小
用@(y,x)表示函式y對x的偏導數(正真的偏導數的符號不知道要怎麼弄出來)
對於func(v),如果vi修改了mi,,則func(v)的值修改了func(m1,m2,....),用偏導數表示:func(v)修改了m1*@(func,v1)+m2*@(func,v2)+...,要func(v)盡可能的小,可以使vi修改 -m*@(func,vi),m為乙個比較小的正數,比如0.1,0.01之類的,如此的話func會修改 -m*@(func,v1)*@(func,v1)-m*@(func,v2)*@(func,v2)-...,顯而易見@(func,vi)*@(func,vi)=@(func,vi)^2為非負數,m也為正數,再加上乙個負號,結果為負數,所以func會變小,通過這種方法修改權值可以使func慢慢的減小到乙個區域性最小值(顯然最速下降法沒法判斷區域性最小與函式的實際最小值的區別,所以只能到區域性最小)
也可以考慮對函式functotal(func1,func2,...funcn)=(func1+func2+....+funcn)/n求權值的偏導數來修改權值
以上為bp網路函式的學習計算方法,只知道神經網路通過學習可以用來辨別手寫字母之類的,至於為什麼可以學習到辨別能力,還沒明白
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神經網路的學習
神經網路模型由輸入層 隱藏層和輸出層組成。每一層都能夠看作是上一層 如果有 的輸出層和下一層 如果有 的輸入層。先來介紹一下向前傳遞演算法。如圖1所示即為簡單的三層神經網路模型向前傳遞演算法的計算過程。我們可以a l 表示第l層單元的資料,與邏輯回歸類似,a l g z l 這樣可以很容易看出哪乙個...
BP神經網路
基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...