bp網路能學習和存貯大量的輸入-輸出模式對映關係,而無需事前揭示描述這種對映關係的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的
誤差平方和
最小。bp神經網路
模型拓撲結構包括輸入層(input)、隱層(hide layer)和輸出層(output layer)。
學習速率決定每一次迴圈訓練中所產生的權值變化量。大的學習速率可能導致系統的不穩定,但小的學習速率將會導致訓練較長,收斂速度較慢,不過能保證網路的誤差值不跳出誤差表面的低谷而最終趨於最小誤差值。所以在一般情況下,傾向於選取較小的學習速率以保證系統的穩定性,學習速率選取範圍在0.01~0.8之間。對於乙個具體的網路都存在乙個合適的學習速率,但對於較複雜的網路,在誤差曲面的不同部位可能需要不同的學習速率。為了減少尋找學習速率的訓練次數以及訓練時間,比較合適的方法是採用變化的自適應學習速率,是網路的訓練在不同的階段自動設定不同學習速率的大小。
初始權值的選取:由於系統是非線性的,初始值對於學習是否達到區域性最小、是否能夠收斂以及訓練時間的長短關係很大。如果初始值太大,使得加權後的輸入落在啟用函式的飽和區,從而導致其導數非常小,而在加權值修正公式中,調節過程幾乎停頓下來。所以一般總是希望經過初始加權後的每個神經元的輸出值都接近於零,這樣可以保證每個神經元的權值都能夠在他們的s型啟用函式變化最大之處進行調節。所以一般取初始權值在(-1,1)之間的隨機數。
左側隱含層神經元的邏輯功能是實現兩個輸入p, q的或運算,右側隱含層神經元邏輯功能是實現兩個輸入p, q的與非運算。
利用兩個隱含層神經元利用「或」邏輯運算和「與非」的邏輯運算的方法來劃分輸入空間,抽取輸入空間中包含的特徵,從而在以兩個隱含層為輸入的輸出神經元當中,如上圖所示將輸入到輸出的非線性空間轉變為隱含層到輸出層的線性空間。
clear all;
clc;
%設定神經網路
in=3;h=2;out=1;
% wi=0.5*rands(in,h);
% wo=0.5*rands(h,out);
wi=[0.0688236608721927 -0.162877355601119;
-0.0306093589417942 -0.337817691806757;
-0.488097930498759 0.294284540683907];
wo=[-0.188784957955195;0.0285331355062127];
%儲存設定的加權係數權值
wi_original=wi;
wo_original=wo;
%慣性項初值設定
wo_1=wo;wo_2=wo;
wi_1=wi;wi_2=wi;
%學習因子和慣性係數的設定
xita=3;alfa=0.8;
%輸入和目標輸出
input=[1 0 0; 1 0 1;1 1 0;1 1 1];
output_target=[0 1 1 0];
output_last=;
output_target_last=;
error_skip=0;
n=1;
while (n<=10000)
for i=1:4
%隱含層和神經網路的輸出
for k=1:2
output_hidden(k)=1/(1+exp(-input(i,:)*wi(:,k)));
endoutput(i)= 1/(1+exp(-output_hidden*wo));
%輸出層和隱含層的學習與更新
delta2=output(i)*(1-output(i))*(output_target(i)-output(i));
for j=1:2
delta1(j)=output_hidden(j)*(1-output_hidden(j))*wo(j)*delta2;
endwo=wo+xita*output_hidden'*delta2+alfa*(wo_1-wo_2);
wi=wi+xita*input(i,:)'*delta1+alfa*(wi_1-wi_2);
wo_2=wo_1;wo_1=wo;
wi_2=wi_1;wi_1=wi;
enderror_skip=0;
for k=1:4
error_skip=error_skip+abs(output(i)-output_target(i));
endif error_skip<0.08
break;
endoutput_last=[output_last,output];
output_target_last=[output_target_last,output_target];
n=n+1;
end%輸出跟誤差曲線
for i=1:4*(n-1)
error(i)=0.5*(output_target_last(i)-output_last(i))^2;
endfigure(1)
plot(output_target_last,'.g','markersize',3);
hold on;
plot(output_last,'.r','markersize',3);
xlabel('迭代次數');
ylabel('目標輸出與實際輸出');
title('輸出曲線:學習因子:3,慣性係數:0.8');
legend('目標輸出','實際輸出');
figure(2)
plot(error,'.r','markersize',4);
xlabel('迭代次數');
ylabel('誤差');
title('誤差曲線:學習因子:3,慣性係數:0.8');
KMP模式識別演算法
kmp模式識別演算法看了很久一直沒有明白,一直到看見matrix67的博文,才恍然大悟。這裡貼上兩篇有助於理解的博文,第一篇把演算法描述的非常簡單易懂,第二篇主要有助於理解next陣列的計算 1 2 以下是字串下標從0開始的kmp實現的源 include include using namespac...
模式識別 統計模式識別(6)
上一節,我們討論了最小錯誤率分類器,接下來這一節我們將討論最小風險bayes分類器。1.問題提出 1.最小錯誤率bayes決策的最小錯誤率 概率意義上最優,在工程上是否是最優?2.錯誤分類的結果 代價或風險會是怎樣的?考慮癌細胞影象識別的例子 3.出錯的可能情況 正常細胞 1錯分為異常 2,異常細胞...
模式識別 統計模式識別(7)
上兩節我們介紹了最小錯誤率和最小風險bayes分類器,接下來談談最小最大決策。1.問題提出 假設c 2 現在我們假定一種情況,先驗概率未知或者不確定的前提,在這種前提下,絕對意義的最小風險不存在,這種情況下我們怎麼求bayes分類器。2.求解思路 雖然p 1 和p 2 未知,但我們可以假設他們確定,...