深度學習: Weight initialization和Batch Normalization

weight初始值是0

我們先探討如果weight初始值是0會發生什麼情況

weight初始值是0只是模型找解的出發點是從0開始更新模型,所以還是可以找解。

可以參考: "機器/深度學習-基礎數學(二):梯度下降法(gradient descent)",初始值為0只是模型在訓練找解的過程中,一開始的出發點的差異。

Random initialization

random給予weight初始值是最常使用得方法,我們建立一個6層的MLP來看一下random initialization會產生的問題,每一層Hidden layer輸出的activation我們用tanh來處理(用sigmOid結果差不多),然後每一層的weight都是用常態分佈生成
實驗1. 常態分佈(平均數為0,標準差為0.01)

每層Hidden輸出的直方圖。
Weight是由常態分佈隨機生成(平均數為0,標準差為0.01)。
input mean 0.00065 and std 0.99949
layer 1 mean 0.00025 and std 0.21350
layer 2 mean -0.00002 and std 0.04516
layer 3 mean -0.00001 and std 0.00899
layer 4 mean -0.00000 and std 0.00168
layer 5 mean -0.00000 and std 0.00029
每層Hidden輸出的直方圖。
Weight是由常態分佈隨機生成(平均數為0,標準差為1)。
input mean 0.00065 and std 0.99949
layer 1 mean 0.00086 and std 0.98215
layer 2 mean -0.00057 and std 0.98082
layer 3 mean -0.00035 and std 0.97941
layer 4 mean 0.00081 and std 0.97823
layer 5 mean -0.00284 and std 0.97652
每層Hidden輸出的直方圖。
Weight是由常態分佈隨機生成(平均數為0,標準差為0.05)。
input mean 0.00065 and std 0.99949
layer 1 mean -0.00155 and std 0.65968
layer 2 mean 0.00056 and std 0.51962
layer 3 mean 0.00014 and std 0.42869
layer 4 mean 0.00049 and std 0.35280
layer 5 mean -0.00005 and std 0.28212

Xavier initialization

Xavier initialization為Xavier Glorot 和 Yoshua Bengio在2010年的文章《Understanding the difficulty of training deep feedforward neural networks》提出來的方法,在pytorch直接call nn.init. xavier_normal_。

d等於input node數。
《Understanding the difficulty of training deep feedforward neural networks》公式12。
每層Hidden輸出的直方圖。
Weight是由均勻分布隨機生成(Xavier initialization)。
input mean 0.00065 and std 0.99949
layer 1 mean 0.00072 and std 0.63520
layer 2 mean -0.00023 and std 0.49814
layer 3 mean -0.00048 and std 0.42458
layer 4 mean -0.00014 and std 0.37927
layer 5 mean 0.00027 and std 0.34927
每層Hidden輸出的直方圖。
Weight是由均勻分布隨機生成(Xavier initialization)。
input mean 0.00065 and std 0.99949
layer 1 mean 0.40986 and std 0.59949
layer 2 mean 0.28339 and std 0.42536
layer 3 mean 0.22020 and std 0.31701
layer 4 mean 0.15992 and std 0.23894
layer 5 mean 0.13443 and std 0.18587

He initialization

He initialization為何鎧明的文章Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification中提出,He為何的漢語拚音,所以用He initialization,在pytorch更直接叫nn.init.kaiming_normal_。

每層Hidden輸出的直方圖。
Weight是由常態分佈隨機生成(He initialization)。
input mean 0.00065 and std 0.99949
layer 1 mean 0.59251 and std 0.86758
layer 2 mean 0.63703 and std 0.91839
layer 3 mean 0.64056 and std 0.95845
layer 4 mean 0.72482 and std 1.06023
layer 5 mean 0.80317 and std 1.19583

Batch Normalization

前面說了這麼多,不外乎是要怎麼有效決定weight生成時分佈的參數,常態分佈就是決定variance,均勻分布就是決定上下界,那有沒有辦法在參數無法有效給予情況下解決問題勒,這個方法就是用Batch Normalization(BN)。BN這個方法是在Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift提出的。

每層Hidden輸出的直方圖。(a) 神經網路沒有加Batch normalization,(b)神經網路加入Batch normalization。
每層Hidden輸出的直方圖。(a) 神經網路沒有加Batch normalization,(b)神經網路加入Batch normalization。

--

--

怕老了忘記這些吃飯的知識,開始寫文章記錄機器/深度學習相關內容。黃志勝 Chih-Sheng Huang (Tommy), mail: chih.sheng.huang821@gmail.com

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Tommy Huang

Tommy Huang

怕老了忘記這些吃飯的知識,開始寫文章記錄機器/深度學習相關內容。黃志勝 Chih-Sheng Huang (Tommy), mail: chih.sheng.huang821@gmail.com