日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

深度学习中的优化简介

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习中的优化简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????深度學習算法在許多情況下都涉及到優化。

????????1. 學習和純優化有什么不同

????????在大多數機器學習問題中,我們關注某些性能度量P,其定義于測試集上并且可能是不可解的。因此,我們只是間接地優化P。我們系統通過降低代價函數J(θ)來提高P。這一點與純優化不同,純優化最小化目標J本身。訓練深度模型的優化算法通常也會包括一些針對機器學習目標函數的特定結構進行的特化。通常,代價函數可寫為訓練集上的平均。

????????經驗風險(empirical risk)最小化:機器學習算法的目標是降低J’(θ)的期望泛化誤差。這個數據量被稱為風險(risk)。將機器學習問題轉化回一個優化問題的最簡單方法是最小化訓練集上的期望損失。這意味著用訓練集上的經驗分布p’(x,y)替代真實分布p(x,y)。現在,我們將最小化經驗風險:

??????? 其中m表示訓練樣本的數目。基于最小化這種平均訓練誤差的訓練過程被稱為經驗風險最小化(empirical risk? minimization)。經驗風險最小化很容易導致過擬合。最有效的現代優化算法是基于梯度下降的。在深度學習中我們很少使用經驗風險最小化

??????? 代理損失函數和提前終止:有時,我們真正關心的損失函數(比如分類誤差)并不能被高效地優化。例如,即使對于線性分類器而言,精確地最小化0----1損失通常是不可解的(復雜度是輸入維數的指數級別)。在這種情況下,我們通常會優化代理損失函數(surrogateloss function)。代理損失函數作為原目標的代理,還具備一些優點。例如,正確類別的負對數似然通常用作0----1損失的替代。負對數似然允許模型估計給定樣本的類別的條件概率,如果該模型效果好,那么它能夠輸出期望最小分類誤差所對應的類別。

??????? 在某些情況下,代理損失函數比原函數學到的更多。例如,使用對數似然替代函數時,在訓練集上的0----1損失達到0之后,測試集上的0----1損失還能持續下降很長一段時間。這是因為即使0----1損失期望是零時,我們還能拉開不同類別的距離以改進分類器的魯棒性,獲得一個更強壯的、更值得信賴的分類器,從而,相對于簡單地最小化訓練集上的平均0----1損失,它能夠從訓練數據中抽取更多信息。

????????一般的優化和我們用于訓練算法的優化有一個重要不同:訓練算法通常不會停止在局部極小點。反之,機器學習通常優化代理損失函數,但是在基于提前終止的收斂條件滿足時停止。通常,提前終止使用真實潛在損失函數,如驗證集上的0----1損失,并設計為在過擬合發生之前終止。與純優化不同的是,提前終止時代理損失函數仍然有較大的導數,而純優化終止時導數較小。

????????批量算法和小批量算法:機器學習算法和一般優化算法不同的一點是,機器學習算法的目標函數通常可以分解為訓練樣本上的求和。機器學習中的優化算法在計算參數的每一次更新時通常僅使用整個代價函數中一部分項來估計代價函數的期望值。

????????優化算法用到的目標函數J中的大多數屬性也是訓練集上的期望。例如,最常用的屬性是梯度。準確計算這個期望的計算代價非常大,因為我們需要在整個數據集上的每個樣本上評估模型。在實踐中,我們可以從數據集中隨機采樣少量的樣本,然后計算這些樣本上的平均值。

????????另一個促使我們從小數目樣本中獲得梯度的統計估計的動機是訓練集的冗余。我們可能會發現大量樣本都對梯度做出了非常相似的貢獻。

????????使用整個訓練集的優化算法被稱為批量(batch)或確定性(deterministic)梯度算法,因為它們會在一個大批量中同時處理所有樣本。通常,術語”批量梯度下降”指使用全部訓練集,而術語”批量”單獨出現時指一組樣本。例如,我們普遍使用術語”批量大小”表示小批量的大小。每次只使用單個樣本的優化算法有時被稱為隨機(stochastic)或者在線(on-line)算法。術語”在線”通常是指從連續產生樣本的數據流中抽取樣本的情況,而不是從一個固定大小的訓練集中遍歷多次采樣的情況。大多數用于深度學習的算法介于以上兩者之間,使用一個以上,而又不是全部的訓練樣本。傳統上,這些會被稱為小批量(minibatch)或小批量隨機(minibatch stochastic)方法,現在通常將它們簡單地稱為隨機(stochastic)方法。隨機方法的典型示例是隨機梯度下降。

