BP网络详解
概述
神經網絡是由大量簡單的處理單元來模擬真實人腦神經網絡的機構和功能以及若干基本特性,是一個高度復雜的非線性自適應動態處理系統。按照連接模式,神經網絡模型可分為前饋式神經網絡和反饋式神經網絡,BP網絡屬于前饋式。
BP算法的提出:Rumelhart,McClelland于1985年提出了BP網絡的誤差反向后傳BP(Back Propagation)學習算法。利用輸出后的誤差來估計輸出層的直接前導層的誤差,再用這個誤差估計更前一層的誤差,如此一層一層的反傳下去,就獲得了所有其他各層的誤差估計。
BP神經網絡的提出:1986年由Rumelhart和McCelland為首的科研小組提出,參見他們發表在Nature上的論文 Learning representations by back-propagating errors。
BP神經網絡名字源于網絡權值的調整規則采用的是后向傳播學習(BP)算法,是一種按誤差逆傳播算法訓練的多層前饋神經網絡,是目前應用最廣泛的神經網絡模型之一。BP神經網絡能學習和存貯大量的輸入-輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。BP神經網絡的主要思想就是在確定了網絡結構后,通過輸入和輸出樣本集對網絡進行訓練和學習,以使網絡實現給定的輸入和輸出映射關系。
BP神經網絡基本原理
BP神經網絡屬于有監督學習
BP神經網絡神經元模型
神經網絡神經元模型主要的不同在于傳遞函數的不同。傳遞函數是BP網絡的重要組成部分,又稱激活函數,必須是連續可導的。BP網絡常采用的傳遞函數如下:
- S型對數函數:logsig 函數。函數公式:
logsig(n) = 1 / (1 + exp(-n));matlab調用格式:A=logsig(N,FP);使用語法:net.layers{i}.transferFcn = ‘logsig’。
N為Q個S維的輸入列向量;FP為功能結構參數(可選);A為函數返回值,位于區間(0,1)中。
- 雙曲正切S型傳遞函數:tansig 函數;函數公式:
a = tansig(n) = 2/(1+exp(-2*n))-1;matlab調用格式:A=tansig(N,FP);使用語法:net.layers{i}.transferFcn = ‘tansig’。含義與上述相同,不同在于輸出區間(-1,1)中(這也是與logsig函數不同的地方)。
- 線性傳遞函數:purelin 函數,調用格式:A = purelin(N,FP)
含義與上述相同,不同在于其輸出等于輸入,即A=N。
網絡拓撲結構
BP網絡是典型的多層網絡結構,而多層網絡可以解決很多單層網絡無法解決的問題,比如多層網絡可以用來進行非線性分類、做精度極高的函數逼近。為了描述方便,我們選擇三層BP網絡,網絡結構包含一個輸入層、一個隱含層和一個輸出層,其網絡結構如下圖。設n為輸入層神經元數, h為隱含層神經元數,m為輸出層神經元數。
各層的神經元個數確定:
- 輸入層:輸入層的神經元個數輸入訓練集的特征向量的維度。
隱含層:有多種隱含層節點個數確定的方法,常見方法如下圖。
對于多層前饋網絡來說,隱層節點數的確定是成敗的關鍵。若數量太少,則網絡所能獲取的用以解決問題的信息太少;若數量太多,不僅增加訓練時間,更重要的是隱層節點過多還可能出現所謂“過擬合”(Overfitting)問題,即測試誤差增大導致泛化能力下降,因此合理選擇隱層節點數非常重要。關于隱層數及其節點數的選擇比較復雜,一般原則是:在能正確反映輸入輸出關系的基礎上,應選用較少的隱層節點數,以使網絡結構盡量簡單。
- 輸出層:輸出層的神經元個數為輸出類別N的log2(N);或者是N。
BP神經網絡的學習算法
- 學習的過程:神經網絡在外界輸入樣本的刺激下不斷改變網絡的連接權值,以使網絡的輸出不斷地接近期望的輸出。
- 信號的正向傳播:輸入樣本--輸入層--各隱層--輸出層
- 誤差的反向傳播:若輸出層的實際輸出與期望的輸出不符,誤差以某種形式在各層表示,即修正各層單元的權值,最后當網絡輸出的誤差減少到可接受的程度進行到預先設定的學習次數為止。
- 學習的本質:對各連接權值的動態調整。
- 學習規則:權值調整規則,即在學習過程中網絡中各神經元的連接權變化所依據的一定的調整規則。
BP神經網絡常用的訓練函數:
Levenberg-Marquardt算法訓練函數:trainlm();特點:收斂速度和網絡精度,對于中等規模的BP神經網絡有最快的收斂速度,是系統默認的算法。由于其避免了直接計算赫賽矩陣,從而減少了訓練中的計算量,但需要較大內存量。
梯度下降BP算法函數:traingd(),沿網絡性能參數的負梯度方向調整網絡的權值和閾值。
梯度下降動量BP算法函數:traingdm(),是一種批處理的前饋神經網絡訓練方法,不但具有更快的收斂速度,而且引入了一個動量項,有效避免了局部最小問題在網絡訓練中出現。
BFGS準牛頓BP算法函數:trainbfg();特點:收斂速度介于梯度下降法和牛頓法之間,適用于小規模數據,具有收斂速度快,精度高等特點。除了BP網絡外,該函數也可以訓練任意形式的神經網絡,只要它的傳遞函數對于權值和輸入存在導函數即可。參考
BP神經網絡的MATLAB實現
前饋BP神經網絡構造函數:net = feedforwardnet(h),其中h為隱含層結點個數,如果是多層隱含層,則h=[n1,n2,...,nn]。ni表示各個隱含層對應的結點數。
老版本的構造函數是newff(),現在使用的是feedforwardnet函數。
常用網絡配置參數如下:
1
2
3
4
5
6net.trainFcn = 'trainbfg'; % 神經網絡的訓練函數設置
net.trainParam.epochs=1000; % 最大迭代次數,允許最大訓練步數1000步
% net.trainParam.max_fail = 10; % 驗證錯誤個數,默認為6
net.trainParam.lr = 0.1; % 學習率
net.trainparam.goal = 0; % 神經網絡訓練的目標誤差
net.trainparam.show; % 顯示中間結果的周期實例
1
2
3
4
5
6
7
8
9
10
11
12
13% 注意訓練集及標簽為traind,trainl,測試集為testd,其中矩陣的行為樣本,列表示特征向量。
dim = length(traind(1,:)); % 輸入向量的維度
% 創建和訓練網絡
net = feedforwardnet(2*dim+1);
net.trainFcn = 'trainbfg';
net.trainParam.epochs=1000; %允許最大訓練步數1000步
% net.trainParam.max_fail = 10; % 默認為6
% view(net); % 查看網絡
net = train(net,traind',trainl'); % 訓練網絡
test_out=sim(net,testd'); % 測試集測試網絡
% 結果分析,對數據取整處理
test_out(test_out>=0.5)=1;
test_out(test_out<0.5)=0;
BP神經網絡的特點
- 非線性映射能力:能學習和存貯大量輸入-輸出模式映射關系,而無需事先了解描述這種映射關系的數學方程。只要能提供足夠多的樣本模式對供網絡進行學習訓練,它便能完成由n維輸入空間到m維輸出空間的非線性映射。
- 自學習和自適應能力:BP神經網絡在訓練時,能夠通過學習自動提取輸出、輸出數據間的“合理規則”,并自適應的將學習內容記憶于網絡的權值中。即BP神經網絡具有高度自學習和自適應的能力。
- 泛化能力:當向網絡輸入訓練時未曾見過的非樣本數據時,網絡也能完成由輸入空間向輸出空間的正確映射。這種能力稱為泛化能力。
- 容錯能力:輸入樣本中帶有較大的誤差甚至個別錯誤對網絡的輸入輸出規律影響很小。
BP網絡的局限性
- 需要較長的訓練時間:這主要是由于學習速率太小所造成的,可采用變化的或自適應的學習速率來加以改進。
- 完全不能訓練:這主要表現在網絡的麻痹上,通常為了避免這種情況的產生,一是選取較小的初始權值,而是采用較小的學習速率。
- 局部最小值:這里采用的梯度下降法可能收斂到局部最小值,采用多層網絡或較多的神經元,有可能得到更好的結果。
參考:神經網絡學習 之 BP神經網絡
總結
- 上一篇: 英特尔 CEO:年底前决定是否在意大利建
- 下一篇: Readiness 探测 - 每天5分钟