1. 程式人生 > >深度學習權重初始化的幾種方法

深度學習權重初始化的幾種方法

經常看到深度學習引數初始化都是使用隨機初始化,但是最近看了一篇文章Spectral Normalization中對於GAN判別器沒有使用BN,BN其實弱化了引數初始化的作用,但是我們一旦不使用了BN,使用傳統的隨機初始化容易出現梯度消失的問題,因此決定嘗試一些其他的引數初始化方法。

   神經網路的訓練過程中的引數學習是基於梯度下降法進行優化的。梯度下降法需要在開始訓練時給每一個引數賦一個初始值。這個初始值的選取十分關鍵。一般我們希望資料和引數的均值都為 0,輸入和輸出資料的方差一致。在實際應用中,引數服從高斯分佈或者均勻分佈都是比較有效的初始化方式。

    網路上關於引數初始化的介紹很多了,推薦一下

聊一聊深度學習的weight initialization, 深度學習中的引數初始化 還有很多介紹原理的文章,這裡的細節就不扣了,感興趣的同學可以看看論文,這裡主要介紹在深度學習的框架下如何使用他們。

1. Tensorflow幾種使用引數初始化的方法

tensorflow 官網
tensorflow 輔助

1.1 截斷高斯分佈

這裡寫圖片描述

使用舉例: tf.truncated_normal_initializer(stddev=0.01)

1.2 xavier初始化(適用於啟用函式是sigmoid和tanh)

這裡寫圖片描述

使用舉例:

tf.contrib.layers.xavier
_initializer(uniform=True, seed=None, dtype=tf.float32)

1.3 MSRA初始化(適用於啟用函式relu)

這裡寫圖片描述

按照官網的介紹,當設定一定的引數時候就是”MSRA初始化”也就是預設設定。

tf.contrib.layers.variance_scaling_initializer(factor=2.0, mode='FAN_IN', uniform=False, seed=None, dtype=tf.float32)  # MSRA初始化

2. Pytorch幾種使用引數初始化的方法

pytorch官網

2.1 Xavier初始化

2.1.2 uniform形式

這裡寫圖片描述

2.1.2 normal形式

這裡寫圖片描述

2. 2 MSRA

2.2.1 uniform形式

這裡寫圖片描述

2.2.2 normal形式

這裡寫圖片描述

xavier和MSRA在沒有BN的情況之下確實比隨機初始化要好很多!