????????小批量的大小通常由以下幾個因素決定

????????(1)、更大的批量會計算更精確的梯度估計,但是回報卻是小于線性的。

????????(2)、極小批量通常難以充分利用多核架構。這促使我們使用一些絕對最小批量,低于這個值的小批量處理不會減少計算時間。

????????(3)、如果批量處理中的所有樣本可以并行地處理(通常確是如此),那么內存消耗和批量大小會正比。對于很多硬件設施,這是批量大小的限制因素。

????????(4)、在某些硬件上使用特定大小的數組時,運行時間會更少。尤其是在使用GPU時,通常使用2的冪數作為批量大小可以獲得更少的運行時間。一般,2的冪數的取值范圍是32到256,16有時在嘗試大模型時使用。

????????(5)、可能是由于小批量在學習過程中加入了噪聲,它們會有一些正則化效果。泛化誤差通常在批量大小為1時最好。因為梯度估計的高方差,小批量訓練需要較小的學習率以保持穩定性。因為降低的學習率和消耗更多步驟來遍歷整個訓練集都會產生更多的步驟,所以會導致總的運行時間非常大。

????????不同的算法使用不同的方法從小批量中獲取不同的信息。有些算法對采樣誤差比其它算法更敏感,這通常有兩個可能原因:一個是它們使用了很難在少量樣本上精確估計的信息,另一個是它們以放大采樣誤差的方式使用了信息。

????????小批量是隨機抽取的這點也很重要。從一組樣本中計算出梯度期望的無偏估計要求這些樣本是獨立的。我們也希望兩個連續的梯度估計是互相獨立的,因此兩個連續的小批量樣本也應該是彼此獨立的。很多現實的數據集自然排列,從而使得連續的樣本之間具有高度相關性。例如,假設我們有一個很長的血液樣本測試結果清單。清單上的數據有可能是這樣獲取的,頭五個血液樣本于不同時間段取自第一個病人,接下來三個血液樣本取自第二個病人,再隨后的血液樣本取自第三個病人,等等。如果我們從這個清單上順序抽取樣本,那么我們的每個小批量數據的偏差都很大,因為這個小批量很可能只代表著數據集上眾多患者中的某一個患者。在這種數據集中的順序有很大影響的情況下,很有必要在抽取小批量樣本前打亂樣本順序。對于非常大的數據集,如數據中心含有幾十億樣本的數據集,我們每次構建小批量樣本時都將樣本完全均勻地抽取出來是不太現實的。幸運的是,實踐中通常將樣本順序打亂一次,然后按照這個順序存儲起來就足夠了。之后訓練模型時會用到的一組組小批量連續樣本是固定的,每個獨立的模型每次遍歷訓練數據時都會重復使用這個順序。然而,這種偏離真實隨機采樣的方法并沒有很嚴重的有害影響。不以某種方式打亂樣本順序才會極大地降低算法的性能。

????????很多機器學習上的優化問題都可以分解成并行地計算不同樣本上單獨的更新。換言之,我們在計算小批量樣本X上最小化J(X)的更新時,同時可以計算其它小批量樣本上的更新。

????????小批量隨機梯度下降的一個有趣動機是,只要沒有重復使用樣本,它將遵循著真實泛化誤差的梯度。很多小批量隨機梯度下降方法的實現都會打亂數據順序一次,然后多次遍歷數據來更新參數。第一次遍歷時,每個小批量樣本都用來計算真實泛化誤差的無偏估計。第二次遍歷時,估計將會是有偏的,因為它重新抽取了已經用過的樣本,而不是從和原先樣本相同的數據生成分布中獲取新的無偏的樣本。

????????2. 神經網絡優化中的挑戰

????????病態:在優化凸函數時,會遇到一些挑戰。這其中最突出的是Hessian矩陣H的病態。這是數值優化、凸優化或其它形式的優化中普遍存在的問題。病態問題一般被認為存在于神經網絡訓練過程中。病態體現在隨機梯度下降會”卡”在某些情況,此時即使很小的更新步長也會增加代價函數。

????????局部極小值:凸優化問題的一個突出特點是其可以簡化為尋找一個局部極小點的問題。任何一個局部極小點都是全局最小點。有些凸函數的底部是一個平坦的區域,而不是單一的全局最小點,但該平坦區域中的任意點都是一個可以接受的解。優化一個凸問題時,若發現了任何形式的臨界點,我們都會知道已經找到了一個不錯的可行解。對于非凸函數時,如神經網絡,有可能會存在多個局部極小值。事實上,幾乎所有的深度模型基本上都會有非常多的局部極小值。然而,我們會發現這并不是主要問題。由于模型可辨識性(model identifiability)問題,神經網絡和任意具有多個等效參數化潛變量的模型都會具有多個局部極小值。如果一個足夠大的訓練集可以唯一確定一組模型參數,那么該模型被稱為可辨認的。帶有潛變量的模型通常是不可辨認的,因為通過相互交換潛變量我們能得到等價的模型。例如,考慮神經網絡的第一層,我們可以交換單元i和單元j的傳入權重向量、傳出權重向量而得到等價的模型。如果神經網絡有m層,每層有n個單元,那么會有n!m種排列隱藏單元的方式。這種不可辨認性被稱為權重空間對稱性(weight space symmetry)。

????????除了權重空間對稱性,很多神經網絡還有其他導致不可辨認的原因。例如,在任意整流線性網絡或者maxout網絡中,我們可以將傳入權重和偏置擴大α倍,然后將傳出權重擴大1/α倍,而保持模型等價。這意味著,如果代價函數不包括如權重衰減這種直接依賴于權重而非模型輸出的項,那么整流線性網絡或者maxout網絡的每一個局部極小點都在等價的局部極小值的(m*n)維雙曲線上。

????????這些模型可辨識性問題意味著神經網絡代價函數具有非常多、甚至不可數無限多的局部極小值。然而,所有這些由于不可辨識性問題而產生的局部極小值都有相同的代價函數值。因此,這些局部極小值并非是非凸所帶來的問題。如果局部極小值相比全局最小點擁有很大的代價,局部極小值會帶來很大的隱患。我們可以構建沒有隱藏單元的小規模神經網絡,其局部極小值的代價比全局最小點代價大很多。如果具有很大代價的局部極小值是常見的,那么這將給基于梯度的優化算法帶來很大的問題。

????????對于實際中感興趣的網絡,是否存在大量代價很高的局部極小值,優化算法是否會碰到這些局部極小值,都是尚未解決的公開問題。多年來,大多數從業者認為局部極小值是困擾神經網絡優化的常見問題。如今,情況有所變化。這個問題仍然是學術界的熱點問題,但是學者們現在猜想,對于足夠大的神經網絡而言,大部分局部極小值都具有很小的代價函數,我們能不能找到真正的全局最小點并不重要,而是需要在參數空間中找到一個代價很小(但不是最小)的點。

????????一種能夠排除局部極小值是主要問題的檢測方法是畫出梯度范數隨時間的變化。如果梯度范數沒有縮小到一個微小的值,那么該問題既不是局部極小值,也不是其他形式的臨界點。在高維空間中,很難明確證明局部極小值是導致問題的原因。許多并非局部極小值的結構也具有很小的梯度。

????????高原、鞍點和其它平坦區域:對于很多高維非凸函數而言,局部極小值(以及極大值)事實上都遠少于另一類梯度為零的點:鞍點。鞍點附近的某些點比鞍點有更大的代價,而其他點則有更小的代價。在鞍點處,Hessian矩陣同時具有正負特征值。位于正特征值對應的特征向量方向的點比鞍點有更大的代價,反之,位于負特征值對應的特征向量方向的點有更小的代價。我們可以將鞍點視為代價函數某個橫截面上的局部極小點,同時也可以視為代價函數某個橫截面上的局部極大點。多類隨機函數表現出以下性質:低維空間中,局部極小值很普遍。在更高維空間中,局部極小值很罕見,而鞍點則很常見。對于這類函數f:Rn→R而言,鞍點和局部極小值的數目比率的期望隨n指數級增長。

????????對于牛頓法而言,鞍點顯然是一個問題。梯度下降旨在朝”下坡”移動,而非明確尋求臨界點。而牛頓法的目標是尋求梯度為零的點。如果沒有適當的修改,牛頓法就會跳進一個鞍點。高維空間中鞍點的激增或許解釋了在神經網絡訓練中為什么二階方法無法成功取代梯度下降。

????????除了極小值和鞍點,還存在其他梯度為零的點。例如從優化的角度看與鞍點很相似的極大值,很多算法不會被吸引到極大值,除了未經修改的牛頓法。和極小值一樣,許多種類的隨機函數的極大值在高維空間中也是指數級稀少。

????????也可能存在恒值的、寬且平坦的區域。在這些區域,梯度和Hessian矩陣都是零。這種退化的情形是所有數值優化算法的主要問題。在凸問題中,一個寬而平坦的區間肯定包含全局極小值,但是對于一般的優化問題而言,這樣的區域可能會對應著目標函數中一個較高的值。

