智能優化算法: 神經網絡算法
人工神經網絡的構築是受生物神經網絡的運作而啓發的. 人工神經網絡通常通過一個基於數學統計學類型的學習方法從而得以優化, 因此人工神經網絡也可被看作是數學統計學方法的一種應用.
通過統計學的標準數學方法, 我們可以得到大量的, 可用函數表達的局部結構空間, 在人工智能學的人工感知領域, 通過數學統計學的應用可以解決人工感知方面的決定問題, 這種方法比起常規的邏輯學推理演算具有更大的優勢.
文章目錄
- 智能優化算法: 神經網絡算法
- 1. 基本原理
- 2. 程序設計
- 2.1 通用神經網絡工具箱函數
- 2.1.1 神經網絡初始化函數 `init`
- 2.1.2 單層神經網絡初始化函數 `initlay()`
- 2.1.3 神經網絡單層權值和偏值初始化函數 `initwb()`
- 2.1.4 神經網絡訓練函數 `train()`
- 2.1.5 神經網絡仿真函數 `sim`
- 2.1.6 神經網絡輸入的和函數`netsum`
- 2.1.7 權值點積函數 `dotprod`
- 2.1.8 神經網絡輸入的積函數`netprod`
- 2.2 感知器
- 2.3 線性神經網絡函數
- 2.3.1 誤差平方和性能函數`sse`
- 2.3.2 計算線性層最大穩定學習速率函數 `maxlinlr`
- 2.3.3 網絡學習函數 `learnwh`
- 2.3.4 線性神經網絡設計函數 `newlind`
- 2.4 BP神經網絡函數
- 2.4.1 均方誤差性能函數 `mse`
- 2.4.2 誤差平方和函數 `sumsqr`
- 2.4.3 計算誤差曲面函數 `errsurf`
- 2.4.4 誤差曲面圖繪製函數 `plotes`
- 2.4.5 誤差曲面圖權值偏值位置繪製函數 `plotep`
- 2.5 徑向基神經網絡函數
- 2.5.1 向量距離計算函數 `dist`
- 2.5.2 徑向基傳輸函數 `radbas`
- 2.5.3 徑向基神經網絡建立函數 `newrb`
- 2.5.4 嚴格徑向基神經網絡建立函數 `newrbe`
- 2.5.5 廣義迴歸徑向基神經網絡函數 `newgrnn`
- 2.5.6 數據索引向量-向量組變換函數 `ind2vec`
- 2.5.7 向量組-數據索引向量變換函數 `vec2ind`
- 2.5.8 概率徑向基函數 `newpnn`
- 2.6 自組織神經網絡函數
- 3. 常見應用
1. 基本原理
人工神經網絡模型的區別主要在 神經網絡連接的拓撲結構, 神經元的特徵和學習規模等等. 根據神經元連接的拓撲結構的區別, 我們大致可將神經網絡模型分爲以下兩種:
-
前向網絡
在前向網絡中, 每個神經元只接受前一級的輸入並輸出到後一級, 在神經網絡中沒有反饋. 它的拓撲結構可用一個有向無環路圖表示. 這種網絡所實現的是信號從輸入空間到輸出空間的變換, 其信息處理能力在於簡單非線性函數的有限次複合.
最簡單的前向網絡結構是 兩層前向網絡結構, 該網絡只有輸入層和輸出層. 一般地, 含有一個輸入層, 一個輸出層和多箇中間層的前向神經網絡被稱爲 多層前向網絡結構.
-
反饋網絡
另一種神經網絡模型類型被稱爲 反饋網絡, 這類網絡的神經元之間存在反饋, 其拓撲結構可以用一個無向的完備圖表示. 其信息處理能力源於狀態的變換, 可以用動力系統理論處理. 系統的穩定性和聯想記憶功能有密切關係.
2. 程序設計
MATLAB 的神經網絡工具箱中預置了多種神經網絡函數, 包括:
- 感知器
- 線性網絡
- BP神經網絡
- 徑向基函數網絡
- 競爭型神經網絡
- 自組織網絡和學習向量量化網絡
- 反饋網絡
下面, 對重要的神經網絡工具箱函數進行介紹:
2.1 通用神經網絡工具箱函數
下面介紹數個通用函數的基本功能和用法:
2.1.1 神經網絡初始化函數 init
利用神經網絡初始化函數 init
, 我們可對一個現存的神經網絡參數進行初始化, 修正這個神經網絡的權值, 偏值等參數.
該函數調用格式爲:
net = init(NET)
其中, NET
是尚未初始化的神經網絡, net
是經過初始化的神經網絡.
2.1.2 單層神經網絡初始化函數 initlay()
利用函數 initlay()
, 我們可對單層神經網絡進行初始化, 修正其權值和偏值. 該函數調用格式爲:
net = initlay(NET)
其中, NET
是尚未初始化的神經網絡, net
是經過初始化的神經網絡.
2.1.3 神經網絡單層權值和偏值初始化函數 initwb()
該函數可對神經網絡某一層的權值和偏值進行初始化修正. 調用格式爲:
net = initwb(NET,i)
其中, NET
是尚未初始化的神經網絡, net
是第 層經過初始化的神經網絡, i
爲需要進行權值和偏值修正的目標層數.
2.1.4 神經網絡訓練函數 train()
該通用函數的作用是訓練神經網絡: 不斷重複地將一組輸入向量應用於某一個神經網絡, 實時更新它的權值和偏值, 當神經網絡訓練達到所設定的最大學習步長, 最小誤差梯度, 誤差目標等條件後停止訓練. 函數調用格式如下:
[net,tr,Y,E] = train(NET,X,T,Xi,Ai)
其中:
- NET - 受訓神經網絡
- X - 神經網絡輸入
- T - 訓練神經網絡的目標輸出, 默認值爲0
- Xi - 初始輸入延時, 默認值爲0
- Ai - 初始層延時
- net - 完成訓練的神經網絡
- tr - 神經網絡訓練的步長
- Y - 神經網絡的輸出
- E - 神經網絡訓練誤差
在調用該函數之前, 必須先設定 訓練函數, 訓練步長, 訓練目標誤差 等參數. 若沒有設定, train
函數將調用默認的訓練參數對神經網絡進行訓練.
2.1.5 神經網絡仿真函數 sim
該函數的作用是在完成神經網絡訓練後檢測已完成訓練的神經網絡的性能.其調用格式如下:
[Y,Xf,Af,E] = sim[net,X,Xi,Ai,T]
其中:
- net - 受訓神經網絡
- X - 神經網絡輸入
- Xi - 初始輸入延時
- Ai - 初始層延時
- T - 訓練神經網絡的目標輸出
- Y - 神經網絡輸出
- Xf - 最終輸入延時
- Af - 最終層延時
- E - 神經網絡訓練誤差
2.1.6 神經網絡輸入的和函數netsum
該函數通過神經網絡的某一層的加權輸入和偏值相加,作爲該層的輸入. 調用格式如下:
N = netsum({Z1,Z2,...,Zn},FP)
其中, 爲 維矩陣.
[例]
使用 netsum
函數將兩個權值和一個偏值相加:
z1 = [1 2 4;3 4 1];
z2 = [-1 2 2;-5 6 1];
b = [0;-1];
n = netsum({z1,z2,concur(b,3)})
即得到神經網絡輸入:
n =
0 4 6
-3 9 1
>>
2.1.7 權值點積函數 dotprod
dotprod
令神經網絡的輸入向量和權值點積, 可得加權輸入. 該函數調用格式如下:
Z = dotprod(W,P,FP)
其中, 爲權值矩陣, 爲輸入向量, 爲可省略的功能參數, 爲權值矩陣和輸入向量的點積.
[例]
使用 dotprod
函數求得一個點積:
W = rand(4,3);
P = rand(3,1);
Z = dotprod(W,P)
即得到點積: (輸入變量均爲隨機生成,實機操作輸出結果不定)
Z =
1.1244
0.7101
2.3575
0.1860
>>
2.1.8 神經網絡輸入的積函數netprod
netprod
函數將神經網絡某一層甲醛輸入和偏值相乘的結果作爲該層的輸入. 其調用格式爲:
N = netprod({Z1,Z2,...,Zn})
其中, 爲 維矩陣.
[例]
使用 netprod
函數求得神經網絡輸入的積:
Z1 = [1,2,4;3,4,1];
Z2 = [-1 2 2;-5 -6 1];
B = [0;-1];
Z = {Z1,Z2,concur(B,3)};
N = netprod(Z)
即得到:
N =
0 0 0
15 24 -1
>>
2.2 感知器
在 MATLAB 神經網絡工具箱中有大量和感知器相關的函數. 下面對它們進行簡介:
2.2.1 繪製樣本點函數 plotpv
plotpv
函數可在座標圖中繪出樣本點及其類別, 不同類別使用不同的符號. 調用格式如下:
plotpv(P,T)
其中, 爲 個二維或三維的樣本矩陣, 表示各個樣本點的類別.
2.2.2 繪製分類線函數 plotpc
該函數功能是在已知的樣本分類圖中繪製出樣本分類線. 調用格式如下:
plotpc(W,B)
其中, 和 分別是神經網絡的權矩陣和偏差向量.
2.2.3 感知器學習函數 learnp
learnp
利用感知器學習規則訓練單層神經網絡. 感知器學習規則是通過調整神經網絡的權值和偏值, 使得感受器平均誤差和最小, 以便對輸入向量進行正確的分類. 該函數的調用格式爲:
[dW,LS] = learnp(P,T,E)
其中, 爲輸入向量矩陣, 爲目標向量, 爲誤差向量. , 分別爲權值和偏值變化矩陣.
2.2.4 平均絕對誤差性能函數 mae
該函數用於輸出神經網絡的平均誤差. 調用格式爲:
perf = mae(E,Y,X,FP)
其中, 爲感知器輸出誤差矩陣, 表示感知器的輸出向量, 表示感知器的權值和偏值向量.
2.3 線性神經網絡函數
MATLAB 的神經網絡工具箱中預置了多種線性神經網絡函數. 下面對一些線性神經網絡函數進行簡介.
2.3.1 誤差平方和性能函數sse
線性神經網絡的學習規則是調整其權值和偏值, 使其誤差的 平方和 最小. 誤差平方和性能函數的調用格式爲:
perf = sse(net,t,y,ew)
其中, net
爲所建立的神經網絡, 爲目標向量, 爲網絡輸出向量, ew
爲權值誤差, perf
爲誤差平方和.
2.3.2 計算線性層最大穩定學習速率函數 maxlinlr
該函數用於計算使用 Widrow-Hoff 準則所訓練出的線性神經網絡的最大穩定學習速率. 調用格式如下;
lr = maxlinlr(P,'bias')
其中, 爲輸入向量, bias
爲神經網絡偏值, lr
爲學習速率.
[注]
一般而言, 學習速率越高, 神經網絡所需的訓練時間越短, 網絡收斂速度越快, 學習效果越不穩定.
2.3.3 網絡學習函數 learnwh
該函數稱爲 最小方差準則學習函數. 調用格式如下:
[dW, LS] = learnwh(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
其中:
- W - 權值矩陣
- P - 輸入向量
- Z - 權值輸入向量
- N - 神經網絡輸入向量
- A - 神經網絡輸出向量
- T - 目標向量
- E - 誤差向量
- gW - 權值梯度向量
- gA - 輸出梯度向量
- D - 神經元間隔
- LP - 學習函數
- LS - 學習狀態
[注]
dW
和 LS
分別爲神經網絡的權值和偏值的調整值.
[例]
利用 learnwh
函數獲取神經網絡權值調整值:
p = rand(2,1);
e = rand(3,1);
lp.lr = 0.5;
dW = learnwh([],p,[],[],[],[],e,[],[],[],lp,[])
代碼運行後得到的權值調整值如下:
dW =
0.0110 0.0519
0.0338 0.1599
0.0182 0.0862
>>
2.3.4 線性神經網絡設計函數 newlind
該函數可設計出可以直接使用的線性神經網絡. 調用格式如下;
net = newlind(P,T,Pi)
其中, 爲輸入向量, 爲目標向量, Pi
爲神經元起始狀態參數, net
爲建立的線性神經網絡.
[例]
利用 newlind
函數建立一個線性神經網絡並測試其性能.
[解]
編寫代碼如下:
P = {1 2 1 3 3 2};
Pi = {1 3};
T = {5.0 6.1 4.0 6.0 6.9 8.0};
net = newlind(P,T,Pi);
Y = sim(net,P,Pi)
代碼運行結果如下:
Y =
1×6 cell array
{[4.9824]} {[6.0851]} {[4.0189]} {[6.0054]} {[6.8959]} {[8.0122]}
>>
注:
在使用 newlind
函數時, 參數 Pi
可以省略.
2.4 BP神經網絡函數
下面簡介一些常用的BP神經網絡函數及其基本功能:
2.4.1 均方誤差性能函數 mse
BP神經網絡的學習規則是通過不斷調整神經網絡的權值和偏值, 從而使得網絡輸出的均方誤差和最小. mse
函數調用格式爲:
perf = mse(net,t,y,ew)
其中, net
爲所建立的神經網絡, 爲目標向量, 爲網絡輸出向量, ew
爲所有權值和偏值向量, perf
爲均方誤差.
2.4.2 誤差平方和函數 sumsqr
sumsqr
函數的作用是計算輸入向量平方和. 調用格式爲:
[s,n] = sumsqr(x)
其中, 爲輸入向量, 爲有限值的平方和, 爲有限值的個數.
2.4.3 計算誤差曲面函數 errsurf
該函數的功能是計算單輸入神經元輸出誤差平方和. 調用格式爲:
errsurf(P,T,WV,BV,F)
其中, 爲輸入向量, 爲目標向量, 爲權值矩陣, 爲偏值矩陣, 爲傳輸函數.
2.4.4 誤差曲面圖繪製函數 plotes
該函數的作用是繪製誤差曲面圖. 調用格式爲:
plotes(WV,BV,ES,V)
其中, 爲權值矩陣, 爲偏值矩陣, 爲誤差曲面, 爲期望的視角.
[例]
可使用以下代碼繪製誤差曲面圖:
p = [3 2];
t = [0.4 0.8];
wv = -4:0.4:4;
bv = wv;
ES = errsurf(p,t,wv,bv,'logsig');
plotes(wv,bv,ES,[60 30])
所得誤差曲面圖如下圖所示:
2.4.5 誤差曲面圖權值偏值位置繪製函數 plotep
該函數的作用是在由函數 plotes
所生成的誤差曲面圖上繪製出單輸入網絡權值 和偏差 所對應的誤差 的位置. 調用格式爲:
H = plotep(W,B,e)
其中, 爲偏值矩陣, 爲偏值向量, 爲輸出誤差.
[例]
p = [3 2];
t = [0.4 0.8];
wv = -4:0.4:4;
bv = wv;
ES = errsurf(p,t,wv,bv,'logsig');
plotes(wv,bv,ES,[60 30])
W = -3;
B = 1;
E = sumsqr(t-sumuff(p,W,B,'logsig'));
plotep(W,B,e)
運行後即得到權值和偏值在誤差曲面上的位置.
(本飛舞的MATLAB上連sumuff
函數都沒有,,,哭哭,,,)
2.5 徑向基神經網絡函數
下面簡介一些常用的徑向基神經網絡函數及其功能:
2.5.1 向量距離計算函數 dist
大多數神經網絡的輸入可通過表達式: 得到: 分別爲神經網絡的權向量和偏值向量. 但有些神經元的輸入可由函數 dist
計算. 該函數是一個歐式距離權值函數, 它對輸入加權以得到被加權的輸入. 函數的調用格式如下:
Z = dist(W,P,FP)
D = dist(pos)
其中, 爲神經網絡的權值矩陣, 爲輸入向量, 均爲輸出距離矩陣. pos
爲神經元位置參數矩陣.
[例]
定義一個兩層神經網絡, 每層神經網絡包含三個神經元. 使用函數 dist
計算該神經網絡所有神經元之間的距離:
pos = rand(2,3);
D = dist(pos)
運行所得結果:
D =
0 0.6479 1.0356
0.6479 0 0.7349
1.0356 0.7349 0
>>
2.5.2 徑向基傳輸函數 radbas
該函數作用於徑向基神經網絡輸入矩陣的每一個輸入量. 調用格式爲:
A = radbas(N)
其中, 爲神經網絡的輸入矩陣, 爲函數的輸出矩陣.
2.5.3 徑向基神經網絡建立函數 newrb
newrb
可用於重新創建一個徑向基神經網絡. 該函數調用格式如下:
net = newrb(P,T,goal,spread,MN,DF)
其中, 爲輸入向量, 爲目標向量. goal
爲均方誤差, spread
爲徑向基函數的擴展速度. 爲神經元的最大數目, 爲兩次顯示之間所添加的神經元數目. 爲生成的徑向基神經網絡.
[注]
利用 newrb
函數建立的徑向基神經網絡, 也可不經過訓練而直接使用.
[例]
使用 newrb
建立徑向基神經網絡, 並實現函數逼近.
[解]
編寫的代碼如下:
clc;clear all;
X = 0:0.1:2; %神經網絡輸入值
T = cos(X*pi); %神經網絡目標值
%% 繪製該函數上的採樣點
figure(1)
plot(X,T,'+');
title('Sample Points of the Function to be Approximated');
xlabel = ('Input Values');
ylabel = ('Target Values');
%% 建立神經網絡並進行仿真
n = -4:0.1:4;
a1 = radbas(n)
a2 = radbas(n-1.5);
a3 = radbas(n+2);
a = a1 + 1*a2 + 0.5*a3;
figure(2);
plot(n,a1,n,a2,n,a3,n,a,'x');
title('Weighted Sum of Radial Basis Networks');
xlabel = ('Input Values');
ylabel = ('Target Values');
% 徑向基函數神經網絡隱含層中每個神經元的權重和閾值
% 都指定了相應的徑向基函數的位置和寬度.
%每一個線性輸出神經元都由這些徑向基函數的加權和組成.
net = newrb(X,T,0.03,2); %設定平方和誤差參數爲0.03
X1 = 0:0.01:2;
y = sim(net,X1);
figure(3);
plot(X1,y,X,T,'+');
title('Simulation Result');
xlabel = ('Input Values');
ylabel = ('Network & Target Output');
程序運行後得到:
待逼近的函數樣本點圖形:
建立的徑向基傳遞函數加權和:
建立的徑向基神經網絡仿真結果:
[注]
因爲徑向基神經網絡需要更多的隱含層神經元完成訓練, 故徑向基神經網絡不可用於取代其他前饋網絡.
2.5.4 嚴格徑向基神經網絡建立函數 newrbe
建立嚴格徑向基神經網絡的函數爲 newrbe
, 調用格式如下:
net = newrbe(P,T,speed)
其中, 爲輸入向量 , 爲目標向量, speed
爲徑向基函數的擴展速度, 默認值爲 , net
爲生成的神經網絡.
[注]
利用 newrbe
生成的徑向基神經網絡可不經過訓練而直接使用:
[例]
在MATLAB 中利用以下代碼建立一個徑向基神經網絡:
>> P = [1 2 3 4 5 6 7];
>> T = [8.1 0.8 9.3 6.4 3.6 4.1 1.4];
>> net = newrbe(P,T);
>> P = 2;
>> Y = sim(net, P)
代碼執行結果:
Y =
0.8000
>>
可見, 所建立的,未經訓練的徑向基神經網絡也正確地預測出了輸出值.
2.5.5 廣義迴歸徑向基神經網絡函數 newgrnn
廣義迴歸徑向基網絡 GRNN 訓練速度快, 非線性映射能力強, 常用於函數的逼近. 其調用格式爲:
net = newgrnn(P,T,spread)
其中, 爲輸入向量, 爲目標向量, spread
爲徑向基函數的擴展速度, 默認值爲 , net
爲所生成的神經網絡.
[注]
一般而言, spread
取值越小神經網絡逼近效果越好, 但逼近過程越不平滑.
2.5.6 數據索引向量-向量組變換函數 ind2vec
函數 ind2vec
的作用是對向量進行變換, 將數據索引向量變換爲向量組. 調用格式爲:
vec = ind2vec(ind)
其中, ind
是 維數據索引行向量, vec
爲 行 列的稀疏矩陣.
2.5.7 向量組-數據索引向量變換函數 vec2ind
函數 vec2ind
的作用是對向量進行變換, 將向量組變換爲數據索引向量, 可視爲ind2vec
的逆操作函數. 其調用格式爲:
ind = vec2ind(vec)
其中, ind
是 維數據索引行向量, vec
爲 行 列的稀疏矩陣.
2.5.8 概率徑向基函數 newpnn
該函數命令用於建立概率徑向基神經網絡, 具有訓練速度快, 結構簡單的特點, 適合解決模式分類問題. 函數調用格式如下:
net = newpnn(P,T,spread)
其中, 爲輸入向量, 爲目標向量, spread
爲徑向基函數的擴展速度, net
爲所生成的神經網絡.
[注]
該函數生成的神經網絡和嚴格徑向基神經網絡建立函數 newrbe
所建立的神經網絡一樣, 可以不經過訓練而直接使用.
[例]
建立一個概率徑向基神經網絡並進行仿真:
P = [1 2 3 4 5 6 7 8];
Tc = [1 1 4 5 1 4 1 9];
T = ind2vec(Tc) %將類別向量轉換爲可使用的目標向量組
net = newpnn(P,T);
Y = sim(net,P)
Yc = vec2ind(Y) %將仿真結果轉換爲類別向量
所得結果如下:
T =
(1,1) 1
(1,2) 1
(4,3) 1
(5,4) 1
(1,5) 1
(4,6) 1
(1,7) 1
(9,8) 1
Y =
1 1 0 0 1 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 1 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
Yc =
1 1 4 5 1 4 1 9
>>
2.6 自組織神經網絡函數
下面簡介一些常用的自組織神經網絡函數及其功能:
2.6.1 競爭神經網絡建立函數 newc
函數newc
可用於建立一個競爭型神經網絡. 其調用格式爲:
net = newc(P,S)
其中, 爲決定輸入列向量最大最小值取值範圍的矩陣, 表示神經網絡中神經元的個數, net
表示建立的競爭神經網絡.
[例]
建立並訓練一個競爭型神經網絡:
P = [1 9 1 9 ;1 1 4 5];
net = newc([-1 1;-1 1],3);
net = train(net,P);
y = sim(net,P);
yc = vec2ind(y)
所得結果:
Y =
1 1 0 0 1 0 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 1 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
Yc =
1 1 4 5 1 4 1 9
>> jingzhengxingshenjingwanglnewc
yc =
1 2 3 2
>>
競爭型神經網絡訓練如下圖所示:
2.6.2 競爭傳輸函數 compet
compet
函數可對競爭神經網絡的輸入進行轉換, 使得網絡中有最大輸入值的神經元的輸出爲 , 且其餘神經元的輸出爲 . 調用格式如下:
A = compet(N)
其中, 爲輸出向量矩陣, 爲輸入向量.
2.6.3 一定類別的樣本向量生成函數 nngenc
函數調用格式如下:
x = nngenc(bounds, clusters, points, std_dev)
其中, 是具有一定類別的樣本向量, bounds
指類中心的範圍, clusters
指類別數目, points
指每一類的樣本點數目, std_dev
指每一類樣本點的標準差.
[例]
%創建輸入樣本向量
bounds = [0,1;0,1]; %類中心的範圍
clusters = 5; %類的個數
points = 14; %每個類的點數
std_dev = 0.05; %每個樣本點的標準差
x = nngenc(bounds, clusters, points, std_dev)
%%繪製輸入樣本的樣本向量圖
plot(x(1,:),x(2:,),'+'r);
title('Imput Vectors');
xlabel('x(1)');
ylabel('x(2)');
程序運行結果如下圖所示:
(然而本飛舞的MATLAB上這個函數也沒有,,,)
2.6.4 自組織網絡權值向量繪製函數 plotsum
該函數的作用是在神經網絡的每個神經元權向量對應座標處畫點, 並用實線連接起神經元權值點. 調用格式如下:
plotsum(pos)
其中, pos
是表示 維座標點的 維矩陣.
2.6.5 Kohonen 權值學習規則函數 learnk
learnk
函數根據 Kohonen 準則計算神經網絡的權值變化矩陣. 調用格式如下:
[dW,LS] = learnk(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
其中:
dW
- 權值變化矩陣LS
- 新的學習狀態W
- 權值矩陣P
- 輸入向量Z
- 權值輸入向量N
- 神經網絡輸入向量T
- 目標向量E
- 誤差向量gW
- 性能參數梯度gA
- 性能參數的輸出梯度LP
- 學習速率 (默認爲0.01)LS
- 學習狀態
2.6.6 Hebb 權值學習規則函數 learnh
learnh
函數的原理是 即第 個輸入和第 個神經元之間的權值變化量神經元輸入和輸出的乘積成正比. 調用格式如下:
[dW,LS] = learnh(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
其中,函數各變量含義和 learnk
函數中的完全一致.
2.6.7 輸入向量加權值計算函數 negdist
函數調用格式如下:
Z = negdist(W,P)
其中, 爲負向量距離矩陣, 爲權值函數, 爲輸入矩陣.
中, `pos` 是表示 $N$ 維座標點的 $N*S$ 維矩陣.
2.6.5 Kohonen 權值學習規則函數 learnk
learnk
函數根據 Kohonen 準則計算神經網絡的權值變化矩陣. 調用格式如下:
[dW,LS] = learnk(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
其中:
dW
- 權值變化矩陣LS
- 新的學習狀態W
- 權值矩陣P
- 輸入向量Z
- 權值輸入向量N
- 神經網絡輸入向量T
- 目標向量E
- 誤差向量gW
- 性能參數梯度gA
- 性能參數的輸出梯度LP
- 學習速率 (默認爲0.01)LS
- 學習狀態
2.6.6 Hebb 權值學習規則函數 learnh
learnh
函數的原理是 即第 個輸入和第 個神經元之間的權值變化量神經元輸入和輸出的乘積成正比. 調用格式如下:
[dW,LS] = learnh(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)
其中,函數各變量含義和 learnk
函數中的完全一致.
2.6.7 輸入向量加權值計算函數 negdist
函數調用格式如下:
Z = negdist(W,P)
其中, 爲負向量距離矩陣, 爲權值函數, 爲輸入矩陣.
3. 常見應用
神經網絡是由人工基本神經元相互連接, 模擬人腦神經處理信息方式解決問題的工具. 神經網絡可以解決很多利用傳統方法無法解決的問題.
3.1 BP神經網絡
BP神經網絡具有很強的 映射能力, 主要應用有: 模式識別分類, 函數逼近, 函數壓縮 等.
[例]函數逼近:
設計一個 BP 神經網絡, 逼近函數 其中, 分別令 進行仿真, 通過調節參數得出信號頻率和隱含層節點之間, 隱含層節點與函數逼近能力之間的關係.
[解]
設頻率參數 , 繪製要畢竟的非線性函數的目標曲線:
k = 2;p = [-1:.05:8];
t = 1+sin(k*pi/2*p);
plot(p,t,'-');
title('Non-linear Function to be Approached');
xlabel = ('Time');
ylabl = ('Non-linear Function');
運行後得到目標曲線如下圖所示:
使用 newff
函數建立BP神經網絡:
n = 5; %設定隱含層神經元數目爲5
net = newff(minmax(p),[n,1],{'tansig','purelin'},'trainlm');
%選擇隱含層和輸出層神經元傳遞函數爲 tansig 和 purelin,
%網絡訓練算法採用 Levenberg-Marquardt 算法 trainlm.
%對於初始神經網絡, 可使用 sim() 函數觀察網絡輸出
y1 = sim(net,p);
figure;
plot(p,t,'-',p,y1,':')
title('Raw Output');
xlabel('Time');
ylabel('Simulation Output----Original Function')
程序運行後所得到的神經網絡輸出曲線和原函數的對比圖:
使用 newff
函數建立神經網絡時權值和閾值的初始化是隨機的, 故網絡輸出的結構很差, 達不到逼近函數的目的.
下面設置網絡訓練參數, 應用 train
函數對網絡進行訓練:
net = trainParam.epochs = 200; %設定網絡訓練步長爲200
net.trainParam.goal = 0.2; %設定網絡訓練精度爲0.2
net = train(net,p,t); %開始執行網絡訓練
訓練過程中的誤差變化狀態如下圖所示:
下面對訓練出的神經網絡進行仿真:
y2 = sim(net,p);
figure;
plot(p,t,'-',p,y1,':',p,y2,'--')
title('Output of the Trained Neural Network');
xlabel('Time')ylabel('Simulation Output')
下圖爲訓練所得的神經網絡的輸出結果:
不難看出, 經過訓練後的 BP 神經網絡對非線性函數的逼近效果有顯著提升.
實際上, 改變非線性函數的頻率和 BP 神經網絡隱含層神經元的數目, 也會對神經網絡逼近函數的效果有一定影響. 一般而言, 隱含層神經元數目越多, BP 網絡逼近非線性函數的能力越強.