神經網絡中的權值初始化:從最基本的方法到Kaiming方法的歷程

2019-11-10     sandag

這篇文章通過實驗一步一步驗證了如何從最基礎的初始化方法發展到Kaiming初始化方法,以及這之間的動機。

這篇文章中,我會通過不同的方法探索初始化神經網絡層權值。一步一步地,通過各種簡短的實驗和思維練習,我們將發現為什麼適當的初始化權重對訓練深度神經網絡如此重要。在此過程中,我們將介紹研究人員多年來提出的各種方法,並最終深入研究最適合你的最有可能使用的現代網絡體系結構的方法。

為什麼要初始化權值

權值初始化的目的是防止層激活輸出在深度神經網絡的正向傳遞過程中爆炸或消失。如果發生任何一種情況,損失梯度要麼太大,要麼太小,無法有利地向後流動,如果網絡能夠這樣做,則需要更長的時間才能收斂。

矩陣乘法是神經網絡的基本數學運算。在多層的深度神經網絡中,一個前向傳遞只需要在每一層執行連續的矩陣乘法,在該層的輸入和權重矩陣之間。這一層的乘積變成了下一層的輸入,以此類推。

對於一個說明這一點的簡單示例,我們假設有一個向量x,其中包含一些網絡輸入。當訓練神經網絡以確保我們的輸入值被縮放到均值為0,標準差為1的正態分布中時,這是一種標準的做法。

假設我們有一個簡單的100層網絡,沒有激活,並且每個層都有一個矩陣a,其中包含該層的權重。為了完成單次前向傳遞,我們必須在每100層的輸入和權重之間執行矩陣乘法,這將導致總共100個連續矩陣乘法。

這樣的話,從相同的標準正態分布初始化層權值,再縮放到我們的輸入從來都不是一個好主意。為了了解原因,我們可以模擬通過我們假設的網絡的正向傳遞。

哇!在這100次乘法中,其中一層的輸出變得如此之大,以至於計算機都無法識別它們的標準差和平均值。我們可以確切地看到這花了多長時間。

激活輸出在29個網絡層中爆炸。我們顯然將權重初始化為太大。

不幸的是,我們還必須擔心防止層輸出消失。為了看看當我們初始化網絡權值時發生了什麼——我們將調整權值,使其在均值為0的正態分布內時,標準差為0.01。

在上述假設的正向傳遞過程中,激活輸出完全消失。

總而言之,如果初始化的權重過大,網絡就不能很好地學習。當權重初始化過小時也會發生同樣的情況。

我們能不能找到最佳的點?

請記住,如上所述,完成通過神經網絡的正向傳遞所需要的數學只不過是矩陣乘法的連續。如果我們有一個輸出y,它是我們的輸入向量x和權重矩陣a之間矩陣乘法的乘積,那麼y中的每個元素i都定義為:

其中i為權重矩陣a的給定行索引,k為權重矩陣a中的給定列索引,輸入向量x中的元素索引,n為x中元素的範圍或總數。這也可以在Python中定義為:

我們可以證明在給定層,我們使用初始化標準正態分布的輸入的矩陣乘積矩陣x 和權值矩陣a 的矩陣乘法平均而言,有一個標準偏差,非常接近輸入連接的數量的平方根,它在我們的例子中是 √512。

如果我們從定義矩陣乘法的角度來看,這個屬性並不奇怪:為了計算y,我們將輸入x的一個元素與權重a的一列相乘,得到512個乘積。在我們的示例中,x和a都使用標準正態分布初始化,這512個乘積的均值為0,標準差為1。

這512個乘積的和的均值為0,方差為512,因此標準差為√512。

這就是為什麼在上面的例子中,我們看到我們的層輸出在29次連續矩陣乘法之後爆炸。在我們最基本的100層網絡架構中,我們希望每個層的輸出的標準偏差約為1。可以想像,這將允許我們在儘可能多的網絡層上重複矩陣乘法,而不需要激活發生爆炸或消失。

如果我們首先對權重矩陣a進行縮放,將其隨機選擇的所有值除以√512,那麼填充輸出y中的一個元素的元素乘平均方差將只有1/√512。

這意味著矩陣y的標準差為1,其中包含輸入x與權重a相乘生成的512個值中的每一個。讓我們通過實驗來證實這一點。

現在讓我們重新運行我們的100層網絡。和之前一樣,我們首先從[-1,1]內部的標準正態分布中隨機選擇層權值,但這次我們將這些權值縮放1/√n,其中n是一層的網絡輸入連接數,在我們的示例中為512。

成功!我們的層輸出既沒有爆炸也沒有消失,即使在100個層之後也是如此。

乍一看,這似乎是我們可以收工了,但現實世界的神經網絡並不像我們第一個例子所顯示的那麼簡單。為了簡單起見,省略了激活函數。然而,在現實生活中我們永遠不會這樣做。這是由於這些非線性激活函數的位置在網絡層的尾端,深層神經網絡可以創造非常複雜的函數,近似的描述現實世界的現象,然後可以用來產生令人印象深刻的預測,如筆跡樣本的分類。

Xavier初始化

直到幾年前,大多數常用的激活函數都是關於給定值的對稱函數,其範圍漸進地接近於與這個中點正負一定距離的值。雙曲正切函數和softsign函數就是這類激活函數的典型的例子。

在我們假設的100層網絡的每一層之後添加一個雙曲正切激活函數,然後看看當我們使用我們自己的權值初始化方案時發生了什麼,其中層權值按1/√n.進行縮放。