????????懸崖和梯度爆炸:多層神經網絡通常存在像懸崖一樣的斜率較大區域。這是由于幾個較大的權重相乘導致的。遇到斜率極大的懸崖結構時,梯度更新會很大程度地改變參數值,通常會完全跳過這類懸崖結構。不管我們是從上還是從下接近懸崖,情況都很糟糕,但幸運的是我們可以用使用啟發式梯度截斷(gradient clipping)來避免其嚴重的后果。其基本想法源自梯度并沒有指明最佳步長,只說明了在無限小區域內的最佳方向。當傳統的梯度下降算法提議更新很大一步時,啟發式梯度截斷會干涉來減小步長,從而使其不太可能走出梯度近似為最陡下降方向的懸崖區域。懸崖結構在循環神經網絡的代價函數中很常見,因為這類模型會涉及到多個因子的相乘,其中每個因子對應一個時間步。因此,長期時間序列會產生大量相乘。

????????長期依賴:當計算圖變得極深時,神經網絡優化算法會面臨的另外一個難題就是長期依賴問題-----由于變深的結構使模型喪失了學習到先前信息的能力,讓優化變得極其困難。深層的計算圖不僅存在于前饋網絡,還存在于循環網絡中。因為循環網絡要在很長時間序列的各個時刻重復應用相同操作來構建非常深的計算圖,并且模型參數共享,這使問題更加凸顯。

????????非精確梯度:大多數優化算法的先決條件都是我們知道精確的梯度或是Hessian矩陣。在實踐中,通常這些量會有噪聲,甚至是有偏的估計。幾乎每一個深度學習算法都需要基于采樣的估計,至少使用訓練樣本的小批量來計算梯度。在其他情況,我們希望最小化的目標函數實際上是難以處理的。當目標函數不可解時,通常其梯度也是難以處理的。在這種情況下,我們只能近似梯度。例如,對比散度是用來近似玻爾茲曼機中難以處理的對數似然梯度的一種技術。各種神經網絡優化算法的設計都考慮到了梯度估計的缺陷。我們可以選擇比真實損失函數更容易估計的代理損失函數來避免這個問題。

????????局部和全局結構間的弱對應:Goodfellow認為大部分訓練的運行時間取決于到達解決方案的軌跡長度。大多數優化研究的難點集中于訓練是否找到了全局最小點、局部極小點或是鞍點,但在實踐中神經網絡不會到達任何一種臨界點。甚至,這些臨界點不一定存在。

????????優化的理論限制:一些理論結果表明,我們為神經網絡設計的任何優化算法都有性能限制。通常這些結果不影響神經網絡在實踐中的應用。一些理論結果僅適用于神經網絡的單元輸出離散值的情況。然而,大多數神經網絡單元輸出光滑的連續值,使得局部搜索求解優化可行。一些理論結果表明,存在某類問題是不可解的,但很難判斷一個特定問題是否屬于該類。其他結果表明,尋找給定規模的網絡的一個可行解是很困難的,但在實際情況中,我們通過設置更多參數,使用更大的網絡,能輕松找到可接受的解。此外,在神經網絡訓練中,我們通常不關注某個函數的精確極小點,而只關注將其值下降到足夠小以獲得一個良好的泛化誤差。對優化算法是否能完成此目標進行理論分析是非常困難的。

????????3. 基本算法

????????隨機梯度下降:隨機梯度下降(SGD)及其變種很可能是一般機器學習中應用最多的優化算法,特別是在深度學習中。SGD算法中的一個關鍵參數是學習率。在實踐中,有必要隨著時間的推移逐漸降低學習率。

????????SGD中梯度估計引入的噪聲源(m個訓練樣本的隨機采樣)并不會在極小點處消失。相比之下,當我們使用批量梯度下降到達極小點時,整個代價函數的真實梯度會變得很小,之后為0,因此批量梯度下降可以使用固定的學習率。

????????學習率可通過試驗和誤差來選取,通常最好的選擇方法是監測目標函數值隨時間變化的學習曲線。使用線性策略時,需要選擇的參數為ε0τ,τ。通常τ被設為需要反復遍歷訓練集幾百次的迭代次數。通常ετ應設為大約ε0的1%。主要問題是如何設置ε0。若ε0太大,學習曲線將會劇烈振蕩,代價函數值通常會明顯增加。溫和的振蕩是良好的,容易在訓練隨機代價函數(例如使用Dropout的代價函數)時出現。如果學習率太小,那么學習過程會很緩慢。如果初始學習率太低,那么學習可能會卡在一個相當高的代價值。通常,就總訓練時間和最終代價值而言,最優初始學習率的效果會好于大約迭代100次左右后最佳的效果。因此,通常最好是檢測最早的幾輪迭代,選擇一個比在效果上表現最佳的學習率更大的學習率,但又不能太大導致嚴重的震蕩。

