BP演算法和RBF演算法的網路逼近
阿新 • • 發佈:2018-12-06
最近開始做自己的畢業設計,開始記錄相關的智慧控制學習心得和知識點.
BP演算法
bp演算法全稱BackPropagation,也就是誤差反向傳播演算法,它的基本思想是梯度下降法,採用梯度搜索技術,通過鏈式求導法則,最終使得網路輸出和期望輸出的誤差方差最小.BP演算法的圖如下圖所示:
三層網路:輸入層,隱藏層和輸出層.網路的前向傳播和誤差反向傳播可參考這篇部落格: 大白話講解BP演算法.這裡主要涉及到的是對於sigmod函式的求導.
其求導結果如下:
對於鏈式求導法則,可以舉一個簡單的例子:
則有:
這裡有一個BP演算法逼近的示例(《智慧控制》第4版 page131),系統的傳遞函式如下:
clear all
close all
xite = 0.5;%學習速率
alfa = 0.1;%動量因子,動量因子大一點可以減小振盪,加快收斂,太大了會發散
w2=rands(6,1);%隱藏層和輸出層的連線(隱藏層6個神經元)
w2_1=w2;w2_2=w2_1;
w1=rands(2,6);%輸入層和隱藏層的連線(輸入層兩個u(k)和y(k))
w1_1=w1;w1_2=w1;
dwl=0*w1;%2x6,初始化為0
x=[0,0]';%輸入初始化
u_1 = 0;
y_1 = 0;
I=[0,0,0,0,0,0]';
Iout=[0,0,0,0,0,0]';
FI=[0,0,0,0,0,0]';
ts=0.001;%步長
for k = 1:1:1000
time(k) = k*ts;
u(k) = 0.5*sin(3*2*pi*k*ts);%輸入u(k)
y(k)=u_1^3+y_1/(1+y_1^2);%實際輸出y(k)
for j =1:1:6
I(j)=x'*w1(:,j);%I是一個三維的陣列,輸入層乘以權重到隱藏層
Iout(j)=1/(1+exp(-I(j)));%sigmod函式,即f(net)
end
yn(k)=w2'*Iout;%輸出
e(k)=y(k)-yn(k)%誤差
w2=w2_1+(xite*e(k))*Iout+alfa*(w2_1-w2_2);%隱藏層到輸出層的梯度,此處求導不涉及sigmod 函式
for j=1:1:6
FI(j)=exp(-I(j))/(1+exp(-I(j)))^2;%sigmod函式的求導結果
end
for i=1:1:2
for j =1:1:6
dw1(i,j)=e(k)*xite*FI(j)*w2(j)*x(i);%隱藏層到輸入層的誤差梯度
end
end
w1=w1_1+dw1+alfa*(w1_1-w1_2);%更新輸入層到隱藏層權重
yu=0;
for j=1:1:6
yu=yu+w2(j)*w1(1,j)*FI(j);
end
dyu(k)=yu;%Jacobian資訊
x(1)=u(k);
x(2)=y(k);
w1_2=w1_1;w1_1=w1;
w2_2=w2_1;w2_1=w2;
u_1=u(k)
y_1=y(k)
end
figure(1);
plot(time,y,'r',time,yn,'b');
xlabel('time(s)');ylabel('y and yn');
figure(2);
plot(time,y-yn,'r')
xlabel('time(s)');ylabel('error');
figure(3);
plot(time,dyu);
xlabel('time(s)');ylabel('dy')
模擬結果如下:
BP演算法只要有足夠多的隱藏層和隱藏節點,理論上是可以逼近任意的非線性系統的,它屬於全域性逼近演算法,具有較強的泛化能力.但是BP演算法待優化引數多,收斂速度慢,難以確定隱藏層和隱藏節點數,很多時候要靠經驗試湊.難以適應實時控制的要求.
RBF
徑向基函式(Radial Basis Function,RBF)神經網路是一種三層網路.其學習過程和BP演算法類似,二者的主要區別在於:(1)隱藏層的啟用函式不同,BP演算法的啟用函式是sigmod函式,RBF的啟用函式是高斯基函式;(2)BP演算法是全域性的逼近,每次學習都要進行所有網路連線的權重迭代更新,RBF是一種區域性逼近,其輸入層到輸層是非線性對映,但其隱藏層到輸出層是線性對映的.且輸入層到隱藏層直接求和,不需要引數迭代.
高斯徑向基函式
首先給出高斯徑向基函式的表示式: