ELM極限學習機相關_第1頁
ELM極限學習機相關_第2頁
ELM極限學習機相關_第3頁
ELM極限學習機相關_第4頁
ELM極限學習機相關_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、簡單易學的機器學習算法極限學習機(ELM)一、極限學習機的概念    極限學習機(Extreme Learning Machine) ELM,是由黃廣斌提出來的求解單隱層神經網(wǎng)絡的算法。    ELM最大的特點是對于傳統(tǒng)的神經網(wǎng)絡,尤其是單隱層前饋神經網(wǎng)絡(SLFNs),在保證學習精度的前提下比傳統(tǒng)的學習算法速度更快。二、極限學習機的原理ELM是一種新型的快速學習算法,對于單隱層神經網(wǎng)絡,ELM 可以隨機初始化輸入權重和偏置并得到相應的輸出權重。(選自黃廣斌老師的PPT)對于一個單隱層神經網(wǎng)絡(見Figure 1),假設有個任意的樣本,其中,。對于一個有

2、個隱層節(jié)點的單隱層神經網(wǎng)絡可以表示為其中,為激活函數(shù),為輸入權重,為輸出權重,是第個隱層單元的偏置。表示和的內積。     單隱層神經網(wǎng)絡學習的目標是使得輸出的誤差最小,可以表示為即存在,和,使得可以矩陣表示為其中,是隱層節(jié)點的輸出,為輸出權重,為期望輸出。,為了能夠訓練單隱層神經網(wǎng)絡,我們希望得到,和,使得其中,這等價于最小化損失函數(shù)傳統(tǒng)的一些基于梯度下降法的算法,可以用來求解這樣的問題,但是基本的基于梯度的學習算法需要在迭代的過程中調整所有參數(shù)。而在ELM算法中, 一旦輸入權重和隱層的偏置被隨機確定,隱層的輸出矩陣就被唯一確定。訓練單隱層神經網(wǎng)絡可以轉化為求解

