1. 程式人生 > >從雙層感知機到BP神經網路的Delta規則

從雙層感知機到BP神經網路的Delta規則

@(人工智慧)

BP神經網路推導–通過誤差傳遞學習內部表達

這是研一學習一門課程的課程實踐,當時和另一位實驗室小夥伴合作完成BP神經網路的推導以及部分應用,參考的是一本外文書籍(影印版)的部分章節,有我自己翻譯的部分,也有自己的理解,整理在一起。

問題的來源

在這之前,通過兩層網路結構瞭解一些概念!
之前學習過兩層網路的問題,是一種簡單的直接對映網路,只有輸入層和輸出層,輸入模式經過輸入層與輸出層對映,得到輸出對映。但這樣的網路沒有隱含層,也就沒有內部表達,對輸出輸出的要求也比較嚴格,必須滿足某種條件的對映。雖然有各種限制,兩層神經網路也有一定的應用,兩層的網路結構通常來完成一些合理的規則化對映,比如與問題(&),規則明顯,通過輸入輸出之間overlap就可以確定。
- 輸入模式:網路的輸入向量;
- 輸出模式:網路的輸出向量;
- 輸入層:輸入向量對應的輸入單元組成的單元集合;
- 輸出層:輸出向量對應的輸出單元組成的單元集合;
- 單元:網路的每個節點。

這裡的輸入模式和輸出模式是指的輸入向量和輸出向量,一個模式也就對應著一個向量,一個模式對也就是對應著對訓練資料。

但是由於這種簡單的輸入輸出的對映的限制,對於特定輸入到輸出的對映是沒有能力滿足的。特別是當輸入輸出的相似的結構提供的表達資訊非常不同的時候,沒有內部表達的神經網路是不能夠提供我們需要的唯一對映。一個比較經典的例子是異或問題(XOR),這時候,overlap可能產生多個結果,因此對這樣的問題,就需要內部編碼,增強網路的對映。

Input Layer OutPut Layer
0 0 0
0 1 1
1 0 1
1 1 0

對於XOR問題,可以修改雙層網路來變相求解,但是通用的方式還是新增內部表達。如下表,在輸入層新增一個節點:

Input Layer OutPut Layer
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

這都不是重點,重點是XOR問題,兩層結構的網路是沒辦法解決的(除了上面這個新增輸入層節點的方式),這就需要有新的網路結構,這樣的新的網路有更強的對映能力,解決兩層結構的網路不能解決的問題。

內部表達(internal representation)

什麼是內部表達?內部表達實際上是將輸入層編碼的一種表達,直觀上理解是將輸入層的輸入模式對映的一組編碼的網路結構(連線及權重),後面的敘述慢慢會體現這一點。
1969年,Minsky 和 Papert 提供了一個某種條件詳細的分析,這種條件存在於一個系統中,這個系統能夠解決需要的對映。他們通過大量的案例和網路展示了這種這種條件可以解決問題(我們需要的對映)。另一方面,M&P兩人同時還指出,若在一個簡單的類似於感知機隱藏單元,通過這個隱含單元,輸入層的輸入模式會被增強,輸入模式總是在隱藏單元被重新編碼(或者稱作內部表達),在這些隱藏層單元中,它們之間的模式的相似性,支援從輸入層到輸出層的對映。這樣的話,如果輸入層到隱藏單元之間存在正確的連結,並且這個隱藏單元集合足夠大,那麼就能找到一個內部表達,使得這樣的網路結構滿足輸入到輸出的對映。這裡的內部表達其實就是經過輸入層到隱藏層之間的網路連線權重,輸入模式被重新編碼。這就是引入隱藏層的網路結構,如下圖所示。
BP神經網路示意圖

利用隱藏層解決XOR問題,在文中給出了一個說明,只需添加了只有一個節點的隱藏層。下圖有說明:
XOR問題

這樣的網路的存在,說明了隱藏層和內部表達的求解問題(對映)能力。M& P指出這樣一個問題:對於沒有隱藏層的網路,存在一個非常簡單的對所有問題的學習規則,這個規則可以保證解決所有的對映問題(沒有隱藏層的網路),這個規則被稱作是感知器收斂規則,也被人稱作delta規則,但是在具有隱藏層的神經網路中,沒有同樣的能力的規則。
對於這樣的缺陷,有三個基本的反饋(不太理解這裡什麼意思):
1. 第一個原因是競爭學習,在競爭學習中,使用簡單的非監督學習規則,以致於有用的隱藏層單元發展。儘管這些方法是有前景的,但是沒有外部的力量保證隱藏層單元適用於我們需要的對映,而且這些對映已經成熟的。
2. 第二個原因是簡單的假設內部表達,雖然有一些先驗的根據,看起來這是有根據的。這是在verb learning章節和互動啟用單詞認知模型的策略,
3. 第三個原因是嘗試開發一個學習過程,這個過程學習過程由能力學習一個內部表達,內部表達足夠解決當前的任務。在玻爾茲曼機的章節中,有描述類似的過程。正如我們所看到的,這個過程包含隨機單元的使用,需要使網路達到兩個階段對等的狀態,這限制了網路的同步。當然,其他人也使用了隨機單元。

在本章節內容,我們提出了一個可供選擇的方式,這種方式採用確定的單元(數),並且僅涉及區域性計算,是一個delta規則的清晰的泛化。我們稱之為通用的delta規則。出於其他方面的考慮,Parker獨立推導了類似的泛化,他稱之為學習邏輯(learning logic).Lee Cun也研究了一個粗略的學習框架。下面的內容,首先要推導通用delta規則,然後通過一些模擬的結果來說明delta規則的使用,最後,我們指明這個基礎想法的更長遠的泛化。

通用Delta規則

這這裡提到的學習框架,需要涉及一個輸入模式輸出模式對的集合(就是訓練資料)。系統首先用一個輸入向量,輸入網路結構,得到一個輸出向量;每個輸入向量都有一個對應的期望輸出向量、或者稱作是目標向量;比較實際輸出向量與期望輸出向量的差別,若沒有差別,就不再繼續學習;否則,連線的權重修改對應的差值(delta差)。

沒有隱藏層節點的網路中的Delta規則

先從簡單的開始,沒有隱藏層節點的網路結構,Delta規則計算。通用計算公式(1)如下:

公式(1):

Δpωji=η(tpjopj)ipi=ηδpjipi
其中:
- tpj表示模式對p的輸出向量(期望輸出)的第j個元素;
- opj表示模式對p的輸入向量得到實際輸出(輸入向量的表達)的第j個元素;
- ipi表示輸入模式的輸入向量的第i個元素;
- δpj是簡化(tpjopj)
- Δpωji表示輸入層第i個節點到輸出層第j個節點連線的權重的變化;
- η只是一個常量

Delta規則與梯度下降

有很多方法可以推導這個公式,對於當前的目標是,線性神經元,最小化應用每一個輸入輸出模式向量,得到所有輸出單元的實際輸出與期望輸出的差的平方和,這是非常有用的。得到這個最小值的方法是求解測量誤差的梯度值,對於每個權重,根據Delta規則成比例的改變,這個比例是一個負的常數。為了在權重表面空間下降的最快,在這個權重空間任意點的高度應該與測量誤差相等(說的比較繞,其實就是求一個梯度)。

具體步驟如下:

公式(2):

Ep=12j(tpjopj)2
表示對於每個輸入輸出模式p的測量誤差,所有輸入輸出模式的總誤差是E=pEp。神經單元是線性的,因此我們實現Delta規則是對E梯度下降的。具體步驟:
Epωji=δpjipi

後面是公式推導,這與前面計算的Δpωji是成比例的。本部分假設沒有隱藏層單元,因此可以直接計算出相關的梯度。下面,我們用鏈式規則來分解梯度求解:分解為兩部分,誤差對實際輸出的求導,和實際輸出對對應的權重求導。

公式(3):

Epωji=Epopjopjωji

前半部分告訴我們誤差是怎麼根據第j個單元的實際輸出改變的,後半部分告訴我們根據地j個節點的輸出,權重要改變多少,這樣的話,梯度就比較