神經網路設計 學習規則總結

2021-06-19 20:15:29 字數 3041 閱讀 6180

學習規則,就修改神經網路的權值和偏置值的過程和方法,其目的是為了訓練網路來完成某些工作。

學習規則主要有3種型別:有監督學習、無監督學習和增強學習。

1,有監督學習

根據輸入和目標輸出(注意區分目標輸出和實際輸出!)來調整權值和偏置值。

2,無監督學習

僅僅根據網路的輸入調整網路的權值和偏值,沒有目標輸出。

3,感知機學習規則_有監督學習

4,hebb學習規則_無監督學習

線性聯想器:

hebb假設:若一條突觸兩側的兩個神經元同時被啟用,那麼突觸的強度將會增大!

hebb假設的數學解析:如果乙個正的輸入

或則寫成矩陣的形式:

說明:由於權值只是根據輸入向量和輸出向量來調整,與目標無關,因此這個規則是屬於無監督的學習規則!

5,hebb學習規則_有監督學習

將無監督的hebb學習規則中的實際輸出

將上式用矩陣的形式表示為:

使用說明:利用這個規則來求權值矩陣時,要求將輸入向量標準化(向量長度為1)!

6,仿逆規則

說明:這個規則是hebb有監督學習規則的模仿版!使用

使用說明:利用這個規則求權值矩陣,不用將輸入向量標準化!

7,hebb學習的變形_過濾學習

說明:8,hebb學習的變形_增量學習——widrow-hoff演算法

說明:增量規則調整權值以使均方誤差最小,因而它與仿逆規則得到的結果相同,仿逆規則使誤差平方和最小化。

優點:每輸入乙個模式,它就能更新一次權值,而仿逆規則要等待所有輸入/輸出模式已知後才能計算一次權值。這中順序的權值更新方法使得增量規則能適應變化的環境。

9,無監督hebb學習規則matlab實現

根據4的公式,可以編寫matlab實現**如下:

clear all

clc%6輸入,1輸出,每行的第1個元素為目標,第2~7個元素為輸入

ai=[1,1 0 1 1 1 0;

1,0 1 0 1 1 1;

1,1 1 1 1 0 0;

0,0 0 1 0 0 1;

0,1 0 0 1 0 0;

0,0 0 0 0 0 0];

iter=0; %實際迭代次數

a=1; %學習速率

maxiter=3; %最大迭代次數

counter=0; %正確輸出個數

[m n]=size(ai);

b=0; % 偏置值

w=ones(1, n-1)*0.1; %權值向量,初始化為0

t=ai(:,1); %正確結果,即是目標輸出!

a=ai(:,2:n); %訓練樣本 ,每行為乙個輸入向量!

y=zeros(1,m); %輸出結果

stop=0;

while ~stop&&iter

執行結果:

迭代次數:

iter = 6

權值:w = 50.1000    8.5000   25.1000   51.7000    2.1000   19.5000

目標:t =  1     1     1     0     0     0

輸出:y = 0.4000    1.6000    6.8000   17.8000   42.8000   69.4000

修改最大迭代次數:maxiter=100,再次執行:

迭代次數:

iter = 102

權值:w =1.0e+46 *

5.4217    0.9041    2.7061    5.5918    0.2146    2.0978

目標:t =  1     1     1     0     0     0

輸出:y =   1.0e+46 *

0.0444    0.1699    0.7328    1.9247    4.6361    7.5310

結論:對比目標和結果,可以知道w的調整是不對的!對比兩次的輸出結果可以發現,當迭代次數增加時,w的值也會變大。經過測試發現,w會隨著迭代次數的增加而趨向於無窮大!這是我們不願看到的!

將 w=w+a*r*x改為w=w+a*t(i)*x,將b=b+a*t(i)改為b=b+a*r,即可將無監督學習改為有監督學習。經測試發現,結果還是不行!

10,有監督hebb學習規則matlab實現 

根據5的公式,可以程式設計如下:

clear

clc%目標向量,每1列為乙個目標

t=[1 1;

-1 1;

0 0];

%輸入向量,每1列為乙個輸入,它們是標準正交向量!

p=[0.5 0.5

-0.5 0.5

0.5 -0.5

-0.5 -0.5];

[m,n]=size(p);

[m2,n2]=size(t);

w=zeros(n, m); %權值向量,初始化為0

y=zeros(m2,1); %輸出結果

%根據hebb規則公式計算w

w=t*p';

%驗證w的準確性

y=w*p(:,2);

%輸出結果

fprintf(1,'權值:');

wfprintf(1,'輸出:');

y

輸出結果:

權值:w =

1     0     0    -1

0     1    -1     0

0     0     0     0

輸出:y =11

0    

對比輸入結果和目標,發現結果是正確的!

參考資料

《神經網路設計》,機械工業出版社

hebb學習規則

learnh

神經網路學習(十)淺層BP神經網路總結

系列部落格是博主學習神經網路中相關的筆記和一些個人理解,僅為作者記錄筆記之用,不免有很多細節不對之處。我的這一階段目標是在學習完淺層bp神經網路的相關知識時,可以將手寫字的識別率達到98 在前面的幾次實驗中,mnist手寫字的識別率始終未達到98 以上,這樣的結果是有些讓人沮喪的。今天進過艱苦奮鬥,...

神經網路總結()

最近幾天綜合的看了一下以前上課用的cmu的tom m.mitchell的機器學習,michael a.nielsen,neural networks and deep learning 還有趙永科著的深度學習,21天實戰caffe。一次性接受的有點多。但是,萬變不離其宗,總歸是用反向傳播演算法。細緻...

神經網路設計學習筆記(7) 感知機學習規則(4)

本次部落格接上次的部落格,繼續闡述感知機的學習規則。在學習規則徹底學習結束,將用matlab進行簡單實踐。學習規則的構造 為了完成上次部落格所提到的測試問題,需要對學習規則進行構造,在訓練開始時,為網路的引數賦予一些初始值。這裡僅需對其兩個權值進行初始化。然後將輸入向量提供給網路。但是網路沒有返回正...