當(dāng)前位置:
首頁 >
反向传播(Back propagation)算法推导具体过程
發(fā)布時(shí)間:2025/3/15
39
豆豆
生活随笔
收集整理的這篇文章主要介紹了
反向传播(Back propagation)算法推导具体过程
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
BP算法的成就無需多言,現(xiàn)在就來進(jìn)行一下具體的推導(dǎo)。推到過程依賴于西瓜書(《機(jī)器學(xué)習(xí)》 周志華)
1、首先定義一個(gè)單隱層神經(jīng)網(wǎng)絡(luò),具體參考西瓜書102頁:
2、各類符號的意義:
3、 初始化公式:
4、分別推導(dǎo):
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設(shè)為0,1兩類 y=y-1; %獲取輸入?yún)?shù)的樣本數(shù)與參數(shù)數(shù) [m,n]=size(x);t=1; %輸出層神經(jīng)元v=rand(n,n+1); %輸入層與隱層的權(quán)值 w=rand(n+1,t); %隱層與輸出層的權(quán)值 thy=rand(n+1); %隱層閥值 thj=rand(t); %輸出層閥值 ty=zeros(m,t); %輸出層輸出 b=zeros(n+1); %隱層輸出 gj=zeros(t); %累計(jì)誤差對w,thj求導(dǎo)的參數(shù) eh=zeros(n+1); %累計(jì)誤差對v,thy求導(dǎo)的參數(shù) xk=1; %學(xué)習(xí)率kn=0; %迭代次數(shù) sn=0; %同樣的累計(jì)誤差值累積次數(shù) old_ey=0; %前一次迭代的累計(jì)誤差 while(1) kn=kn+1;ey=0; %當(dāng)前迭代的累計(jì)誤差for i=1:m%計(jì)算隱層輸出 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%計(jì)算輸出層輸出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%計(jì)算當(dāng)前迭代累計(jì)誤差for j=1:tey=ey+((y(i)-ty(i,j))^2)/2;end%計(jì)算w,thj導(dǎo)數(shù)參數(shù)for j=1:tgj(j)=ty(i,j)*(1-ty(i,j))*(y(i)-ty(i,j));end%計(jì)算v,thy導(dǎo)數(shù)參數(shù)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總結(jié)
以上是生活随笔為你收集整理的反向传播(Back propagation)算法推导具体过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32----ADC多通道采集
- 下一篇: 以LeNet为例分析CNN中的参数量