深度學習 – 多層神經網絡
單層網絡
先回顧一下單層網絡,即一個神經元(自適應線性單元),如下圖所示。
可以使用梯度下降法訓練模型,確定權重與偏置。
多層神經網絡歷史
深度學習涉及訓練多層神經網絡,也稱為深度神經網絡。
在20世紀50年代Rosenblatt感知器被開發出來之后,直到1986年hinton博士和他的同事開發了反向傳播算法來訓練多層神經網絡,人們才重新對神經網絡產生了興趣。
現在,深度神經網絡是一個熱門技術,許多大公司,如百度,阿里,騰訊,谷歌,Facebook和微軟,都在深度神經網絡項目上投入巨資。
多層神經網絡
神經網絡其實就是按照一定規則連接起來的多個神經元。
上圖展示了一個全連接(full connected, FC)神經網絡,它的規則包括:
- 神經元按照層來布局。最左邊的輸入層,負責接收輸入數據;最右邊的輸出層,負責輸出數據。
- 中間是隱藏層,對於外部不可見。隱藏層可以包含多層,大於一層的就被稱為深度神經網絡,層次越多數據處理能力越強。
- 同一層的神經元之間沒有連接。
- 前后兩層的所有神經元相連(這就是full connected的含義),前層神經元的輸出就是后層神經元的輸入。
- 每個連接都有一個權值。
上面這些規則定義了全連接神經網絡的結構。事實上還存在很多其它結構的神經網絡,比如卷積神經網絡(CNN)、循環神經網絡(RNN),它們都具有不同的連接規則。
多層感知器(MLP)
一個完全連接的多層神經網絡被稱為多層感知器(MLP),或深度前饋網絡(deepfeedforwardnetwork)、前饋神經網絡(feedforward neural network),是典型的深度學習模型。
層數和每層的神經元數被稱為神經網絡的超參數,由開發人員根據經驗預先設置。
權重的調整訓練還是通過梯度下降法來進行,但梯度的求取使用反向傳播法。
多層神經網絡的訓練過程
多層神經網絡的訓練過程,按如下步驟進行:
- 從輸入層開始,將數據經過神經網絡傳輸到輸出層,這一步是前向傳播。
- 根據輸出,計算誤差(預測結果和已知結果之間的差異),得到代價函數。利用梯度下降法最小化誤差。
- 梯度下降法需要計算每個權重的梯度,使用反向傳播算法計算梯度,根據梯度調整權重值。
重復以上3個步驟訓練權重。
與單層網絡的區別
從大的方面來說,兩者都是通過梯度下降法,求取代價函數的最小值,來訓練權重。
區別在於,多層神經網絡引入了反向傳播算法來計算梯度。
單層網絡中,權重的梯度計算是直接求代價函數對某個權重的偏導數,單層網絡的代價函數相對簡單,可以這樣做。
但是多層神經網絡中,越靠近輸入層的權重,其代價函數越復雜,計算量非常大。而反向傳播算法是一種高效簡單的梯度算法。
深度學習 – 反向傳播
梯度
一個深度神經網絡的權重參數有可能會達到百萬級,權重的梯度計算非常耗時,反向傳播是一種非常高效的梯度算法。
一個神經網絡中的所有權重參數可以表示為:
利用鏈式求導法則,計算代價函數相對於某個權重的偏導數(梯度),可以轉化為這個權重之后所有層次的偏導數的表達式。
反向傳播計算過程
反向傳播由輸出端往輸入端逐層計算權重的梯度。
我們假設有下面這樣3層神經網絡:
神經元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的更新值:
- 同樣,我們也可以計算其他權重值。
- 之后,我們將再次前向傳播並計算輸出、計算誤差。
- 如果誤差已經降到最小,我們將停止,否則我們將再次反向傳播,並更新權重值。
- 這個過程將不斷重復,直到誤差降到最小。