網頁

2019年5月29日 星期三

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

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


這篇教程共包括四部分:有效初始化的重要性、梯度爆炸或消失問題、什麼是恰當的初始化,以及 Xavier 初始化的數學證明。
1. 有效初始化的重要性
要想構建一個機器學習算法,通常你需要定義一個架構(如 Logistic 迴歸、支持向量機神經網絡),然後訓練它學習參數。以下是訓練神經網絡的常見過程:
  1. 初始化參數
  2. 選擇優化算法
  3. 重複以下步驟:
  4. 將輸入向前傳播
  5. 計算成本函數
  6. 使用反向傳播傳遞成本對參數的梯度
  7. 根據優化算法,基於梯度更新每個參數
之後,給出一個新的數據點,你就可以使用該模型預測其類別了。
初始化步驟對模型的最終性能至關重要,它需要正確的方法。下面給出了一個交互式 demo,你可以嘗試使用不同的方法初始化網絡,觀察不同的初始化對網絡學習的影響。
在此 demo 中,可以任意選擇輸入數據集、選擇初始化方法,並實時查看訓練效果。
你注意到當初始化方法爲 zero 時,梯度和權重的變化嗎?
用零初始化所有 權重,會使得 神經元在訓練過程中學習同樣的特徵。
事實上,任意常數初始化方法性能都不好。例如一個具備兩個隱藏單元的神經網絡,假設我們將所有偏置初始化爲 0,將所有權重初始化爲常量 α。如果我們在網絡中前向傳播輸入 (x_1,x_2),則兩個隱藏單元的輸出均爲 relu(α x_1+α x_2)。因此,兩個神經元在訓練過程中的演化是對稱的,也就阻止了不同的神經元學習不同的特徵。
當使用太小或太大的值初始化權重時,成本函數曲線有什麼變化呢?
儘管打破了對稱性,但使用太小或太大的值初始化 權重會分別導致學習緩慢或發散。
因此,選擇恰當的初始化值對於高效訓練而言是必要的。
2. 梯度爆炸或消失問題
考慮以下這個 9 層神經網絡
在優化的每一次迭代中,我們觀察到隨着梯度從輸出層向輸入層傳遞,反向傳播的梯度要麼太大要麼太小。這一結果是合理的,大家不妨考慮以下例子。
假設所有激活函數都是線性(恆等函數),那麼輸出激活如下:
其中,L=10,W^[L] 及其它 W 是 2×2 的矩陣,層 [1] 到 [L-1] 都只有兩個神經元。如果我們假設 W^[1] 到 W^[L-1] 都等於 W,則輸出預測爲(其中 W^L-1 是矩陣 W 的 L-1 次方,W^[L] 表示第 L 個矩陣)。
那麼當初始化值過小、過大或合適時,結果會如何呢?
案例 1:過大初始化值導致梯度爆炸
考慮當每個權重的初始化值都比恆等矩陣略大的情況。
上式可以簡化爲,a^[l] 的值隨着 l 呈指數倍增長。當這些激活值被用於反向傳播時,就會導致梯度爆炸問題。即,成本對參數的梯度過大,導致成本值在其極小值周圍振盪。
案例 2:過小初始化值導致梯度消失
類似地,考慮每個權重的初始化值略小於恆等矩陣的情況。
上式可簡化爲,激活值 a^[l] 隨着 l 呈指數倍下降。當這些激活被用於反向傳播時,會導致梯度消失問題。成本關於參數的梯度過小,導致成本在到達極小值之前已經收斂
總之,用不合適的值進行權重初始化會導致神經網絡訓練發散或速度緩慢。雖然我們用簡單的對稱權重矩陣說明梯度爆炸和梯度消失問題,但這一觀察也適用於任意過大或過小的初始化值。
3. 如何找到合適的初始化值
爲了阻止梯度爆炸或消失,我們需要堅持以下規則:
  • 激活值的均值應爲零。
  • 每一層激活值的方差應該保持一致。
