1. 程式人生 > >神經網路模型無法正常工作時我們應該做什麼(系列)——初始化網路權重(Initialized Network Weights)

神經網路模型無法正常工作時我們應該做什麼(系列)——初始化網路權重(Initialized Network Weights)

前言

當你進入深度學習領域,準備好深度神經網路,開始進行訓練時,遇到這樣一個大部分新手都會遇到的問題:你的神經網路沒法正常工作,而你不知道該如何去修正它。你去問你的老闆或者導師,他們也不知道該如何處理,因為在深度神經網路面前,他們和你一樣也是新手。那麼現在該如何來處理呢?
幸運的是我來啦!我列出了幾乎所有新手都會犯的錯誤,以及我自己和身邊一些學生在同樣情況下遇到過的問題:

  1. 沒有對資料進行標準化處理(Normalize)
  2. 沒有檢查結果(Results)
  3. 沒有對資料進行預處理(Preprocess)
  4. 沒有使用正則化方法(Regularlization)
  5. Batch Size 取值過大
  6. 學習率(Learning Rate)設定有誤
  7. 最後一層 Layer 使用了錯誤的啟用函式(Activation Function)
  8. 網路結構中包含了有害的梯度(Bad Gradient)
  9. 初始化網路權重(Network Weights)有誤
  10. 神經網路結構過深(Too Deep)
  11. 使用了錯誤數目的隱藏單元(Hidden Units)

初始化網路權重(Initialized Network Weights)

What?

如果你沒有正確的初始化你的神經網路權重,那麼你的神經網路很有可能根本沒法進行訓練。神經網路中的其他資料元素都採用某種形式的正確或標準化的權重初始化操作,並將權重初始化為0,或者你自定義權重初始化隨機進行權重初始化,這些方法都可能不起作用。

How?

權重初始化方法中,‘he’、‘lecun’和‘xavier’是比較流行的方法,它們幾乎在任何情況下都可很好的工作。只要選擇其中一個(我最喜歡的是‘lecun’),但也可以試驗來選擇最優的權值初始化方式。

Why?

你可能聽說過使用“較小的隨機數”來初始化神經網路的權重,但事情卻並沒有那麼簡單。所有上述的初始化操作都是慢慢的通過複雜且詳細的數學方法推匯出來的,而這些數學方法能正確的解釋為什麼這樣做是最優的。更重要的是,神經網路結構的其他部分已經依據這些初始值來進行計算,並且經過經驗來進行檢驗過,如果使用你自己的初始化方法會使重現其他研究人員的結果變得愈發困難。

And?

神經網路的其他層同樣需要仔細的進行初始化。網路偏置(bias)初始化為0,而其他的更復雜的層(例如引數啟用函式)需要使用他們自己的初始化方法,這樣做的原因是他們都同等重要。