????????SGD及相關的小批量亦或更廣義的基于梯度優化的在線學習算法,一個重要的性質是每一步更新的計算時間不依賴訓練樣本數目的多寡。即使訓練樣本數目非常大時,它們也能收斂。對于足夠大的數據集,SGD可能會在處理整個訓練集之前就收斂到最終測試集誤差的某個固定容差范圍內。

????????研究優化算法的收斂率,一般會衡量額外誤差(excess error),即當前代價函數超出最低可能代價的量。我們也可以在學習過程中逐漸增大小批量的大小,以此權衡批量梯度下降和隨機梯度下降兩者的優點。

????????動量(momentum):雖然隨機梯度下降仍然是非常受歡迎的優化方法,但其學習過程有時會很慢。動量方法旨在加速學習,特別是處理高曲率、小但一致的梯度,或是帶噪聲的梯度。動量算法積累了之前梯度指數級衰減的移動平均,并且繼續沿該方向移動。動量的主要目的是解決兩個問題:Hessian矩陣的病態條件和隨機梯度的方差。從形式上看,動量算法引入了變量v充當速度角色----它代表參數在參數空間移動的方向和速率。

????????Nesterov動量:動量算法的一個變種。Nesterov動量和標準動量之間的區別體現在梯度計算上。Nesterov動量中,梯度計算在施加當前速度之后。因此,Nesterov動量可以解釋為往標準動量方法中添加了一個校正因子。

????????4. 參數初始化策略:深度學習模型的訓練算法通常是迭代的,因此要求使用者指定一些開始迭代的初始點。此外,訓練深度模型是一個足夠困難的問題,以致于大多數算法都很大程度地受到初始化選擇的影響。初始點能夠決定算法是否收斂,有些初始點十分不穩定,使得該算法會遭遇數值困難,并完全失敗。當學習收斂時,初始點可以決定學習收斂得多塊,以及是否收斂到一個代價高或低的點。此外,差不多代價的點可以具有區別極大的泛化誤差,初始點也可以影響泛化。

????????現代的初始化策略是簡單的、啟發式的。設定改進的初始化策略是一項困難的任務,因為神經網絡優化至今還未被很好地理解。大多數初始化策略基于在神經網絡初始化時實現一些很好的性質。然而,我們并沒有很好地理解這些性質中的哪些會在學習開始進行后的哪些情況下得以保持。進一步的難點是,有些初始點從優化的觀點看或許是有利的,但是從泛化的觀點看是不利的。我們對于初始點如何影響泛化的理解是相當原始的,幾乎沒有提供如何選擇初始點的任何指導。

????????也許完全確知的唯一特性是初始參數需要在不同單元間”破壞對稱性”。如果具有相同激活函數的兩個隱藏單元連接到相同的輸入,那么這些單元必須具有不同的初始參數。如果它們具有相同的初始參數,然后應用到確定性損失和模型的確定性學習算法將一直以相同的方式更新這兩個單元。即使模型或訓練算法能夠使用隨機性為不同的單元計算不同的更新(例如使用Dropout的訓練),通常來說,最好還是初始化每個單元使其和其他單元計算不同的函數。這或許有助于確保沒有輸入模式丟失在前向傳播的零空間中,沒有梯度模式丟失在反向傳播的零空間中。每個單元計算不同函數的目標促使了參數的隨機初始化。我們可以明確地搜索一大組彼此互不相同的基函數,但這經常會導致明顯的計算代價。例如,如果我們有和輸出一樣多的輸入,我們可以使用Gram-Schmidt正交化于初始的權重矩陣,保證每個單元計算彼此非常不同的函數。在高維空間上使用高熵分布來隨機初始化,計算代價小并且不太可能分配單元計算彼此相同的函數。

????????通常情況下,我們可以為每個單元的偏置設置啟發式挑選的常數,僅隨機初始化權重。額外的參數(例如用于編碼預測條件方差的參數)通常和偏差一樣設置為啟發式選擇的常數。

