RBF神经网络和拟合实例
RBF神經(jīng)網(wǎng)絡(luò)及擬合實(shí)例
- RBF神經(jīng)網(wǎng)絡(luò)介紹
- RBF神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
- RBF神經(jīng)網(wǎng)絡(luò)算法
- RBF神經(jīng)網(wǎng)絡(luò)逼近算法
- 采用RBF神經(jīng)網(wǎng)絡(luò)逼近非線性函數(shù)
- 神經(jīng)網(wǎng)絡(luò)逼近結(jié)果
- 代碼如下
RBF神經(jīng)網(wǎng)絡(luò)介紹
RBF神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
徑向基函數(shù)(Radial Basis Function, RBF)神經(jīng)網(wǎng)絡(luò)是一種單隱含層的三層前饋神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示
RBF神經(jīng)網(wǎng)絡(luò)模擬了人腦中局部調(diào)整,相互覆蓋接受域(或者說感受域,Receptive Field)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。與BP神經(jīng)網(wǎng)絡(luò)相同,研究人員已經(jīng)證明RBF神經(jīng)網(wǎng)絡(luò)能夠以任何精度逼近任意非線性函數(shù)。
RBF神經(jīng)網(wǎng)絡(luò)算法
便于分析,記RBF神經(jīng)網(wǎng)絡(luò)的輸入為m維,隱含層有s1s_1s1?個(gè)神經(jīng)元,輸出層有s2s_2s2?個(gè)神經(jīng)元。
RBF神經(jīng)網(wǎng)絡(luò)隱含層神經(jīng)元的激活函數(shù)為如下所示的高斯基函數(shù)
hj=exp?(?∣∣x?cj∣∣22bj2),j=1,2,...,s1h_j = \exp(-\frac{||\bm{x}-\bm{c}_j||^2}{2b_j^2}),j=1,2,...,s_1 hj?=exp(?2bj2?∣∣x?cj?∣∣2?),j=1,2,...,s1?
其中,cj=[cj1,cj2,...,cjm]T\bm{c}_j=[c_{j1},c_{j2},...,c_{jm}]^Tcj?=[cj1?,cj2?,...,cjm?]T為第j個(gè)隱含層神經(jīng)元高斯基函數(shù)的中心向量,mmm表示網(wǎng)絡(luò)輸入x\bm{x}x的維數(shù),bjb_jbj?為第j個(gè)隱含層神經(jīng)元高斯基函數(shù)的寬度。與之前提及的BP神經(jīng)網(wǎng)絡(luò)中的sigmod函數(shù)不同,高斯基函數(shù)只在有限的范圍內(nèi),輸入是非零的,超過一定的范圍,其輸出則為零。
在一維情況下,不同的cj\bm{c}_jcj?和bjb_jbj?對(duì)高斯基函數(shù)的影響如下圖所示
可以看到,bjb_jbj?越大,高斯基函數(shù)的非零輸出區(qū)域越大,表明對(duì)輸入的映射能力越強(qiáng)。cj\bm{c_j}cj?表示非零輸出區(qū)域的中心位置,輸入離中心越近,其輸出值會(huì)更大,表明高斯基函數(shù)對(duì)輸入更加敏感。
RBF神經(jīng)網(wǎng)絡(luò)的輸出為
y=WH\bm{y} = \bm{WH} y=WH
其中,W∈Rs2×s1\bm{W}\in R^{s_2 \times {s_1}}W∈Rs2?×s1?為RBF神經(jīng)網(wǎng)絡(luò)輸出層權(quán)值矩陣,H∈Rs1H \in R^{s_1}H∈Rs1?為隱含層輸出,H=[h1,h2,...,hs1]T\bm{H} = [h_1,h_2,...,h_{s_1}]^TH=[h1?,h2?,...,hs1??]T。
RBF神經(jīng)網(wǎng)絡(luò)逼近算法
相較BP神經(jīng)網(wǎng)絡(luò),RBF神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)更加簡單,同時(shí)需要調(diào)節(jié)的參數(shù)也更少,只有輸出層的權(quán)值矩陣W\bm{W}W需要在訓(xùn)練過程中調(diào)節(jié)。與BP神經(jīng)網(wǎng)絡(luò)類似,我們可以以采用梯度下降法來調(diào)節(jié)權(quán)值矩陣。
定義RBF神經(jīng)網(wǎng)絡(luò)的估計(jì)誤差指標(biāo)為
E=12∑i=1s2∣∣ei∣∣2=12∑i=1s2∣∣yd?y∣∣2E =\frac{1}{2}\sum_{i=1}^{s_2}||e_i||^2= \frac{1}{2} \sum_{i=1}^{s_2}|| \bm{y_d}-\bm{y}||^2 E=21?i=1∑s2??∣∣ei?∣∣2=21?i=1∑s2??∣∣yd??y∣∣2
其中,yd\bm{y_d}yd?為期望輸出。
對(duì)誤差指標(biāo)關(guān)于輸出層權(quán)值矩陣W\bm{W}W中元素進(jìn)行求導(dǎo)得到
?E?Wi0=?E?ei?ei?yi?yi?Wi0=?eihi\frac{\partial E}{\partial W_{i0}}=\frac{\partial E}{\partial e_i} \frac{\partial e_i}{\partial y_i} \frac{\partial y_i}{\partial W_{i0}}=-e_ih_i ?Wi0??E?=?ei??E??yi??ei???Wi0??yi??=?ei?hi?
那么,權(quán)值可按如下方式調(diào)節(jié)
ΔWi0=?ηeihiWi0(k+1)=Wi0(k)+ΔWi0+α(Wi0(k?1)?Wi0(k?2))\Delta W_{i0} = -\eta e_ih_i \\ W_{i0}(k+1) = W_{i0}(k)+\Delta W_{i0} + \alpha (W_{i0}(k-1)-W_{i0}(k-2)) ΔWi0?=?ηei?hi?Wi0?(k+1)=Wi0?(k)+ΔWi0?+α(Wi0?(k?1)?Wi0?(k?2))
其中,η∈(0,1)\eta\in(0,1)η∈(0,1)為學(xué)習(xí)速度,α∈(0,1)\alpha \in(0,1)α∈(0,1)為動(dòng)量因子。
采用RBF神經(jīng)網(wǎng)絡(luò)逼近非線性函數(shù)
采用RBF神經(jīng)網(wǎng)絡(luò),逼近簡單的正弦函數(shù)
y=sin(t)y=sin(t) y=sin(t)
可知,采用的RBF神經(jīng)網(wǎng)絡(luò)輸入和輸出層神經(jīng)元數(shù)量都為1,設(shè)置隱含層神經(jīng)元數(shù)量為10個(gè)。
由于RBF神經(jīng)網(wǎng)絡(luò)采用的激活函數(shù)在有限區(qū)域內(nèi)輸出為非零,因此在設(shè)計(jì)RBF神經(jīng)網(wǎng)絡(luò)的時(shí)候,需要根據(jù)網(wǎng)絡(luò)的輸入來確定每個(gè)隱含層神經(jīng)元激活函數(shù)的參數(shù),即cjc_jcj?和bjb_jbj?。合適的網(wǎng)絡(luò)參數(shù)能夠提升網(wǎng)絡(luò)的逼近效果和性能,而不合適的參數(shù)會(huì)導(dǎo)致神經(jīng)網(wǎng)絡(luò)訓(xùn)練失敗,或者達(dá)不到想要的效果。
通常來說,cjc_jcj?參數(shù)需要與網(wǎng)絡(luò)的輸入相匹配,要保證輸入在高斯基函數(shù)的有效映射區(qū)域內(nèi);同樣的,根據(jù)輸入的范圍和高斯基函數(shù)的中心,來設(shè)置一個(gè)合適的寬度參數(shù)bjb_jbj?。
在本例中,神經(jīng)網(wǎng)絡(luò)的輸入為時(shí)間t∈[0,10]t \in[0,10]t∈[0,10],因此取徑向基函數(shù)中心和寬度為
C=[1,2,3,4,5,6,7,8,9,10]TB=[bj]10×1,bj=1,j=1,2,...10\bm{C} = [1,2,3,4,5,6,7,8,9,10] ^T \\ \bm{B} = [b_j]_{10\times 1},b_j = 1,j=1,2,...10 C=[1,2,3,4,5,6,7,8,9,10]TB=[bj?]10×1?,bj?=1,j=1,2,...10
神經(jīng)網(wǎng)絡(luò)逼近結(jié)果
訓(xùn)練過程中誤差收斂情況如下所示
將訓(xùn)練得到的神經(jīng)網(wǎng)絡(luò)進(jìn)行驗(yàn)證
代碼如下
%訓(xùn)練簡單的RBF神經(jīng)網(wǎng)絡(luò)來擬合非線性函數(shù) clear,clc %% 生成訓(xùn)練數(shù)據(jù) ts = 0.01; u1 = 0; y1 = 0;for k=1:1000u(k) = k*ts;y(k) = sin(u(k)); end len = length(u); %% RBFNN初始設(shè)置 % RBFNN結(jié)構(gòu)為1-10-1 n = 1; s1 = 10; s2 = 1; c = (1:1:10); %高斯基函數(shù)中心 b = ones(s1,1).*2; %高斯基函數(shù)寬度 W = rand(s2,s1); %輸出權(quán)值矩陣 DW = zeros(s2,s1); Wt1 = zeros(s2,s1); %上一時(shí)刻權(quán)值陣 Wt2 = zeros(s2,s1); %上上時(shí)刻權(quán)值陣 H = zeros(s1,1); %隱含層輸出 m = 500; Error = zeros(m,s2); %% 訓(xùn)練算法 e_tol = 1e-4; irt_max = 20000; e = ones(irt_max,1); eta = 0.3; alpha = 0.1; for cnt = 1:irt_maxidx_rand = randperm(1000);u_train = u(idx_rand);y_train = y(idx_rand);% 前向計(jì)算for i = 1:mx = u_train(i);for j = 1:s1H(j) = exp(-(x-c(j))^2/(2*b(j)^2)); %隱含層計(jì)算endy_etm = dot(W,H); %神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)值Error(i) = y_train(i) - y_etm;% 權(quán)值更新Wt = W; %當(dāng)前時(shí)刻Wfor j = 1:s1DW(j) = eta*Error(i)*H(j); W(j) = Wt(j) + DW(j) + alpha.*(Wt1(j)-Wt2(j)); %W updateendWt2 = Wt1;Wt1 = Wt;end% 檢測(cè)是否達(dá)到誤差要求e(cnt) = (norm(Error))^2/2/len;if e(cnt) < e_tolbreak;end end檢驗(yàn)訓(xùn)練結(jié)果
%% 檢驗(yàn)訓(xùn)練結(jié)果 idx_vad = (1:20:1000); u_test = u(idx_vad); for i = 1:length(idx_vad)x = u_test(i);for j = 1:s1H(j) = exp(-(x-c(j))^2/(2*b(j)^2)); %隱含層計(jì)算endy_test(i) = W*H; %神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)值 end figure(1) plot(u,y,'b--','LineWidth',1); hold on plot(u_test,y_test,'r-*'); legend('reference','estimation') grid on figure(2) plot(e(1:cnt)); grid on legend('error') %% 檢驗(yàn)2 for i = 1:1000u_test2(i) = i*ts*5;y_test2(i) = sin(u_test2(i));x = u_test2(i);for j = 1:s1H(j) = exp(-(x-c(j))^2/(2*b(j)^2)); %隱含層計(jì)算end y_vad2(i) = W*H; end figure(3) plot(u_test2,y_vad2,'r','LineWidth',0.75); hold on plot(u_test2,y_test2,'b--','LineWidth',1) grid on legend('estimation','reference')總結(jié)
以上是生活随笔為你收集整理的RBF神经网络和拟合实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用xshell7和xftp7连接虚拟机C
- 下一篇: 数据可视化:经典图表大全