吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

機器之心發表於2019-05-27
初始化對深度神經網路收斂有重要影響。優秀的初始化模式可以加速訓練,但是需要小心操作以避免常見的陷阱。deeplearning.ai 最新上線了 AI Notes 欄目,以長文的形式作為《深度學習專項課程》的補充。其具備互動式的 demo,有助於讀者輕鬆掌握深度學習基礎概念。AI Notes 的第一篇教程就是「初始化神經網路」。

這篇教程共包括四部分:有效初始化的重要性、梯度爆炸或消失問題、什麼是恰當的初始化,以及 Xavier 初始化的數學證明。

1. 有效初始化的重要性

要想構建一個機器學習演算法,通常你需要定義一個架構(如 Logistic 迴歸、支援向量機神經網路),然後訓練它學習引數。以下是訓練神經網路的常見過程:

  1. 初始化引數

  2. 選擇優化演算法

  3. 重複以下步驟:

  4. 將輸入向前傳播

  5. 計算成本函式

  6. 使用反向傳播傳遞成本對引數的梯度

  7. 根據優化演算法,基於梯度更新每個引數

之後,給出一個新的資料點,你就可以使用該模型預測其類別了。

初始化步驟對模型的最終效能至關重要,它需要正確的方法。下面給出了一個互動式 demo,你可以嘗試使用不同的方法初始化網路,觀察不同的初始化對網路學習的影響。

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

在此 demo 中,可以任意選擇輸入資料集、選擇初始化方法,並實時檢視訓練效果。

你注意到當初始化方法為 zero 時,梯度和權重的變化嗎?

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

用零初始化所有權重,會使得神經元在訓練過程中學習同樣的特徵。

事實上,任意常數初始化方法效能都不好。例如一個具備兩個隱藏單元的神經網路,假設我們將所有偏置初始化為 0,將所有權重初始化為常量 α。如果我們在網路中前向傳播輸入 (x_1,x_2),則兩個隱藏單元的輸出均為 relu(α x_1+α x_2)。因此,兩個神經元在訓練過程中的演化是對稱的,也就阻止了不同的神經元學習不同的特徵。

當使用太小或太大的值初始化權重時,成本函式曲線有什麼變化呢?

儘管打破了對稱性,但使用太小或太大的值初始化權重會分別導致學習緩慢或發散。

因此,選擇恰當的初始化值對於高效訓練而言是必要的。

2. 梯度爆炸或消失問題

考慮以下這個 9 層神經網路

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

在優化的每一次迭代中,我們觀察到隨著梯度從輸出層向輸入層傳遞,反向傳播的梯度要麼太大要麼太小。這一結果是合理的,大家不妨考慮以下例子。

假設所有啟用函式都是線性(恆等函式),那麼輸出啟用如下:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

其中,L=10,W^[L] 及其它 W 是 2×2 的矩陣,層 [1] 到 [L-1] 都只有兩個神經元。如果我們假設 W^[1] 到 W^[L-1] 都等於 W,則輸出預測為吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化(其中 W^L-1 是矩陣 W 的 L-1 次方,W^[L] 表示第 L 個矩陣)。

那麼當初始化值過小、過大或合適時,結果會如何呢?

案例 1:過大初始化值導致梯度爆炸

考慮當每個權重的初始化值都比恆等矩陣略大的情況。

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

上式可以簡化為吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,a^[l] 的值隨著 l 呈指數倍增長。當這些啟用值被用於反向傳播時,就會導致梯度爆炸問題。即,成本對引數的梯度過大,導致成本值在其極小值周圍振盪。

案例 2:過小初始化值導致梯度消失

類似地,考慮每個權重的初始化值略小於恆等矩陣的情況。

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

上式可簡化為吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,啟用值 a^[l] 隨著 l 呈指數倍下降。當這些啟用被用於反向傳播時,會導致梯度消失問題。成本關於引數的梯度過小,導致成本在到達極小值之前已經收斂

總之,用不合適的值進行權重初始化會導致神經網路訓練發散或速度緩慢。雖然我們用簡單的對稱權重矩陣說明梯度爆炸和梯度消失問題,但這一觀察也適用於任意過大或過小的初始化值。

3. 如何找到合適的初始化值

