1. 程式人生 > >BP演算法和RBF演算法的網路逼近

BP演算法和RBF演算法的網路逼近

最近開始做自己的畢業設計,開始記錄相關的智慧控制學習心得和知識點.

BP演算法

bp演算法全稱BackPropagation,也就是誤差反向傳播演算法,它的基本思想是梯度下降法,採用梯度搜索技術,通過鏈式求導法則,最終使得網路輸出和期望輸出的誤差方差最小.BP演算法的圖如下圖所示:
這裡寫圖片描述
三層網路:輸入層,隱藏層和輸出層.網路的前向傳播和誤差反向傳播可參考這篇部落格:

大白話講解BP演算法.這裡主要涉及到的是對於sigmod函式的求導.

f ( x ) = 1 1
+ e x

其求導結果如下:
f ( x ) = f ( x ) ( 1 f ( x ) )

對於鏈式求導法則,可以舉一個簡單的例子:
f ( x ) = x 2 , g ( x ) = 2 x + 1 , y = f ( g ( x ) ) 則有:
d y d x = d y d g ( x ) d g ( x ) d x = 2 g ( x ) 2 = 8 x + 4

這裡有一個BP演算法逼近的示例(《智慧控制》第4版 page131),系統的傳遞函式如下:

y ( k ) = u ( k ) 3 + y ( k 1 ) 1 + y ( k 1 ) 2 1 m s , u ( k ) = 0.5 s i n ( 6 π t ) , 2 6 1 , W 1 , W 2 [ 1 , + 1 ] , η = 0.5 , α = 0.1

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是一種區域性逼近,其輸入層到輸層是非線性對映,但其隱藏層到輸出層是線性對映的.且輸入層到隱藏層直接求和,不需要引數迭代.

高斯徑向基函式

首先給出高斯徑向基函式的表示式:

f ( x ) = e x p ( | | x c | | 2 2 b ) ,