深度模型的優化參數初始化策略
- 2019 年 10 月 5 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_36670529/article/details/100714182
有些優化算法本質上是非迭代的,只是求解一個解點。有些其他優化算法本質上是迭代的,但是應用於這一類的優化問題時,能在可接受的時間內收斂到可接受的解,並且與初始值無關。深度學習訓練算法通常沒有這兩種奢侈的性質。深度學習模型的訓練算法通常是迭代的,因此要求使用者指定一些開源迭代的初始點。此外,訓練深度模型的訓練算法通常是迭代的問題,以至於大多數算法都很大程度地受到初始化選擇的影響。初始點能夠決定算法是否收斂時,有些初始點十分不穩定,使得該算法會遭遇數值困難,並完全失敗。當學習收斂時,初始點可以決定學習收斂得多快,以及是否收斂到一個代價高或低的點。此外,差不多代價的點可以具有區別極大的泛化誤差,初始點也可以影響泛化。
現代的初始化策略是簡單的、啟發式的。設定改進的初始化策略是一項困難的任務,因為神經網絡優化至今還未被很好地理解這些性質中的哪些會在學習開始進行後的哪些情況下得以保持。進一步的難點是,有些初始點從優化的觀點看或許是有利的,但是從泛化的觀點看是不利的。我們對於初始點如何影響泛化的理解是相當原始的,幾乎沒有提供如何選擇初始點的任何指導。
也許完全確知的唯一特性是初始參數需要在不同單元「破壞對稱性」。如果具有相同激活函數的兩個隱藏單元連接到相同的輸入,那麼這些單元必須具有不同的初始參數。比如它們具有相同的初始參數。如果它們具有相同的初始參數,然後應用到確定性損失和模型的確定性學習算法將一直以相同的方式更新這兩個單元。即使模型或訓練算法能夠使用隨機性為不同的單元計算不同的更新(例如使用Dropout的訓練),通常來說,最好還是初始化每個使其和其他單元計算不同的函數。這或許有助於確保沒有輸入模式丟失在前向傳播的零空間中,沒有梯度模式丟失在反向傳播的零空間中。每個單元計算不同函數的目標促使了參數的隨機初始化。我們可以明確地搜索一大組彼此互不相同的基函數,但這經常會導致明顯的計算代價。例如,如果我們有和輸出一樣多的輸入,可以使用Gram-Schmidt正交於初始的權重矩陣,保證每個單元計算彼此非常不同的函數。在高維空間上使用高熵分佈來隨機初始化,計算代價並非不太可能分配單元計算彼此相同的函數。
通常情況下,我們可以為每個單元的偏置設置啟發式挑選的常數,僅隨機初始化權重。額外的參數(例如用於編碼預測條件方差的參數)通常和偏置一樣設置為啟發式選擇的常數。我們幾乎總是初始化模型的權重為高斯或均勻分佈中隨機抽取的值。高斯或均勻分佈的選擇似乎不會有很大的差別,但也沒有被詳盡地研究。然而,初始化分佈的大小確實對優化過程的結果和網絡泛化能力都有很大的影響。
更大的初始權重具有更強的破壞性的作用,有助於避免冗餘的單元。它們也有助於避免在每層線性成分的前向或反向傳播中丟失信號——矩陣中更大的值在矩陣乘法中有更大的輸出。如果初始權重太大,那麼會在前向傳播或反向傳播中產生梯度爆炸的值。在循環網絡中,很大的權重也可能導致混沌(chaos)(對於輸入中很小的擾動非常敏感,導致確定性前向傳播過程表現隨機)。在一定程度上,梯度爆炸問題可以通過梯度截斷來緩解(執行梯度下降步驟之前設置梯度的閾值)。較大的權重也會產生使得激活函數飽和的值,導致飽和單元的梯度完全丟失。這些競爭因素決定了權重的理想初始大小。
關於如何初始化網絡,正則化和優化有着非常不同的觀點。優化觀點建議權重應該足夠大以成功傳播信息,但是正則化希望其小一點。諸如隨機梯度下降這類對權重較小的增量更新,趨於停止在更靠近初始參數的區域(不管是由於卡在低梯度的區域,還是由於觸發了基於過擬合的提前終止準則)的優化算法傾向於最終參數應該接近於初始參數。我們可以將初始化參數

為

類比於強制均值為

的高斯先驗

。從這個角度看,選擇

接近0是由道理的。這個先驗表明,單元間彼此互不交互比交互更有可能。只有在目標函數的似然項表達出對交互很強的偏好時,單元才會交互。此外,如果我們初始化參數

為很大的值,那麼我們的先驗指定了哪些單元應互相交互,以及它們應如何交互。
有些啟發式方法可用於選擇權重的初始大小。一種初始化m個輸入和n個輸出的全連接層的權重的啟發方法是從分佈

中採樣權重,而Glorot和Bengio建議使用標準初始化(normalized initialization)

