反向传播(Back propagation)算法推导具体过程
生活随笔
收集整理的這篇文章主要介紹了
反向传播(Back propagation)算法推导具体过程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
BP算法的成就無需多言,現在就來進行一下具體的推導。推到過程依賴于西瓜書(《機器學習》 周志華)
1、首先定義一個單隱層神經網絡,具體參考西瓜書102頁:
2、各類符號的意義:
3、 初始化公式:
4、分別推導:
BP算法代碼:
x = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A1:Q8'); y = xlsread('C:\Users\icefire\Desktop\ml\西瓜3.xlsx', 'sheet1', 'A9:Q9'); x=x'; y=y'; %將y設為0,1兩類 y=y-1; %獲取輸入參數的樣本數與參數數 [m,n]=size(x);t=1; %輸出層神經元v=rand(n,n+1); %輸入層與隱層的權值 w=rand(n+1,t); %隱層與輸出層的權值 thy=rand(n+1); %隱層閥值 thj=rand(t); %輸出層閥值 ty=zeros(m,t); %輸出層輸出 b=zeros(n+1); %隱層輸出 gj=zeros(t); %累計誤差對w,thj求導的參數 eh=zeros(n+1); %累計誤差對v,thy求導的參數 xk=1; %學習率kn=0; %迭代次數 sn=0; %同樣的累計誤差值累積次數 old_ey=0; %前一次迭代的累計誤差 while(1) kn=kn+1;ey=0; %當前迭代的累計誤差for i=1:m%計算隱層輸出 for j=1:n+1ca=0;for k=1:nca=ca+v(k,j)*x(i,k);endb(j)=1/(1+exp(-ca+thy(j)));end%計算輸出層輸出for j=1:tcb=0;for k=1:n+1cb=cb+w(k,j)*b(k);endty(i,j)=1/(1+exp(-cb+thj(j)));end%計算當前迭代累計誤差for j=1:tey=ey+((y(i)-ty(i,j))^2)/2;end%計算w,thj導數參數for j=1:tgj(j)=ty(i,j)*(1-ty(i,j))*(y(i)-ty(i,j));end%計算v,thy導數參數for j=1:n+1teh=0;for k=1:tteh=teh+w(j,k)*gj(k);endeh(j)=teh*b(j)*(1-b(j));end%更新v,thyfor j=1:n+1thy(j)=thy(j)+(-xk)*eh(j);for k=1:nv(k,j)=v(k,j)+k*eh(j)*x(i,k);endend%更新thj,wfor j=1:tthj(j)=thj(j)+(-xk)*gj(j);for k=1:n+1w(k,j)=w(k,j)+xk*gj(j)*b(k);endend end%迭代終止判斷if(abs(old_ey-ey)<0.0001)sn=sn+1;if(sn==100)break;endelseold_ey=ey;sn=0;endend總結
以上是生活随笔為你收集整理的反向传播(Back propagation)算法推导具体过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32----ADC多通道采集
- 下一篇: 以LeNet为例分析CNN中的参数量