機器學習:遺傳算法原理及實例解析[閱讀筆記]


  在平時的研究之余,希望每天晚上閑下來的時候,都學習一個機器學習算法,今天看到幾篇不錯的遺傳算法的文章,在這里總結一下。

1 神經網絡基本原理

 

圖1. 人工神經元模型

 

       圖中x1~xn是從其他神經元傳來的輸入信號,wij表示表示從神經元j到神經元i的連接權值,θ表示一個閾值 ( threshold ),或稱為偏置( bias )。則神經元i的輸出與輸入的關系表示為:

 

  圖中 yi表示神經元i的輸出,函數f稱為激活函數 ( Activation Function )或轉移函數 ( Transfer Function ) ,net稱為凈激活(net activation)。若將閾值看成是神經元i的一個輸入x0的權重wi0,則上面的式子可以簡化為:

 

  若用X表示輸入向量,用W表示權重向量,即:

X = [ x0 , x1 , x2 , ....... , xn ]

 

  則神經元的輸出可以表示為向量相乘的形式:

 

 

       若神經元的凈激活net為正,稱該神經元處於激活狀態或興奮狀態(fire),若凈激活net為負,則稱神經元處於抑制狀態。

       圖1中的這種“閾值加權和”的神經元模型稱為M-P模型 ( McCulloch-Pitts Model ),也稱為神經網絡的一個處理單元( PE, Processing Element )

2. 常用激活函數 

       激活函數的選擇是構建神經網絡過程中的重要環節,下面簡要介紹常用的激活函數。

(1) 線性函數 ( Liner Function )

 

(2) 斜面函數 ( Ramp Function )

 

(3) 閾值函數 ( Threshold Function )

 

 

 

       以上3個激活函數都屬於線性函數,下面介紹兩個常用的非線性激活函數。

(4) S形函數 ( Sigmoid Function )

  該函數的導函數:

(5) 雙極S形函數 

  該函數的導函數:

  S形函數與雙極S形函數的圖像如下:


圖3. S形函數與雙極S形函數圖像

  雙極S形函數與S形函數主要區別在於函數的值域,雙極S形函數值域是(-1,1),而S形函數值域是(0,1)。

  由於S形函數與雙極S形函數都是可導的(導函數是連續函數),因此適合用在BP神經網絡中。(BP算法要求激活函數可導)

3. 神經網絡模型 

       神經網絡是由大量的神經元互聯而構成的網絡。根據網絡中神經元的互聯方式,常見網絡結構主要可以分為下面3類:

(1) 前饋神經網絡 ( Feedforward Neural Networks )

       前饋網絡也稱前向網絡。這種網絡只在訓練過程會有反饋信號,而在分類過程中數據只能向前傳送,直到到達輸出層,層間沒有向后的反饋信號,因此被稱為前饋網絡。感知機( perceptron)與BP神經網絡就屬於前饋網絡。

       圖4 中是一個3層的前饋神經網絡,其中第一層是輸入單元,第二層稱為隱含層,第三層稱為輸出層(輸入單元不是神經元,因此圖中有2層神經元)。

圖4. 前饋神經網絡

 

  對於一個3層的前饋神經網絡N,若用X表示網絡的輸入向量,W1~W3表示網絡各層的連接權向量,F1~F3表示神經網絡3層的激活函數。

  那么神經網絡的第一層神經元的輸出為:

O1 = F1( XW1 )

  第二層的輸出為:

O2 = F2 ( F1( XW1 ) W2 )

  輸出層的輸出為:

O3 = F3( F2 ( F1( XW1 ) W2 ) W3 )

       若激活函數F1~F3都選用線性函數,那么神經網絡的輸出O3將是輸入X的線性函數。因此,若要做高次函數的逼近就應該選用適當的非線性函數作為激活函數。

(2) 反饋神經網絡 ( Feedback Neural Networks )

       反饋型神經網絡是一種從輸出到輸入具有反饋連接的神經網絡,其結構比前饋網絡要復雜得多。典型的反饋型神經網絡有:Elman網絡和Hopfield網絡。

圖5. 反饋神經網絡

 

(3) 自組織網絡 ( SOM ,Self-Organizing Neural Networks )

       自組織神經網絡是一種無導師學習網絡。它通過自動尋找樣本中的內在規律和本質屬性,自組織、自適應地改變網絡參數與結構。

圖6. 自組織網絡

 

4. 神經網絡工作方式 

       神經網絡運作過程分為學習和工作兩種狀態。

(1)神經網絡的學習狀態 

       網絡的學習主要是指使用學習算法來調整神經元間的聯接權,使得網絡輸出更符合實際。學習算法分為有導師學習( Supervised Learning )無導師學習( Unsupervised Learning )兩類。

       有導師學習算法將一組訓練集 ( training set )送入網絡,根據網絡的實際輸出與期望輸出間的差別來調整連接權。有導師學習算法的主要步驟包括:

1)  從樣本集合中取一個樣本(Ai,Bi);

2)  計算網絡的實際輸出O;

3)  求D=Bi-O;

4)  根據D調整權矩陣W;

5) 對每個樣本重復上述過程,直到對整個樣本集來說,誤差不超過規定范圍。

  BP算法就是一種出色的有導師學習算法。

       無導師學習抽取樣本集合中蘊含的統計特性,並以神經元之間的聯接權的形式存於網絡中。

       Hebb學習律是一種經典的無導師學習算法。

