Deep Learning 之 參數初始化

本文僅對常見的參數初始化方法進行總結(大部分內容來自deep learning一書),原理性的問題不進行過多的探討。

Deep Learning中參數初始化十分重要,一般來說有以下這些原因:


1.初始點的選取,有時候能夠決定算法是否收斂

2.當收斂時,初始點可以決定學習收斂的多快,是否收斂到一個代價高或低的點

3.初始化也可以影響泛化

4.初始參數需要破壞不同神經元間的“**對稱性**”,因爲如果初始化成全0或者一樣的值,那麼整個神經網絡就會變成確定性的算法,具有相同輸入的神經元前向傳播和梯度更新就都變得一模一樣的。(尤其是在cnn中,對於不同channel,具有相同輸入的情況下)

初始化的參數主要有:w權重,bias偏置,下面分別對這兩類參數進行討論


一.w權重:

先上一些結論:

①.在實踐中,我們經常將權重初始化爲高斯分佈,或者均勻分佈。高斯分佈或者均勻分佈的選擇並沒有太大的區別。但是初始化分佈的**大小(scale)**對優化結果和泛化能力有極大的影響。

②對於relu的激活函數推薦使用**【2】或者【3】**的方式

1.1均勻分佈(uniform initialization)

1)一種初始化m個輸入和n個輸出的全連接層的啓發式的方法是從分佈這裏寫圖片描述
中採樣權重。

2)而在【1】中建議採用標準初始化(normalized initialization):

這裏寫圖片描述

這種初始化方式使其具有相同的激活方差和相同的梯度方差。

1.2 高斯分佈(normal initialization)

對於高斯分佈,需要設置的參數是均值(mean)和標準差(stddev)。一般情況下,均值均設爲0,針對方差不同,有以下幾種方式:

1)設置stddev=0.01或者0.001(一個小的常數)帶來的問題是,可能過小而導致前向傳播時信號丟失

2)Xavier Initialization (m爲輸入個數,n爲輸出個數)

思想是使得輸入和輸出的方差保持一致(需要注意的是隻要滿足均值是0,標準差是sqrt(1/m)或sqrt(2/(m+n))分佈的都叫做Xavier Initialization。只不過在高斯分佈中應用較多,故放在高斯分佈的分類下)

最初的方式是

stddev=sqrt(1/m)

在【2】中推薦設置

stddev=sqrt(2/(m+n)

3)MSRA Initialization 【3】
屬於xavier的變種,對於Relu 的激活函數而言,kaiming He 推薦使用

stddev=sqrt(2/m)


1.3 Others:

3正交初始化(orthogonal initialization)【4】仔細挑選每一層的非線性縮放或增益(gain)因子g。該初始化方案保證了達到收斂所需的訓練迭代總數少於深度。(在LSTM中用到過此方法),用TensorFlow代碼實現,可參考如下:

def orthogonal(shape):
    flat_shape = (shape[0], np.prod(shape[1:]))
    a = np.random.normal(0.0, 1.0, flat_shape)
    u, _, v = np.linalg.svd(a, full_matrices=False)
    q = u if u.shape == flat_shape else v
    return q.reshape(shape)

def orthogonal_initializer():
    def _initializer(shape, dtype=tf.float32, partition_info=None):
        return tf.constant(orthogonal(shape), dtype)
    return _initializer

4.稀疏初始化(sparse initialization)【5】
   主要的思想就是使每一層初始化恰好有k個非0權重。這個想法保持該層的神經元的總數量獨立於輸入的數目m。使其具有多樣性。

5.使用相同的數據集,用unsupervisor的方式(比如RBM,AE)訓練出來的參數初始化supervisor的模型

6.在相關問題上,用supervisor的方式預訓練參數

7.不相關的task上,supervisor的預訓練也可以得到一個比初始化更快收斂的初始值


二.對於bias(偏置而言)

一般情況下,偏置總設爲0.

可能有如下幾個非零情況:

1)如果偏置作爲輸出單元,初始化偏置以獲取正確的輸出邊緣的統計通常是有利的。

2)有時,我們可能想要選擇偏置以避免初始化引起的太大飽和

3)一個單元會控制其他單元能否參與到等式中,比如常見的門操作,在LSTM中將forget_bias=1.0.

參考文獻
【1】Glorot X, Bordes A, Bengio Y. Deep Sparse Rectifier Neural Networks[C]//Aistats. 2011, 15(106): 275.
【2】X. Glorot and Y. Bengio. Understanding the difficulty of training deepfeedforward neural networks. In International Conference on Artificial Intelligence and Statistics, pages 249–256, 2010.
【3】Kaiming He et al., Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classfication
【4】Saxe A M, McClelland J L, Ganguli S. Exact solutions to the nonlinear dynamics of learning in deep linear neural networks[J]. arXiv preprint arXiv:1312.6120, 2013.
【5】Martens, J. (2010). Deep learning via Hessian-free optimization. In ICML’2010, pages 735–742.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章