线性神经网络原理以及MATLAB算法实现权值拟合和可线性分类
前言
本章主要參考《MATLAB 神經網絡原理與實例精講 陳明等編著》
一、線性神經網絡原理
一般來說,線性神經網絡就是感知器的升級版,但相比于單層感知器,線性神經網絡有很多的優點,其對比如下表所示:
| 傳輸函數 | 閾值函數 | 線性函數(purelin) |
| 輸出值 | 1/(0/-1) | 歸一化任意值 |
| 調整權重和偏置 | INIT初始化算法 | LMS(least mean square)算法 |
| 網絡層結構 | 1輸入層1隱含層1輸出層 | 1輸入層1隱含層1輸出層 |
| 解決問題所屬 | 線性可分(與或問題) | 線性可分(與或以及異或問題) |
| 分類后的邊界 | 隨機偏向于某一個類別 | 距兩個類別距離適中 |
| 是否適應病態矩陣 | 否 | 否 |
線性神經網絡的結構以及公式:
設權重是wi,偏置為b,輸入向量為xi,輸出神經元為v,最終輸出為y,其他可選輸出為p,則其網絡的具體輸出可以表示為:
線性神經網絡解決非線性可分的方法有兩種:
1、Madalin網絡,其思想就是利用多個隱含層(線性函數)對輸入向量進行線性劃分,然后對多個輸出神經元做邏輯劃分;
2、對于多個輸入神經元,兩兩神經元之間添加非線性輸入,或者理解為兩個神經元之間建立數學關系作為輸入;
LMS算法原理:
LMS算法又稱為最小均方算法,主要是為了對權重和偏置進行調整,其基本原理就是利用讓訓練時每次迭代的均方誤差mse最小,可以采用對均方誤差mse求取偏導的形式得到其極小值;
但是由于權重的數量和輸入向量成正比,所以當輸入向量很大時,就會使權重很大從而使得求偏導的運算量很大;
所以就要引入大家耳熟能詳的梯度下降算法,梯度下降算法可以理解為一個球體在一個三維地形空間內的隨機滾落到谷底,但是需要知道的是,球體在下降滾動的過程中,其下降滾動的方向和速度并不是穩定不變的,地形的不確定性和每次訓練迭代時的求解偏導時的不確定性一樣,需要利用這個變化以適應強度對權重和偏置進行調整,當符合一定收斂條件時,其輸出的權重永遠是最佳權重;
對于上面的權值向量調整過程中,除了網絡中用戶自定義的參數以外,非常需要注意的就是學習率?的選取,因此需要確保一個能夠穩定收斂的學習率:通過觀察上面的(4)條公式可知,學習率?的大小影響著權值的變化,學習率?越小,權值變化程度也是越小,其與以前的權值的相關性就越高,這里簡稱LMS的記憶力,學習率的倒數與LMS記憶力成正比;
外國學者證明:當LMS算法按方差收斂時,學習率可滿足下式:
其中λmax為輸入向量組成的自相關矩陣的最大特征值;由于這個值計算很困難,因此需要對公式進行轉化,得到的結果如下:
其中tr(R)表示自相關矩陣的對角線元素之和;這里之所以可以代替最大特征值,具體原理還請參考資料自行驗證;
另外值得一提的就是,學習率?并不是一成不變的,上面的步驟只是為了確定一個最優的初始學習率,而因此如果保持這個學習率不變的話,就會出現以下問題,學習率太低,將會拖慢整個訓練的效率;學習率太高,LMS算法的記憶力太低以至于會使整個訓練的精度太低;
為解決上面的問題,學習率可以按照以下方式進行減小:
1、直接下降(n表示迭代的次數):
2、指數下降(c≈1 &c < 1):
3、搜索收斂方案:
Matlab線性網絡的函數清單(若對函數不熟,請在matlab自行輸入help 函數名 進行查看):
| Net=newlind(P,T,Pi) | 設計一個線性層 |
| Net=newlin(P,T,ID,IR)/Net=newlin(P,S,ID,IR) | 構建一個線性層 |
| A=purelin(N,FP)/dA_dN=purelin(’dn’,N,A,FP) | 線性傳輸函數 |
| [dw,ds]=learnwh(W,P,Z,N,A,T,E,gW,gA,D,LP,LS) | LMS學習函數 |
| Max_learn=maxlinlr(P,’bias’) | 計算最大學習率 |
| Perf=MSE(e) | 均方誤差性能函數 |
| Net=linearlayer(inputDelays,widrowHoffLR) | 構造線性層的函數 |
二、線性神經網絡擬合線代碼及圖示
[p,d,Ir,net,x,y]=net_lin(); function [p,d,Ir,net,x,y]=net_lin()p=-20:20;d=3*p+3;%p=[ones(1,length(p));p];randn('state',2)d=d+randn(1,length(d))*10;plot(p,d,'.');Ir=maxlinlr(p,'bias');%net=linearlayer(0,Ir);net=newlin(minmax(p),1,[0],maxlinlr(p));tic;net=train(net,p,d);toc;x=-20:.2:20;y=sim(net,x);y1=3*x+3;hold on;plot(x,y,'Color','red');plot(x,y1,'Color','green');s=strcat('擬合線:::','y=',num2str(net.iw{1,1}),'x+',num2str(net.b{1,1}));s1=strcat('原始線:::''y=3x+3');legend('原始數據',s,s1);title('線性網絡擬合數據求解系數'); end三、線性神經網絡分類代碼及圖示
總結
以上是生活随笔為你收集整理的线性神经网络原理以及MATLAB算法实现权值拟合和可线性分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸿蒙系统体验报告,我雷某人摊牌了,鸿蒙2
- 下一篇: spring boot校园二手销售网站