第100層激活輸出的標準差約為0.06。這當然是一個小的方面,但至少激活還沒有完全消失!

現在回想起來,發現我們自己開發的權重初始化策略的過程似乎很直觀,但你可能會驚訝地發現,就在2010年,這還不是初始化權重層的傳統方法。

當Xavier Glorot Yoshua Bengio發表了具有里程碑意義的論文題為Understanding the difficulty of training deep feedforward neural networks,他們比較的「常用的啟發式」實驗的初始化權重從均勻分布,然後由1 /√n擴展。

事實證明,這種「標準」方法實際上並不那麼有效。

用「標準」權重初始化重新運行我們的100層tanh網絡,導致激活梯度變得無窮小——它們幾乎消失了。

這種糟糕的性能實際上促使Glorot和Bengio提出了他們自己的權重初始化策略,他們在論文中稱之為「normalized initialization」,現在通常稱為「Xavier初始化」。

Xavier初始化將一個層的權重設置為從一個有界的隨機均勻分布中選擇的值。

其中,nᵢ是傳入網絡連接的數量叫「扇入」,nᵢ₊₁是從那層出去的網絡連接的數量,也被稱為「扇出」。

Glorot和Bengio認為,Xavier權值初始化將保持激活和反向傳播梯度的方差,一直向上或向下傳播到網絡層。在他們的實驗中,他們觀察到Xavier初始化使一個5層網絡能夠保持其跨層權重梯度的幾乎相同的方差。

相反,使用「標準」初始化會導致網絡較低層(較高)的權值梯度與最上層(接近於零)的權值梯度之間的差異更大。

為了說明這一點,Glorot和Bengio證明,使用Xavier初始化的網絡在CIFAR-10圖像分類任務上實現了更快的收斂速度和更高的準確性。

讓我們再次運行我們的100層tanh網絡,這次使用Xavier初始化:

在我們的實驗網絡中,Xavier初始化執行的方法與我們前面導出的自定義方法非常相似,我們從隨機正態分布中採樣值,並按傳入網絡連接數n的平方根進行縮放。

Kaiming初始化

從概念上講,當使用關於0對稱且在[-1,1]內部有輸出(如softsign和tanh)的激活函數時,我們希望每個層的激活輸出的平均值為0,平均標準偏差為1,這是有意義的。這正是我們自己開發的方法和Xavier所支持的。

但是如果我們使用ReLU激活函數呢?以同樣的方式縮放隨機初始權重值是否仍然有意義?

為了看看會發生什麼,讓我們在我們假設的網絡層中使用ReLU激活而不是tanh,並觀察其輸出的預期標準偏差。

結果表明,當使用ReLU激活時,單層的平均標準偏差非常接近輸入連接數的平方根,除以√2 ,在我們的例子中是√512/√2。

將權重矩陣的值a乘以這個數字,將導致每個ReLU層的平均標準偏差為1。

正如我們之前所展示的,保持層激活的標準偏差在1左右,將允許我們在深度神經網絡中疊加更多的層,而不會出現漸變爆炸或消失。

探索如何用類relu的激活函數在網絡中最好地初始化權重是kobjective He等人,提出他們自己的初始化方案的動機,這是為使用這些非對稱、非線性激活的深層神經網絡量身定製的。

He et. al.在他們2015年的論文中證明,如果使用以下輸入權初始化策略,深度網絡(例如22層CNN)將會更早地收斂:

  1. 為給定層上的權值矩陣創建一個張量,並用從標準正態分布中隨機選擇的數字填充它。
  2. 將每個隨機選擇的數字乘以√2/√n,其中n是從上一層的輸出(也稱為「扇入」)進入給定層的連接數。
  3. 偏置張量初始化為零。

我們可以按照這些方向實現我們自己版本的kming初始化,並驗證如果在我們假設的100層網絡的所有層上使用ReLU,那麼它確實可以防止激活輸出爆炸或消失。

最後一個比較是,如果我們使用Xavier初始化,將會發生什麼。

當使用Xavier初始化權重時,激活輸出在第100層幾乎完全消失!

順便說一句,當他們訓練使用ReLUs的更深層次的網絡時,他等人發現,使用Xavier初始化的30層CNN完全停止工作,完全沒有學習。但是,當按照上面概述的三步程序初始化同一個網絡時,它的收斂性大大提高。

這個故事的寓意是,我們從零開始訓練的任何網絡,尤其是用於計算機視覺應用程式的網絡,幾乎肯定都包含ReLU激活功能,而且是多層的。在這種情況下,Kaiming應該是我們的首選權重初始化策略。

你也可以成為一個研究者

更重要的是,當我第一次看到Xavier和Kaiming公式時,我並不羞於承認我感到害怕。它們的平方根分別是6和2,我不禁覺得它們一定是某種神諭智慧的結果,而我自己卻無法理解。

但我認為,我們在這裡的經歷向我們表明,這種感到恐懼的下意識反應雖然完全可以理解,但絕不是不可避免的。儘管kaiming和(尤其是)Xavier的論文確實包含了相當多的數學內容,但我們親眼目睹了實驗、經驗觀察和一些直觀的常識如何足以幫助推導出支撐當前最廣泛使用的權重初始化方案的核心原則集。

換句話說:當你懷疑的時候,要勇敢,去嘗試,看看會發生什麼!

文章來源: https://twgreatdaily.com/zh-tw/Gn4cU24BMH2_cNUgCyVA.html