在這兩個假設下,反向傳播的梯度信號就不會在任意層中被過小或過大的值相乘,從而在不出現梯度爆炸或消失等問題。
具體來說,想象一個層 l,其前向傳播是:
我們需要遵循下式:
確保零均值,保持每一層的輸入方差值不變,從而確保不會出現梯度爆炸和消失問題。該方法適用於前向傳播和反向傳播。推薦使用 Xavier 初始化方法(或其變體),對於每一個層 l:
也就是說,層 l 的所有權重是從正態分佈中隨機選取的,該分佈的均值 μ=0,方差 ,其中 n^[l-1] 是層 l-1 中的神經元數量。偏置被初始化爲 0。
下面的交互式圖展示了 Xavier 初始化對每一層激活的影響,下圖展示的是一個五層的全連接神經網絡
在此交互式圖中,你可以加載 MNIST 數據集,選擇初始化方法,執行訓練並觀察不同初始化方法的效果。
Xavier 初始化的數學證明
Xavier 初始化保持每一層的方差不變。我們假設每一層的激活值是圍繞 0 的正態分佈。有時理解數學證明有助於掌握概念,但沒有數學也可以理解基礎理念。
我們使用第 3 部分介紹的層 l,假設其激活函數爲 tanh。其前向傳播如下所示:
我們目標是推導出 Var(a^[l-1]) 和 Var(a^[l]) 之間的關係。然後我們將理解如何初始化權重,使得 Var(a^[l-1]) = Var(a^[l])。
假設我們使用合適的值初始化網絡,且輸入是經過歸一化的。在訓練的早期,我們處於 tanh 的線性模式。值足夠小,使 tanh(z^[l]) ≈ z^[l],這意味着:
此外,,其中。出於簡潔性考慮,我們假設 b^[l] = 0。因此,逐元素查看前面的公式 Var(a^[l-1]) = Var(a^[l]) 可以得到:
一個常見的數學 trick 是在方差之外求和。爲此,我們必須遵循以下三個假設:
  1. 權重獨立,且同分布;
  2. 輸入獨立,且同分布;
  3. 權重和輸入互相獨立。
從而得到:
另一個常見的數學 trick 是將積的方差轉化爲方差的積,公式如下:
使用該公式,以及,得到:
快完成了!第一個假設引出 ,第二個假設引出 ,因爲權重是使用零均值進行初始化的,輸入是經過歸一化的。從而得到:
第一個假設表明:
第二個假設引出:
它們都具備同樣的思想:
組合起來,得到:
完成了!如果我們想要各個層的方差保持一致,我們需要。這證明了 Xavier 初始化的方差選擇。
注意,在之前的步驟裏,我們沒有選擇特定層 l。因此,我們證明了該公式適用於所有層。假設 L 是輸出層。在每一層使用該公式,則我們可以將輸出層的方差推導至輸入層的方差:
根據我們的權重初始化方式,輸出和輸入層方差之間的關係將會變化巨大。注意以下三種情況:
因此,爲了避免前向傳播信號的消失或爆炸,我們必須通過初始化,使 n^[l−1]Var(W^[l])=1。
通過以上證明,我們研究了在前向傳播過程中計算的激活值。同樣的結果也適用於反向傳播梯度。同理,爲了避免梯度爆炸或消失,我們必須通過初始化,使 n^[l]Var(W^[l])=1。
結論
在實踐中,機器學習工程師使用 Xavier 初始化時,要麼將權重初始化爲。後一個分佈的方差項是的均值。
以上是 Xavier 初始化的理論證明。Xavier 初始化使用的是 tanh 激活函數。此外還有大量初始化方法。如果你使用 ReLU 激活函數,那麼常用的初始化方法是 He 初始化。He 初始化的理論證明要更復雜一些,但它遵循同樣的思維過程。


參考

沒有留言:

張貼留言