????????我們幾乎總是初始化模型的權重為高斯或均勻分布中隨機抽取的值。高斯或均勻分布的選擇似乎不會有很大的差別,但也沒有被詳盡地研究。然而,初始分布的大小確實對優化過程的結果和網絡泛化能力都有很大的影響。

????????更大的初始權重具有更強的破壞對稱性的作用,有助于避免冗余的單元。它們也有助于避免在每層線性成分的前向或反向傳播中丟失信號----矩陣中更大的值在矩陣乘法中有更大的輸出。如果初始權重太大,那么會在前向傳播或反向傳播中產生爆炸的值。在循環網絡中,很大的權重也可能導致混沌(chaos)(對于輸入中很小的擾動非常敏感,導致確定性前向傳播過程表現隨機)。在一定程度上,梯度爆炸問題可以通過梯度截斷來緩解(執行梯度下降步驟之前設置梯度的閾值)。較大的權重也會產生使得激活函數飽和的值,導致飽和單元的梯度完全丟失。這些競爭因素決定了權重的理想初始大小。

????????關于如何初始化網絡,正則化和優化有著非常不同的觀點。優化觀點建議權重應該足夠大以成功傳播信息,但是正則化希望其小一點。諸如隨機梯度下降這類對權重較小的增量更新,趨于停止在更靠近初始參數的區域(不管是由于卡在低梯度的區域,還是由于觸發了基于過擬合的提前終止準則)的優化算法傾向于最終參數應接近于初始參數。在一般情況下,提前終止的梯度下降和權重衰減不同,但是提供了一個寬松的類比去考慮初始化的影響。

????????有些啟發式方法可用于選擇權重的初始大小。一種初始化m個輸入和n輸出的全連接層的權重的啟發式方法是從分布中采樣權重,如下公式,


而Glorot建議使用標準初始化(normalized initialization),如下

后一種啟發式方法初始化所有的層,折衷于使其具有相同激活方差和使其具有相同梯度方差之間。這假設網絡是不含非線性的鏈式矩陣乘法,據此推導得出。現實的神經網絡顯然會違反這個假設,但很多設計于線性模型的策略在其非線性對應中的效果也不錯。

????????Saxe推薦初始化為隨機正交矩陣,仔細挑選負責每一層非線性縮放或增益(gain)因子g。他們得到了用于不同類型的非線性激活函數的特定縮放因子。這種初始化方案也是啟發于不含非線性的矩陣相乘序列的深度網絡。在該模型下,這個初始化方案保證了達到收斂所需的訓練迭代總數獨立于深度。

??????? 可惜,這些初始權重的最佳準則往往不會帶來最佳效果。這可能有三種不同的原因。首先,我們可能使用了錯誤的標準----它實際上并不利于保持整個網絡信號的范數。其次,初始化時強加的性質可能在學習開始進行后不能保持。最后,該標準可能成功提高了優化速度,但意外地增大了泛化誤差。在實踐中,我們通常需要將權重范圍視為超參數,其最優值大致接近,但并不完全等于理論預測。

??????? 設置偏置的方法必須和設置權重的方法協調。設置偏置為零通常在大多數權重初始化方案中是可行的。存在一些我們可能設置偏置為非零值的情況:

????????(1)、如果偏置是作為輸出單元,那么初始化偏置以獲取正確的輸出邊緣統計通常是有利的。要做到這一點,我們假設初始權重足夠小,該單元的輸出僅由偏置決定。這說明設置偏置為應用于訓練集上輸出邊緣統計的激活函數的逆。

????????(2)、有時,我們可能想要選擇偏置以避免初始化引起太大飽和。例如,我們可能會將ReLU的隱藏單元設為0.1而非0,以避免ReLU在初始化時飽和。盡管這種方法違背不希望偏置具有很強輸入的權重初始化準則。例如,不建議使用隨機游走初始化。

????????(3)、有時,一個單元會控制其他單元能否參與到等式中。在這種情況下,我們有一個單元輸出u,另一個單元h∈[0;1],那么我們可以將h視作門,以決定uh≈1還是uh≈0。在這種情形下,我們希望設置偏置h,使得在初始化的大多數情況下h≈1。否則,u沒有機會學習。

除了這些初始化模型參數的簡單常數或隨機方法,還有可能使用機器學習初始化模型參數。

????????5. 適應學習率算法

????????Delta-bar-delta算法是一個早期的在訓練時適應模型參數各自學習率的啟發式方法。該方法基于一個很簡單的想法,如果損失對于某個給定模型參數的偏導保持相同的符號,那么學習率應該增加。如果對于該參數的偏導變化了符號,那么學習率應減小。當然,這種方法只能應用于全批量優化中。

