1. 程式人生 > >神經網路學習筆記(五) 徑向基函式神經網路

神經網路學習筆記(五) 徑向基函式神經網路

徑向基函式神經網路

首先介紹一下網路結構:

這裡寫圖片描述

1.輸入層為向量,維度為m,樣本個數為n,線性函式為傳輸函式。

2.隱藏層與輸入層全連線,層內無連線,隱藏層神經元個數與樣本個數相等,也就是n,傳輸函式為徑向基函式。

3.輸出層為線性輸出。

理論基礎

徑向基函式神經網路只要隱含層有足夠多的隱含層節點,可以逼近任何非線性函式。
在擬合函式的時候,我們要儘量的經過每一個點,但是當一大堆散亂資料的時候我們如果經過每一個點就造成過擬合,也就是根本無法尋找裡面的隱含規律,我們需要一個權值均衡的擬合方式,這時候就要用到最小二乘法。

那麼我們對樣本點附近的點用什麼方法插值呢?
這就是基函式的作用了。通常我們將基函式設為高斯函式,那麼高斯函式裡面就涉及到兩個引數了:sigma和距離d

高斯函式: exp(-d^2/(2*sigma^2));

sigam就是平滑因子,他可以控制高斯函式的平滑度。

sigma=10
這裡寫圖片描述

sigma=5
這裡寫圖片描述

sigma=1
這裡寫圖片描述

sigma=0.1
這裡寫圖片描述

當平滑因子較低時,高斯函式就會尖銳,也就是邊緣點的權值會很小,導致過擬合。

那麼距離d是什麼呢?

距離d就是向量離每一個隱含層中心的距離,通常隱含層的中心對應每個節點,所以每個距離就是節點矩陣自身相對自身每個點的距離。

距離表示著離節點越近,所受該節點的輸出影響就越大。

下面就來實現一下這個神經網路

matlab(非API實現)

1.定義一些變數:

data=-9
:1:8;
x=-9:.2:8; label=[129,-32,-118,-138,-125,-97,-55,-23,-4,2,1,-31,-72,-121,-142,-174,-155,-77]; spread=2;

spread就是sigma值 也稱平滑度。
data為實際資料。
x為測試資料。
label表示目標輸出。

2.看一下輸出點

plot(data,label,'o');
hold on;

這裡寫圖片描述

3.擬合這條曲線的權值

dis=dist(data',data); %求距離

gdis=exp(-dis.^2/spread);%gauss

G=[gdis,ones(length(data
(1,:)),1)];%廣義rbf網路 (加入一個恆為1的隱含層節點)
w=G\label';%最小二乘的矩陣求解

4.測試所擬合的權值

chdis=dist(x',data);

chgdis=exp(-chdis.^2/spread);

chG=[chgdis,ones(length(x(1,:)),1)];

chy=chG*w;

plot(x,chy);

這裡寫圖片描述

如果將spread取0.1

這裡寫圖片描述

節點附近的插值點的全脂會非常小導致曲線過擬合。

如果將spread取50000

這裡寫圖片描述

很多點都已經偏離,曲線過於平滑。導致欠擬合。

如果再加2個0,取5000000

這裡寫圖片描述

這個sigma太大了,直接會導致函式不擬合。

結束語

徑向基函式有著bp演算法不能達到的擬合效果,在擬合曲線上,徑向基函式更快,更準確。
下一節我們會討論優化的變種徑向基函式神經網路—-廣義迴歸神經網路(GRNN)。