RBF神經網絡和BP神經網絡的區別就在于訓練方法上面:RBF的隱含層與輸入層之間的連接權值不是隨機確定的,是有一種固定算式的。下面以精確型RBF為例。
假設每個樣本有R維的特征。有S1個訓練集樣本。IW1表示訓練集,即S1XR的一個矩陣。
此時,輸入一個R維的測試集樣本p,首先將p和IW1計算歐氏距離。
RBF徑向基函數的效果是:
所謂徑向基函數 (Radial Basis Function 簡稱 RBF), 就是某種沿徑向對稱的標量函數。通常定義為空間中任一點x到某一中心xc之間歐氏距離的單調函數 , 可記作 k(||x-xc||), 其作用往往是局部的 , 即當x遠離xc時函數取值很小。最常用的徑向基函數是高斯核函數 ,形式為 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ^2) } 其中xc為核函數中心,σ為函數的寬度參數 , 控制了函數的徑向作用范圍。
簡單地說,就是某個測試集樣本p和某個訓練集樣本越接近,即歐氏距離越小,那么在RBF作用后輸出的值就越大。
假設這個樣本p和訓練集中某個樣本(即IW1中某一列)很相似(即歐氏距離dist很小),那么輸出結果a1中(a1維度是S1X1)就有一個值會很大。經過權重和偏置的作用后,再進入線性分類器中,就很容易可以分出來。這是我的直觀的理解。
生成RBF的matlab函數:net = newrbe(P,T,spread)。只有一個參數spread需要調整。
P
RxQ matrix of Q R-element input vectors
T
SxQ matrix of Q S-element target class vectors
spread
Spread of radial basis functions (default = 1.0)
The larger the spread is, the smoother the function approximation will be. Too large a spread can cause numerical problems.
也就是說,spread這個參數越大,RBF圖像越平滑,RBF的輸出差距不大,則所有輸入的作用都會被減弱。
關于此算法,MATLAB文檔中給出了很精煉的解釋:
newrbe creates a two-layer network. The first layer has radbas neurons, and calculates its weighted inputs with dist and its net input with netprod. The second layer has purelin neurons, and calculates its weighted input withdotprod and its net inputs with netsum. Both layers have biases.
newrbe sets the first-layer weights to P', and the first-layer biases are all set to 0.8326/spread, resulting in radial basis functions that cross 0.5 at weighted inputs of +/– spread.
(就是說這樣設計出默認的RBF的效果是,關于X=0對稱,橫軸為+/-0.8333時函數的縱軸坐標值大約是0.5,表現在圖中就是cross于這個點。如果加權后輸入是+/- spread的話,正好產生此效果。)
The second-layer weights IW{2,1} and biases b{2} are found by simulating the first-layer outputs A{1} and then solving the following linear expression:
[W{2,1} b{2}] * [A{1}; ones] = T
也就是說,RBF實際上是一個兩層的神經網絡。很簡單,隱層是使用RBF作為激活函數的神經元,輸出層采用線性函數的神經元,做一個線性分類。在前面的dist計算歐氏距離過程中,RBF采用高斯函數,實際上是將數據轉化到高維空間,認為存在某個高維空間能夠使得數據在這個空間是線性可分的。因此輸出層是線性的。
上面也解釋了本文開頭中講的,神經元之間非隨機的權值是如何計算的:實際上,第一層的權值設為輸入矩陣P的轉置。而第二層的權值和偏置是要通過輸入參數T、第一層的output結果來反推的。
下面是MATLAB文檔中給的簡單代碼:
下面是一個例子
%% I. 清空環境變量
clear all
clc
%% II. 訓練集/測試集產生
%%
% 1. 產生隨機數據
NIR = rand(60,5);
%%
% 2. 隨機產生訓練集和測試集
temp = randperm(size(NIR,1));
% 訓練集――50個樣本
P_train = NIR(temp(1:50),:)';
T_train = NIR(temp(1:50),:)';
% 測試集――10個樣本
P_test = NIR(temp(51:end),:)';
T_test = NIR(temp(51:end),:)';
N = size(P_test,2);
%% III. RBF神經網絡創建及仿真測試
%%
% 1. 創建網絡
net = newrbe(P_train,T_train,30);
%%
% 2. 仿真測試
T_sim = sim(net,P_test);
%% IV. 性能評價
%%
% 1. 相對誤差error
error = abs(T_sim - T_test)./T_test;
%%
% 2. 結果對比
result = [T_test' T_sim' error']
%% V. 繪圖
figure
plot(1:N,T_test,'b:*',1:N,T_sim,'r-o')
legend('真實值','預測值')
xlabel('預測樣本')
-
神經網絡
+關注
關注
42文章
4771瀏覽量
100719 -
仿真器
+關注
關注
14文章
1017瀏覽量
83722 -
MATLAB仿真
+關注
關注
4文章
176瀏覽量
19922 -
RBF
+關注
關注
0文章
40瀏覽量
15711
發布評論請先 登錄
相關推薦
評論