????????AdaGrad算法:獨立地適應所有模型參數的學習率。具有損失最大偏導的參數相應地有一個快速下降的學習率,而具有小偏導的參數在學習率上有相對較小的下降。AdaGrad在某些深度學習模型上效果不錯,但不是全部。

????????RMSProp算法:修改AdaGrad以在非凸設定下效果更好,改變梯度積累為指數加權的移動平均。AdaGrad旨在應用于凸問題時快速收斂。當應用于非凸函數訓練神經網絡時,學習軌跡可能穿過了很多不同的結構,最終到達一個局部是凸碗的區域。AdaGrad根據平方梯度的整個歷史收縮學習率,可能使得學習率在達到這樣的凸結構前就變得太小了。RMSProp使用指數衰減平均以丟棄遙遠過去的歷史,使其能夠在找到凸碗狀結構后快速收斂,它就像一個初始化于該碗狀結構的AdaGrad算法實例。經驗上,RMSProp已被證明是一種有效且實用的深度神經網絡優化算法。目前它是深度學習從業者經常采用的優化方法之一。

????????Adam:早期算法背景下,它也許最好被看作結合RMSProp和具有一些重要區別的動量的變種。首先,在Adam中,動量直接并入了梯度一階矩(指數加權)的估計。將動量加入RMSProp最直觀的方法是將動量應用于縮放后的梯度。結合縮放的動量使用沒有明確的理論動機。其次,Adam包括偏置修正,修正從原點初始化的一階矩(動量項)和(非中心的)二階矩的估計。RMSProp也采用了(非中心的)二階矩估計,然而缺失了修正因子。因此,不像Adam,RMSProp二階矩估計可能在訓練初期有很高的偏置。Adam通常被認為對超參數的選擇相當魯棒,盡管學習率有時需要從建議的默認修改。

????????目前,最流行并且使用很高的優化算法包括SGD、具動量的SGD、RMSProp、具動量的RMSProp、AdaDelta和Adam

????????6. 二階近似方法

????????牛頓法:與一階方法相比,二階方法使用二階導數改進優化。最廣泛使用的二階方法是牛頓法。牛頓法是基于二階泰勒級數展開在某點θ0附近類近似J(θ)的優化方法,其忽略了高階導數。牛頓法只適用于Hessian矩陣是正定的情況。在深度學習中,目標函數的表面通常非凸(有很多特征),如鞍點。因此使用牛頓法是有問題的。如果Hessian矩陣的特征值并不都是正的,例如,靠近鞍點處,牛頓法實際上會導致更新朝錯誤的方向移動。這種情況可以通過正則化Hessian矩陣來避免。常用的正則化策略包括在Hessian矩陣對角線上增加常數α. 除了目標函數的某些特征帶來的挑戰,如鞍點,牛頓法用于訓練大型神經網絡還受限于其顯著的計算負擔。Hessian矩陣中元素數目是參數數量的平方,因此,如果參數數目為k(甚至是在非常小的神經網絡中k也可能是百萬級別),牛頓法需要計算k*k矩陣的逆,計算復雜度為O(k3)。另外,由于參數將每次更新都會改變,每次訓練迭代都需要計算Hessian矩陣的逆。其結果是,只有參數很少的網絡才能在實際中用牛頓法訓練。

????????共軛矩陣:是一種通過迭代下降的共軛方向(conjugate directions)以有效避免Hessian矩陣求逆計算的方法。這種方法的靈感來自于對最速下降方法弱點的仔細研究,其中線性搜索迭代地用于與梯度相關的方向上。

????????Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法:具有牛頓法的一些優點,但沒有牛頓法的計算負擔。在這方面,BFGS和CG很像。然而,BFGS使用了一個更直接的方法近似牛頓更新。

????????7. 優化策略和元算法:許多優化技術并非真正的算法,而是一般化的模板,可以特定地產生算法,或是并入到很多不同的算法中。

????????批標準化:實際上它并不是一個優化算法,而是一個自適應的重參數化的方法,試圖解決訓練非常深的模型的困難。非常深的模型會涉及多個函數或層組合。在其它層不改變的假設下,梯度用于如何更新每一個參數。在實踐中,我們同時更新所有層。當我們進行更新時,可能會發生一些意想不到的結果,這是因為許多組合在一起的函數同時改變時,計算更新的假設是其他函數保持不變。批標準化提出了一種幾乎可以重參數化所有深度網絡的優雅方法。重參數化顯著減少了多層之間協調更新的問題。批標準化可應用于網絡的任何輸入層或隱藏層。

????????坐標下降:在某些情況下,將一個優化問題分解成幾個部分,可以更快地解決原問題。如果我們相對于某個單一變量xi最小化f(x),然后相對于另一個變量xj等等,反復循環所有的變量,我們會保證到達(局部)極小值。這種做法被稱為坐標下降(coordinate descent),因為我們一次優化一個坐標。更一般地,塊坐標下降(blockcoordinate descent)是指對于某個子集的變量同時最小化。術語”坐標下降”通常既指塊坐標下降,也指嚴格的單個坐標下降。當優化問題中的不同變量能夠清楚地分成相對獨立的組,或是當優化一組變量明顯比優化所有變量效率更高時,坐標下降最有意義。當一個變量的值很大程度地影響另一個變量的最優值時,坐標下降不是一個很好的方法。

????????Polyak平均:會平均優化算法在參數空間訪問軌跡中的幾個點。

????????監督預訓練:有時,如果模型太復雜難以優化,或是如果任務非常困難,直接訓練模型來解決特定任務的挑戰可能太大。有時訓練一個較簡單的模型來求解問題,然后使模型更復雜會更有效。訓練模型來求解一個簡化的問題,然后轉移到最后的問題,有時也會更有效些。這些在直接訓練目標模型求解目標問題之前,訓練簡單模型求解簡化問題的方法統稱為預訓練(pretraining)。

????????貪心算法(greedy algorithm)將問題分解成許多部分,然后獨立地在每個部分求解最優值。令人遺憾的是,結合各個最佳的部分不能保證得到一個最佳的完整解。然而,貪心算法計算上比求解最優聯合解的算法高效得多,并且貪心算法的解在不是最優的情況下,往往也是可以接受的。貪心算法也可以緊接一個微調(fine-tuning)階段,聯合優化算法搜索全問題的最優解。使用貪心解初始化聯合優化算法,可以極大地加速算法,并提高尋找到的解的質量。預訓練算法,特別是貪心預訓練,在深度學習中是普遍存在的。

????????在貪心監督預訓練(greedy supervised pretraining)的原始版本中,每個階段包括一個僅涉及最終神經網絡的子集層的監督學習訓練任務。

????????設計有助于優化的模型:改進優化的最好方法并不總是改進優化算法。相反,深度模型中優化的許多改進來自于設計易于優化的模型。在實踐中,選擇一族容易優化的模型比使用一個強大的優化算法更重要。現代神經網絡的設計選擇體現在層之間的線性變換,幾乎處處可導的激活函數,和大部分定義域都有明顯的梯度。

????????延拓法和課程學習:許多優化挑戰都來自于代價函數的全局結構,不能僅通過局部更新方向上更好的估計來解決。解決這個問題的主要方法是嘗試初始化參數到某種區域內,該區域可以通過局部下降很快連接到參數空間中的解。

????????延拓法(continuation method)是一族通過挑選初始點使優化更容易的方法,以確保局部優化花費大部分時間在表現良好的空間。延拓法的背后想法是構造一系列具有相同參數的目標函數。為了最小化代價函數J(θ),我們構建新的代價函數{J(0),…, J(n)}。這些代價函數的難度逐步提高,其中J(0)是最容易最小化的,J(n)是最難的,真正的代價函數驅動整個過程。當我們說J(i)比J(i+1)更容易時,是指其在更多的θ空間上表現良好。隨機初始化更有可能落入局部下降可以成功最小化代價函數的區域,因為其良好區域更大。這系列代價函數設計為前一個解是下一個的良好初始點。因此,我們首先解決一個簡單的問題,然后改進解以解決逐步變難的問題,直到我們求解真正問題的解。傳統的延拓法(用于神經網絡訓練之前的延拓法)通常基于平滑目標函數。傳統上,延拓法主要用來克服局部極小值的問題。具體地,它被設計來在有很多局部極小值的情況下,求解一個全局最小點。這些連續方法會通過”模糊”原來的代價函數來構建更容易的代價函數。

????????課程學習(curriculum learning)或者塑造(shaping)的方法可以被解釋為延拓法。課程學習基于規劃學習過程的想法,首先學習簡單的概念,然后逐步學習依賴于這些簡化概念的復雜概念。

????? ? 以上內容摘自:《深度學習中文版》

????? ? GitHub:?https://github.com/fengbingchun/NN_Test ?

總結

以上是生活随笔為你收集整理的深度学习中的优化简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。