(2) 神經網絡的工作狀態 

       神經元間的連接權不變,神經網絡作為分類器、預測器等使用。

  下面簡要介紹一下Hebb學習率與Delta學習規則 。

(3) 無導師學習算法:Hebb學習率 

   Hebb算法核心思想是,當兩個神經元同時處於激發狀態時兩者間的連接權會被加強,否則被減弱。 

       為了理解Hebb算法,有必要簡單介紹一下條件反射實驗。巴甫洛夫的條件反射實驗:每次給狗喂食前都先響鈴,時間一長,狗就會將鈴聲和食物聯系起來。以后如果響鈴但是不給食物,狗也會流口水。

 

  受該實驗的啟發,Hebb的理論認為在同一時間被激發的神經元間的聯系會被強 化。比如,鈴聲響時一個神經元被激發,在同一時間食物的出現會激發附近的另一個神經元,那么這兩個神經元間的聯系就會強化,從而記住這兩個事物之間存在着 聯系。相反,如果兩個神經元總是不能同步激發,那么它們間的聯系將會越來越弱。

  Hebb學習律可表示為:

       其中wij表示神經元j到神經元i的連接權,yi與yj為兩個神經元的輸出,a是表示學習速度的常數。若yi與yj同時被激活,即yi與yj同時為正,那么Wij將增大。若yi被激活,而yj處於抑制狀態,即yi為正yj為負,那么Wij將變小。

(4) 有導師學習算法:Delta學習規則

  Delta學習規則是一種簡單的有導師學習算法,該算法根據神經元的實際輸出與期望輸出差別來調整連接權,其數學表示如下:

 

       其中Wij表示神經元j到神經元i的連接權,di是神經元i的期望輸出,yi是神經元i的實際輸出,xj表示神經元j狀態,若神經元j處於激活態則xj為 1,若處於抑制狀態則xj為0或-1(根據激活函數而定)。a是表示學習速度的常數。假設xi為1,若di比yi大,那么Wij將增大,若di比yi小, 那么Wij將變小。

       Delta規則簡單講來就是:若神經元實際輸出比期望輸出大,則減小所有輸入為正的連接的權重,增大所有輸入為負的連接的權重。反之,若神經元實際輸出比 期望輸出小,則增大所有輸入為正的連接的權重,減小所有輸入為負的連接的權重。這個增大或減小的幅度就根據上面的式子來計算。

(5)有導師學習算法:BP算法 

  采用BP學習算法的前饋型神經網絡通常被稱為BP網絡。

圖8. 三層BP神經網絡結構

 

  BP網絡具有很強的非線性映射能力,一個3層BP神經網絡能夠實現對任意非線性函數進行逼近(根據Kolrnogorov定理)。一個典型的3層BP神經網絡模型如圖7所示。

  BP網絡的學習算法占篇幅較大,我打算在下一篇文章中介紹。

 

5 實例

  Hebb學習規則代表一種純向前的非監督學習。這里用一個簡單的例子來說明具有簡單網絡的二進制和連續激活函數的Hebb學習情況。如圖:

       D.D.Hebb學習規則舉例——神經網絡的訓練算法
  假定具有以下初始權向量的網絡如上圖所示。
  初始權向量   W1 = [1, -1, 0, 0.5]T
 
  輸入  X = [x1, x2, x3, x4]T
  訓練集用以下三個輸入向量   X1 = [1, -2, 1.5, 0]T  ; X2 = [1, -0.5, -2, -1.5]T  ; X3 = [0, 1, -1, 1.5]T
 

  學習常數在這里則設為 η = 1。因為初始權重具有非零值,這意味着這個網絡事先已經明顯受過訓練。這里我們采用雙機二進制神經元,

  那么 f(net) = sgn(net)。

  學習過程有以下步驟:

  第一步 加到網絡的輸入X1產生如下的net

      net1 = (W1)TX1 = [1, -1, 0, 0.5]*[1, -2, 1.5, 0]T  = 3

    更新的權是

      W2 = W1 + sgn(net1)X1 = W1 + X1 = [1, -1, 0, 0.5]T + [1, -2, 1.5, 0]T = [2, -3, 1.5, 0.5]T

    其中在表達式右邊的下標表示當前調節步數。

 

  第二步 這次學習使用X2作輸入,重復第一步的步驟  W3 = [1, -2.5, 3.5, 2]

 

  第三步 這次學習使用X3作輸入,重復第一步的步驟  W4 = [1, -3.5, 4.5, 0.5]

  由上可見,具有離散f(net)和η = 1的學習分別產生加整個輸入模式向量到權向量中或者從權中減去整個輸入模式向量。在連續f(net)的情況,權增加/減少向量按比例縮小到輸入模式的分數值。

 

  下面看一個具有連續雙極激活函數f(net),用輸入X1和初始權W1的Hebb學習例子。

  同在第一步概況那樣,我們得到神經元輸出值和對於 λ=1 更新權,和以前的情況比較,不同的是f(net), 現在的激活函數如下式f(net) = 2/[1+exp(-λ*net)] - 1

  通過計算可得

    f(net1) = 0.905   f(net2) = -0.077 f(net3) = -0.932

    W2 = [1.905, -2.81, 1.357, 0.5]T   W3 = [1.828, -2.772, 1.512, 0.616]T         W4 = [1.828, -3.70, 2.44, -0.783]T

  通過對比離散的和連續的激活函數,可見 對於連續的激活函數,權調節成錐形,但是一般是在同一方向上的。

 

 

 文章來自  http://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM