人工智能深度學習入門練習之(34)深度學習 – 多層神經網絡


深度學習 – 多層神經網絡

單層網絡

先回顧一下單層網絡,即一個神經元(自適應線性單元),如下圖所示。

圖

可以使用梯度下降法訓練模型,確定權重與偏置。

多層神經網絡歷史

深度學習涉及訓練多層神經網絡,也稱為深度神經網絡。

在20世紀50年代Rosenblatt感知器被開發出來之后,直到1986年hinton博士和他的同事開發了反向傳播算法來訓練多層神經網絡,人們才重新對神經網絡產生了興趣。

現在,深度神經網絡是一個熱門技術,許多大公司,如百度,阿里,騰訊,谷歌,Facebook和微軟,都在深度神經網絡項目上投入巨資。

多層神經網絡

神經網絡其實就是按照一定規則連接起來的多個神經元。

圖

上圖展示了一個全連接(full connected, FC)神經網絡,它的規則包括:

  • 神經元按照層來布局。最左邊的輸入層,負責接收輸入數據;最右邊的輸出層,負責輸出數據。
  • 中間是隱藏層,對於外部不可見。隱藏層可以包含多層,大於一層的就被稱為深度神經網絡,層次越多數據處理能力越強。
  • 同一層的神經元之間沒有連接。
  • 前后兩層的所有神經元相連(這就是full connected的含義),前層神經元的輸出就是后層神經元的輸入。
  • 每個連接都有一個權值。

上面這些規則定義了全連接神經網絡的結構。事實上還存在很多其它結構的神經網絡,比如卷積神經網絡(CNN)、循環神經網絡(RNN),它們都具有不同的連接規則。

多層感知器(MLP)

一個完全連接的多層神經網絡被稱為多層感知器(MLP),或深度前饋網絡(deepfeedforwardnetwork)、前饋神經網絡(feedforward neural network),是典型的深度學習模型。

層數和每層的神經元數被稱為神經網絡的超參數,由開發人員根據經驗預先設置。

權重的調整訓練還是通過梯度下降法來進行,但梯度的求取使用反向傳播法。

多層神經網絡的訓練過程

多層神經網絡的訓練過程,按如下步驟進行:

  1. 從輸入層開始,將數據經過神經網絡傳輸到輸出層,這一步是前向傳播。
  2. 根據輸出,計算誤差(預測結果和已知結果之間的差異),得到代價函數。利用梯度下降法最小化誤差。
  3. 梯度下降法需要計算每個權重的梯度,使用反向傳播算法計算梯度,根據梯度調整權重值。

重復以上3個步驟訓練權重。

與單層網絡的區別

從大的方面來說,兩者都是通過梯度下降法,求取代價函數的最小值,來訓練權重。

區別在於,多層神經網絡引入了反向傳播算法來計算梯度。

單層網絡中,權重的梯度計算是直接求代價函數對某個權重的偏導數,單層網絡的代價函數相對簡單,可以這樣做。

但是多層神經網絡中,越靠近輸入層的權重,其代價函數越復雜,計算量非常大。而反向傳播算法是一種高效簡單的梯度算法。

深度學習 – 反向傳播

梯度

一個深度神經網絡的權重參數有可能會達到百萬級,權重的梯度計算非常耗時,反向傳播是一種非常高效的梯度算法。

一個神經網絡中的所有權重參數可以表示為:

 

 

 

 

 

 

利用鏈式求導法則,計算代價函數相對於某個權重的偏導數(梯度),可以轉化為這個權重之后所有層次的偏導數的表達式。

反向傳播計算過程

反向傳播由輸出端往輸入端逐層計算權重的梯度。

我們假設有下面這樣3層神經網絡:

反向傳播1

神經元o1如下圖所示:

神經元o1

設神經網絡的代價函數為J(w)J(w), ww表示所有權重參數,根據鏈式法則,w5w5的梯度(偏導數)可以表示為:

理解反向傳播算法

對於反向傳播算法的理解,可以打個比方,一個公司一年的利潤與目標差距比較大,公司開始找原因,看看誰的責任比較大。從管理層開始逐層往下找,確定每個人的責任(梯度)。反向傳播算法,就是分黑鍋,梯度是對偏差的貢獻,就是黑鍋。

深度學習 – 反向傳播例子

為加深對反向傳播算法的理解,本章將演示一個實際的權重計算例子。

考慮下面的神經網絡:

神經網絡例子

上圖中的神經網絡包括以下部分:

  • 2個輸入
  • 2個隱藏的神經元
  • 2個輸出神經元
  • 2個偏置

下面是反向傳播涉及的步驟:

  • 步驟1: 前向傳播
  • 步驟2: 反向傳播
  • 步驟3: 權重值更新

步驟1: 前向傳播

我們從前向傳播開始。

圖

我們將對輸出層神經元重復這個過程,使用隱藏層神經元的輸出作為輸入。

圖

現在,讓我們看看最后的誤差值是多少:

圖

步驟2: 反向傳播

現在,我們反向傳播,計算出梯度。這樣我們就可以通過權重值的調整來減少誤差。

考慮W5,計算w5的梯度,調整w5的值。

圖

因為我們是反向傳播的,所以第一件事,是計算總誤差對o1輸出的變化率(導數)。

圖

現在,我們將進一步向后傳播,計算o1輸出對o1總凈輸入的變化率(導數)。

圖

現在讓我們看看O1的總凈輸入對W5的變化率(導數)

圖

步驟3: 權重值更新

現在,讓我們把所有的值放在一起:

圖

我們來計算W5的更新值:

圖

  • 同樣,我們也可以計算其他權重值。
  • 之后,我們將再次前向傳播並計算輸出、計算誤差。
  • 如果誤差已經降到最小,我們將停止,否則我們將再次反向傳播,並更新權重值。
  • 這個過程將不斷重復,直到誤差降到最小。

 


免責聲明!

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



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