為了阻止梯度爆炸或消失,我們需要堅持以下規則:

  • 啟用值的均值應為零。

  • 每一層啟用值的方差應該保持一致。

在這兩個假設下,反向傳播的梯度訊號就不會在任意層中被過小或過大的值相乘,從而在不出現梯度爆炸或消失等問題。

具體來說,想象一個層 l,其前向傳播是:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

我們需要遵循下式:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

確保零均值,保持每一層的輸入方差值不變,從而確保不會出現梯度爆炸和消失問題。該方法適用於前向傳播和反向傳播。推薦使用 Xavier 初始化方法(或其變體),對於每一個層 l:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

也就是說,層 l 的所有權重是從正態分佈中隨機選取的,該分佈的均值 μ=0,方差 吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,其中 n^[l-1] 是層 l-1 中的神經元數量。偏置被初始化為 0。

下面的互動式圖展示了 Xavier 初始化對每一層啟用的影響,下圖展示的是一個五層的全連線神經網路

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

在此互動式圖中,你可以載入 MNIST 資料集,選擇初始化方法,執行訓練並觀察不同初始化方法的效果。

Xavier 初始化的數學證明

Xavier 初始化保持每一層的方差不變。我們假設每一層的啟用值是圍繞 0 的正態分佈。有時理解數學證明有助於掌握概念,但沒有數學也可以理解基礎理念。

我們使用第 3 部分介紹的層 l,假設其啟用函式為 tanh。其前向傳播如下所示:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

我們目標是推匯出 Var(a^[l-1]) 和 Var(a^[l]) 之間的關係。然後我們將理解如何初始化權重,使得 Var(a^[l-1]) = Var(a^[l])。

假設我們使用合適的值初始化網路,且輸入是經過歸一化的。在訓練的早期,我們處於 tanh 的線性模式。值足夠小,使 tanh(z^[l]) ≈ z^[l],這意味著:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

此外,吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,其中吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化。出於簡潔性考慮,我們假設 b^[l] = 0。因此,逐元素檢視前面的公式 Var(a^[l-1]) = Var(a^[l]) 可以得到:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

一個常見的數學 trick 是在方差之外求和。為此,我們必須遵循以下三個假設:

  1. 權重獨立,且同分布;

  2. 輸入獨立,且同分布;

  3. 權重和輸入互相獨立。

從而得到:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

另一個常見的數學 trick 是將積的方差轉化為方差的積,公式如下:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

使用該公式,以及吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,得到:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

快完成了!第一個假設引出 吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,第二個假設引出 吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,因為權重是使用零均值進行初始化的,輸入是經過歸一化的。從而得到:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

第一個假設表明:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

第二個假設引出:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

它們都具備同樣的思想:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

組合起來,得到:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

完成了!如果我們想要各個層的方差保持一致吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,我們需要吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化。這證明了 Xavier 初始化的方差選擇。

注意,在之前的步驟裡,我們沒有選擇特定層 l。因此,我們證明了該公式適用於所有層。假設 L 是輸出層。在每一層使用該公式,則我們可以將輸出層的方差推導至輸入層的方差:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

根據我們的權重初始化方式,輸出和輸入層方差之間的關係將會變化巨大。注意以下三種情況:

吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化

因此,為了避免前向傳播訊號的消失或爆炸,我們必須通過初始化吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,使 n^[l−1]Var(W^[l])=1。

通過以上證明,我們研究了在前向傳播過程中計算的啟用值。同樣的結果也適用於反向傳播梯度。同理,為了避免梯度爆炸或消失,我們必須通過初始化吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化,使 n^[l]Var(W^[l])=1。

結論

在實踐中,機器學習工程師使用 Xavier 初始化時,要麼將權重初始化為吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化。後一個分佈的方差項是吳恩達深度學習課最新補充教程:互動式demo助你輕鬆理解神經網路初始化的均值。

以上是 Xavier 初始化的理論證明。Xavier 初始化使用的是 tanh 啟用函式。此外還有大量初始化方法。如果你使用 ReLU 啟用函式,那麼常用的初始化方法是 He 初始化。He 初始化的理論證明要更復雜一些,但它遵循同樣的思維過程。

原文連結:http://www.deeplearning.ai/ai-notes/initialization/

相關文章