3、一個線性系統(tǒng)。并且輸出權重可以被確定其中,是矩陣的Moore-Penrose廣義逆。且可證明求得的解的范數(shù)是最小的并且唯一。三、實驗    我們使用簡單易學的機器學習算法Logistic回歸中的實驗數(shù)據(jù)。原始數(shù)據(jù)集我們采用統(tǒng)計錯誤率的方式來評價實驗的效果,其中錯誤率公式為:對于這樣一個簡單的問題,。MATLAB代碼主程序plain view plain copy 1. % 主函數(shù),二分類問題  2.   3. %導入數(shù)據(jù)集  4. A = load(

4、9;testSet.txt');  5.   6. data = A(:,1:2);%特征  7. label = A(:,3);%標簽  8.   9. N,n = size(data);  10.   11. L = 100;%隱層節(jié)點個數(shù)  12. m = 2;%要分的類別數(shù)  13.  

5、60;14. %-初始化權重和偏置矩陣  15. W = rand(n,L)*2-1;  16. b_1 = rand(1,L);  17. ind = ones(N,1);  18. b = b_1(ind,:);%擴充成N*L的矩陣  19.   20. tempH = data*W+b;  21. H = g(tempH);%得到H

6、  22.   23. %對輸出做處理  24. temp_T=zeros(N,m);  25. for i = 1:N  26.     if label(i,:) = 0  27.         temp_T(i,1) = 1;  28.  &

7、#160;  else   29.         temp_T(i,2) = 1;  30.     end      31. end  32. T = temp_T*2-1;  33.   34. outputWeight = 

8、;pinv(H)*T;  35.   36. %-畫出圖形  37. x_1 = data(:,1);    38. x_2 = data(:,2);    39. hold on    40. for i = 1 : N    41.    

9、60;if label(i,:) = 0    42.         plot(x_1(i,:),x_2(i,:),'.g');    43.     else    44.         plot(x_1(i,:),x_2(i,

10、:),'.r');    45.     end    46. end  47.   48. output = H * outputWeight;  49. %-計算錯誤率  50. tempCorrect=0;  51. for i = 1:N  52.  &#

11、160;  maxNum,index = max(output(i,:);  53.     index = index-1;  54.     if index = label(i,:);  55.         tempCorrect = tempCorrect+

12、1;  56.     end  57. end  58.   59. errorRate = 1-tempCorrect./N;  激活函數(shù)plain view plain copy 1. function  H  = g( X )  2.     H = 

13、1 ./ (1 + exp(-X);  3. end  ELM(Extreme Learning Machine)是一種新型神經網(wǎng)絡算法,最早由Huang于2004年提出【Extreme learningmachine: a new learning scheme of feedforward neural networks】。與SVM,傳統(tǒng)神經網(wǎng)絡相比,ELM的訓練速度非???,需要人工干擾較少,對于異質的數(shù)據(jù)集其泛化能力很強。Huang在【Extreme learning machines: a survey,2

14、011】這篇論文中對ELM進行了總結,包括最初的ELM算法和后來被發(fā)展延伸的ELM算法(比如在線序列ELM算法、增量ELM算法和集成ELM算法等),里面的很多知識點值得學習。ELM的原理從神經網(wǎng)絡的結構上來看,ELM是一個簡單的SLFN,SLFN示意圖如下:該SLFN包括三層:輸入層、隱含層和輸出層(忽略輸入層則為兩層)。其中隱含層包括L個隱含神經元,一般情況下L遠小于N,輸出層的輸出為m維的向量,對于二分類問題,顯然該向量是一維的。對于一個訓練數(shù)據(jù)樣本,忽略輸入層和隱含層而只考慮隱含層神經元的輸出和輸出層,則神經網(wǎng)絡的輸出函數(shù)表達式為:ai和bi是隱含層節(jié)點的參數(shù),表示第i個隱含層神經元和輸

15、出神經元之間的連接權值,即它是一個m維的權值向量。公式里面的G是隱含層神經元的輸出。針對加法型隱含層節(jié)點,G為:其中,小g為激勵函數(shù),激勵函數(shù)可以是線性函數(shù),也可以是sigmoid函數(shù);針對RBF型隱含層節(jié)點,G為:ai和bi分別表示了第i個徑向基函數(shù)節(jié)點的中心和影響因子。神經網(wǎng)絡輸出函數(shù)可以寫成:,其中:如果神經網(wǎng)絡能夠無誤差的預測訓練樣本,那么隱含層和輸出層的權值是有解的,特別的,當L=N時,肯定有解。但是實際問題中,L往往是遠小于N的,那么求解權值向量的問題是無解的,即網(wǎng)絡輸出和實際值之間有誤差,可以定義代價函數(shù)為:接下來如何求解最優(yōu)的權值向量,使得損失函數(shù)J最小呢?針對這個問題ELM分

16、兩種情況解決:a.如果H是列滿秩的,那么可以通過最小二乘找到最佳的權值,其解為:,其中:b.如果H是非列滿秩的,則使用奇異值分解求解H的廣義逆來計算最佳權值。和BP使用梯度下降迭代更新所有層之間權值不同,ELM不調整SLFN的輸入層和隱含層的權值,這些權值是隨即設定的,因此ELM的訓練速度非???。ELM注重于隱含層到輸出層的權值的選取,其采用的方法是最小二乘。ELM算法一般可以描述如下:在Huang的survey中描述了一種思想,該思想把SVM也看成了神經網(wǎng)絡,該思想把神經網(wǎng)絡的輸入層到最后一層隱含層的部分或者SVM核函數(shù)映射的部分都看成了從輸入空間到一個新的空間的轉換,然后,BP會將誤差反向

17、傳播更新權值使得誤差最小化,而SVM則力求找到最大分界間隔的分界面,將新空間映射到輸出空間,從這個角度來看,SVM確實可以看成是一種神經網(wǎng)絡。ELM最初算法就如上所述,從2004年至今,后來的學者對其進行了很多改進,主要包括對輸入層和隱含層權值隨即確定權值的優(yōu)化、求解隱含層和輸出層權值的優(yōu)化(使得ELM更適應于噪聲數(shù)據(jù)集)、核函數(shù)ELM以及加入了正則化項的損失函數(shù)(求解結構風險而不再是經驗風險)、ELM和其他方法相結合等。ELM為神經網(wǎng)絡的結構設計提供了一個新的思路,使我們更好地理解神經網(wǎng)絡,但是還有很多問題需要解決,比如隱含層節(jié)點個數(shù)的確定,正則化項的選擇等等。作為一個性能很好的機器,我們也

18、可以將其應用到諸多交叉學科的應用中。極限學習機(ELM)算法的matlab與C+實現(xiàn)· 極限學習機的原理 極限學習機(Extreme learning machine,ELM)是單隱層神經網(wǎng)絡的算法,其最大特點就是能在保證學習精度的前提下比傳統(tǒng)的學習算法快。其結構如下圖所示: 對于一個單隱層神經網(wǎng)絡,假設有N個任意的樣本(Xi,ti),其中, Xi=xi1,xi2,xinTRnti=ti1,ti2,timTRm 一個有L個隱層節(jié)點的單隱層神經網(wǎng)絡可以表示為: i=1Lih(WiXj+bi)=ojj=1,N其中,h(x)為激活函數(shù),&#

19、160;Wi=wi1,wi2,winT 為輸入權重,i為輸出權重,bi是第個隱層單元的偏置。Wi·Wj表示W(wǎng)i和Wj的內積。 單隱層神經網(wǎng)絡學習的目標是使得輸出的誤差最小,可以表示為: j=1Nojtj=0 即存在i,Wi和 bi使得 i=1Lih(WiXj+bi)=tjj=1,N 可以矩陣表示為: H=T 其中,是H隱層節(jié)點的輸出,為輸出權重,為T期望輸出。 H(W1,WL,b1,bL,X1,XL)=h(W1X1+b1)h(W1XN+b1)h(WLX1+bL)h(WLXN+bL)=T1TLT=

20、TT1TTNN×m傳統(tǒng)的一些基于梯度下降法的算法,可以用來求解這樣的問題,但是基本的基于梯度的學習算法需要在迭代的過程中調整所有參數(shù)。而在ELM算法中, 一旦輸入權重Wi和隱層的偏置bi被隨機確定,隱層的輸出矩陣就被唯一確定。訓練單隱層神經網(wǎng)絡可以轉化為求解一個線性系統(tǒng)H=T。并且輸出權重可以被確定。 =H+T其中,H+是矩陣H的Moore-Penrose廣義逆。且可證明求得的解的范數(shù)是最小的并且唯一。以一個簡單的二分類為例,分別用matlab和c+實現(xiàn)。matlab代碼如下:traindata=load('traindata.txt');feature=t

21、raindata(:,1:2);%特征label=traindata(:,3);%標簽X=feature;N,n=size(X);L=100;m=2;%二分類W=rand(n,L)*2-1;%權重-1到1b_1=rand(1,L);b=ones(N,1)*b_1;H=1./(1+exp(-X*W+b);temp_T=zeros(N,m);for i=1:N if(label(i)=1) temp_T(i,1)=1; temp_T(i,2)=0; else temp_T(i,1)=0; temp_T(i,2)=1; endendT=temp_T*2-1;beta=pinv(H)*T;x_1=X(

22、:,1);x_2=X(:,2);hold onfor i=1:N if(label(i)=1) plot(x_1(i),x_2(i),'.g'); else plot(x_1(i),x_2(i),'.r'); endc+代碼如下,這里的矩陣運算采用Eigen工具包,最難的地方就是廣義逆矩陣怎么求,參照網(wǎng)上的資源,代碼如下:#include <iostream>#include <fstream>#include <vector>#include <string>#include <Eigen/Dense>

23、;#include <Eigen/SVD>using namespace std;using namespace Eigen;template<typename _Matrix_Type_>bool pseudoInverse(const _Matrix_Type_ &a, _Matrix_Type_ &result, double epsilon = std:numeric_limits<typename _Matrix_Type_:Scalar>:epsilon() Eigen:JacobiSVD< _Matrix_Type_ &g

24、t; svd = a.jacobiSvd(Eigen:ComputeThinU | Eigen:ComputeThinV); if (a.rows() < a.cols() typename _Matrix_Type_:Scalar tolerance = epsilon * std:max(a.cols(), a.rows() * svd.singularValues().array().abs()(0); result = svd.matrixV() * (svd.singularValues().array().abs() > tolerance).select(svd.si

25、ngularValues().array().inverse(), 0).matrix().asDiagonal() * svd.matrixU().adjoint(); / return false; else typename _Matrix_Type_:Scalar tolerance = epsilon * std:max(a.cols(), a.rows() * svd.singularValues().array().abs().maxCoeff(); / Eigen:JacobiSVD< _Matrix_Type_ > svd = a.jacobiSvd(Eigen:

26、ComputeThinU | Eigen:ComputeThinV); / typename _Matrix_Type_:Scalar tolerance = epsilon * std:max(a.cols(), a.rows() * svd.singularValues().array().abs().maxCoeff(); result = svd.matrixV() * (svd.singularValues().array().abs() > tolerance).select(svd.singularValues().array().inverse(), 0).matrix(

27、).asDiagonal() * svd.matrixU().adjoint(); return true;int main() ifstream trainfile; trainfile.open("traindata.txt"); vector<vector<double>> traindata; vector<double> rowdata; double temp3; while (!trainfile.eof() for (int i = 0; i < 3;i+) trainfile >> tempi; rowdata.push_back(tempi); traindata.push_back(rowdata); rowdata.erase(rowdata.begin(), rowdata.end(); trainfile.close(); MatrixXd feature(traindata.size(), 2); VectorXd label(traindata.size();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論