後一種啟發式方法初始化所有的層,折衷於使其具有相同激活方差和使用其有相同梯度方差之間。這假設網絡是不含非線性的鏈式矩陣乘法,據此推導得出。現實的神經網絡顯然會違反這個假設,但很多設計用於線性模型的策略在其非線性對應中的效果也不錯。
Saxe推薦初始化為隨機正交矩陣,仔細挑選負責每一層非線性縮放或增益(gain)因子g。他們得到了用於不同類型的非線性激活函數的特定縮放因子。這種初始化方案也是啟發於不含非線性的矩陣相乘序列的深度網絡。在該模型下,這個初始化方案保證了達到收斂所需的訓練迭代綜述獨立於深度。
增加縮放因子g將網絡推向網絡前向傳播時激活函數增加,反向傳播時梯度範數增加的區域。Sussillo表明,正確設置縮放因子足以訓練深度深達1000層的網絡,而不需要使用正交初始化。這種方法的一個重要觀點是,在前饋網絡中,激活和梯度會在每一步前向傳播或反向傳播中增加或縮小,遵循梯度遊走行為。這是因為前饋神經網絡在每一層使用了不同的權重矩陣。如果該隨機遊走調整到保持範數,那麼前饋網絡能夠很大程度地避免相同權重矩陣用於每層的梯度消失與爆炸問題。
可惜,這些初始權重的最佳準則往往不會帶來最佳效果。這可能有三種不同的原因。首先,我們可能使用了錯誤的標準——-它實際上並不利於保持整個網絡信號的範數。其次,初始化時強加的性質可能在學習開始進行後不能保持。最後,該標準可能成功提高了優化速度,但意外地增加了泛化誤差。在實踐中,我們通常需要將權重範圍視為超參數,其最優值大致接近,但並不完全等於理論預測。
數值範圍準則的一個缺點是,設置所有的初始權重具有有相同的標準差,例如

,會使得層很大時每個單一權重會變得及其小。Martens提出了一種被稱為稀疏初始化(sparse initialization)的替代方案,每個初始化為恰好有k個非零權重。這個想法保持該單元輸入的總數量獨立於輸入數目m,而不使單一權重元素的大小隨m縮小。這個想法保持該單元輸入的數目獨立於輸入數目m,而不使用單一權重元素的大小隨m縮小。稀疏初始化有助於實現單元之間在初始化時更具多樣性。但是,獲得較大取值的權重同時被鄭家樂很強的先驗。因為梯度下降需要很長時間縮小「不正確」的大值,這個初始化方案可能會導致某些單元出問題,例如maxout單元有幾個過濾器,互相之間必須仔細調整。
如果計算資源允許,將每層權重的初始參數數值範圍設為超參數通常是個好主意,使用超參數搜索算法,如隨機搜索,挑選這些數值範圍。是否選擇使用密集或稀疏初始化也可以設為一個超參數。作為替代,我們可以手動搜索最優初始範圍。一個好的挑選初始化可以設為一個超參數,作為替代,我們可以手動搜索最優初始範圍。一個好的挑選初始數值範圍的經驗法則是觀測當小批量數據上的激活或梯度的幅度或標準差。如果權重太小,那麼當激活值在小批量上前向傳播於網絡時,激活值的幅度會縮小。通過重複識別具有小得不可接受的激活值的第一層,並提高其權重,最終有可能得到一個初始激活全部合理的網絡。如果學習在核電上仍然很慢,並提高其權重,最終有可能得到一個初始激活全部合理的網絡。如果學習在這點上仍然很慢,觀測梯度的幅度或標準差可能也會有幫助。這個過程原則上是自動的,且通常計算量低於基於驗證集誤差的超參數優化,因為它是基於初始模型在但批數據上的行為反饋,而不是在驗證集上訓練模型的反饋。
目前為止,我們關注在權重的初始化上。幸運的是,其他參數的初始化通常更容易。設置偏置的方法必須和設置權重的方法協調。設置偏置為零通常在大多數權重初始化方案中是可行的。存在一些我們可能設置偏置為非零值的情況:
如果偏置是作為輸出單元,那麼初始化偏置在獲取正確的輸出邊緣統計通常是有利的。要做到這一點,我們假設初始權重足夠小,該單元的輸出僅由偏置決定。這說明設置偏置為應用於訓練集上輸出邊緣統計的激活函數的逆。例如,如果輸出是類上的分佈,且該分佈是高度偏態分佈。第i類的邊緣概率由某個向量c的第i個元素給定,那麼我們可以通過求解方程softmax(b)=c來設置偏置向量b。這不僅適用於分類器,也適用於我們將在第三部分遇到的模型,例如自編碼器和玻爾茲曼機。這些模型擁有輸出類似於輸入數據x的網絡層,非常有助於初始化這些層的偏置以匹配x上的邊緣分佈。
有時,我們可能想要選擇偏置以避免初始化引起太大飽和。例如,我們可能會ReLU的隱藏層單元設為0.1而非0,以避免ReLU在初始化時飽和。儘管這種方法違背了不希望偏置具有很強輸入的權重初始化準則。例如,不建議使用隨機遊走初始化。
有時,另一個單元會控制其他單元能否參與到等式中。在這種情況下,我們有一個單元輸出u,另一個單元

,那麼我們可以將h視作門,以決定

還是

。在這種情形下,我們希望設置偏置h,使得在初始化的大多數情況下

。否則,u沒有學習機會。例如,設置LSTM模型遺忘門的設置為1。
另一種常見類型的參數是方差或精確度參數。例如,我們用以下模型進行帶條件方法估計的線性回歸

其中

是精確度參數。通常我們能安全地初始化方差或精度參數為1。另一種假設初始權重足夠接近零,設置偏置可以忽略權重的影響,然後設定偏置以產生輸出的正確邊緣均值,並將方差參數設置為訓練集輸出的均方誤差。
除了這些初始化模型參數的簡單常數或隨機方法,還可能使用機器學習初始化模型參數。即使是在一個不相關的任務上運行監督訓練,有時也能得到一個比初始化具有更快收斂率的初始值。這些初始化策略有些能夠得到更快的收斂率和更好的泛化誤差,因為它們編碼了模型初始化參數的分佈信息。其他策略顯然效果不錯的原因主要在於它們設置參數為正確的數值範圍,或者設置不同單元計算互相不同的函數。
