1宿稀、學(xué)習(xí)和純優(yōu)化有什么不同
在大多數(shù)機(jī)器學(xué)習(xí)問題中趁舀,我們關(guān)注某些性能度量,其定義于測試集上并且可能是不可解的祝沸。因此矮烹,我們只是間接地優(yōu)化。我們希望通過降低代價函數(shù)來提高 罩锐。這一點(diǎn)與純優(yōu)化不同奉狈,純優(yōu)化最小化目標(biāo)本身。
通常涩惑,我們希望最小化取自數(shù)據(jù)生成分布的期望:
1.1仁期、經(jīng)驗(yàn)風(fēng)險最小化
機(jī)器學(xué)習(xí)算法的目標(biāo)是降低上式所示的期望泛化誤差。這個數(shù)據(jù)量被稱為風(fēng)險(risk)。在這里跛蛋,我們強(qiáng)調(diào)該期望取自真實(shí)的潛在分布熬的。如果我們知道了真實(shí)分布,那么最小化風(fēng)險變成了一個可以被優(yōu)化算法解決的優(yōu)化問題赊级。
然而押框,我們遇到的機(jī)器學(xué)習(xí)問題,通常不知道理逊,只知道訓(xùn)練集中的樣本橡伞。將機(jī)器學(xué)習(xí)問題轉(zhuǎn)化回一個優(yōu)化問題的最簡單方法是最小化訓(xùn)練集上的期望損失。這意味著用訓(xùn)練集上的經(jīng)驗(yàn)分布替代真實(shí)分布〗唬現(xiàn)在兑徘,我們將最小化經(jīng)驗(yàn)風(fēng)險(empirical risk):
其中表示訓(xùn)練樣本的數(shù)目。
基于最小化這種平均訓(xùn)練誤差的訓(xùn)練過程被稱為經(jīng)驗(yàn)風(fēng)險最小化(empirical risk minimization)羡洛。在這種情況下挂脑,機(jī)器學(xué)習(xí)仍然和傳統(tǒng)的直接優(yōu)化很相似。我們并不直接最優(yōu)化風(fēng)險翘县,而是最優(yōu)化經(jīng)驗(yàn)風(fēng)險最域,希望也能夠降低風(fēng)險。
然而锈麸,經(jīng)驗(yàn)風(fēng)險最小化很容易導(dǎo)致過擬合镀脂。高容量的模型會簡單地記住訓(xùn)練集。在很多情況下忘伞,經(jīng)驗(yàn)風(fēng)險最小化并非真的可行薄翅。最有效的現(xiàn)代優(yōu)化算法是基于梯度下降的,但是很多有用的損失函數(shù)氓奈,如 0 ? 1 損失翘魄,沒有有效的導(dǎo)數(shù)。這兩個問題說明舀奶,在深度學(xué)習(xí)中我們很少使用經(jīng)驗(yàn)風(fēng)險最小化暑竟。反之,我們會使用一個稍有不同的方法育勺,我們真正優(yōu)化的目標(biāo)會更加不同于我們希望優(yōu)化的目標(biāo)但荤。
1.2、代理損失函數(shù)和提前終止
有時涧至,我們真正關(guān)心的損失函數(shù)(比如分類誤差)并不能被高效地優(yōu)化腹躁。例如,即使對于線性分類器而言南蓬,精確地最小化 0 ? 1 損失通常是不可解的纺非。在這種情況下哑了,我們通常會優(yōu)化代理損失函數(shù)(surrogate loss function)。
代理損失函數(shù)作為原目標(biāo)的代理烧颖,還具備一些優(yōu)點(diǎn)弱左。例如,正確類別的負(fù)對數(shù)似然通常用作 0 ? 1 損失的替代炕淮。負(fù)對數(shù)似然允許模型估計給定樣本的類別的條件概率科贬,如果該模型效果好,那么它能夠輸出期望最小分類誤差所對應(yīng)的類別鳖悠。
在某些情況下,代理損失函數(shù)比原函數(shù)學(xué)到的更多优妙。例如乘综,使用對數(shù)似然替代函數(shù)時,在訓(xùn)練集上的 0 ? 1 損失達(dá)到 0 之后套硼,測試集上的 0 ? 1 損失還能持續(xù)下降很長一段時間卡辰。這是因?yàn)榧词?0 ? 1 損失期望是零時,我們還能拉開不同類別的距離改進(jìn)分類器的魯棒性邪意,獲得一個更強(qiáng)壯的九妈、更值得信賴的分類器,從而雾鬼,相對于簡單地最小化訓(xùn)練集上的平均 0 ? 1 損失萌朱,它能夠從訓(xùn)練數(shù)據(jù)中抽取更多信息。
一般的優(yōu)化和我們用于訓(xùn)練算法的優(yōu)化有一個重要不同:訓(xùn)練算法通常不會停止在局部極小點(diǎn)策菜。反之晶疼,機(jī)器學(xué)習(xí)通常優(yōu)化代理損失函數(shù),但是在基于提前終止的收斂條件滿足時停止又憨。通常翠霍,提前終止使用真實(shí)潛在損失函數(shù),如驗(yàn)證集上的 0 ? 1 損失蠢莺,并設(shè)計為在過擬合發(fā)生之前終止寒匙。與純優(yōu)化不同的是,提前終止時代理損失函數(shù)仍然有較大的導(dǎo)數(shù)躏将,而純優(yōu)化終止時導(dǎo)數(shù)較小锄弱。
1.3、批量算法和小批量算法
機(jī)器學(xué)習(xí)算法和一般優(yōu)化算法不同的一點(diǎn)是耸携,機(jī)器學(xué)習(xí)算法的目標(biāo)函數(shù)通晨醚ⅲ可以分解為訓(xùn)練樣本上的求和。機(jī)器學(xué)習(xí)中的優(yōu)化算法在計算參數(shù)的每一次更新時通常僅使用整個代價函數(shù)中一部分項(xiàng)來估計代價函數(shù)的期望值夺衍。
優(yōu)化算法用到的目標(biāo)函數(shù)J 中的大多數(shù)屬性也是訓(xùn)練集上的期望狈谊。例如,最常用的屬性是梯度:
準(zhǔn)確計算這個期望的計算代價非常大,因?yàn)槲覀冃枰谡麄€數(shù)據(jù)集上的每個樣本上評估模型河劝。在實(shí)踐中壁榕,我們可以從數(shù)據(jù)集中隨機(jī)采樣少量的樣本,然后計算這些樣本上的平均值赎瞎。
回想一下牌里,樣本均值的標(biāo)準(zhǔn)差是,其中是樣本值真實(shí)的標(biāo)準(zhǔn)差务甥。分母表明使用更多樣本來估計梯度的方法的回報是低于線性的牡辽。比較兩個假想的梯度計算,一個基于100 個樣本敞临,另一個基于10000個樣本态辛。后者需要的計算量是前者的100 倍,但卻只降低了10 倍的均值標(biāo)準(zhǔn)差挺尿。如果能夠快速地計算出梯度估計值奏黑,而不是緩慢地計算準(zhǔn)確值,那么大多數(shù)優(yōu)化算法會收斂地更快(就總的計算量而言编矾,而不是指更新次數(shù))熟史。
另一個促使我們從小數(shù)目樣本中獲得梯度的統(tǒng)計估計的動機(jī)是訓(xùn)練集的冗余。在最壞的情況下窄俏,訓(xùn)練集中所有的個樣本都是彼此相同的拷貝蹂匹。基于采樣的梯度估計可以使用單個樣本計算出正確的梯度凹蜈,而比原來的做法少花了倍時間怒详。實(shí)踐中,我們不太可能真的遇到這種情況踪区,但我們可能會發(fā)現(xiàn)大量樣本都對梯度做出了非常相似的貢獻(xiàn)昆烁。
使用整個訓(xùn)練集的優(yōu)化算法被稱為批量(batch)梯度算法,因?yàn)樗鼈儠谝粋€大批量中同時處理所有樣本缎岗。每次只使用單個樣本的優(yōu)化算法有時被稱為隨機(jī)(stochastic)或者在線(on-line)算法静尼。大多數(shù)用于深度學(xué)習(xí)的算法介于以上兩者之間,使用一個以上传泊,而又不是全部的訓(xùn)練樣本鼠渺。傳統(tǒng)上,這些會被稱為小批量(minibatch)方法眷细。
小批量的大小通常由以下幾個因素決定:
更大的批量會計算更精確的梯度估計拦盹,但是回報卻是小于線性的。
極小批量通常難以充分利用多核架構(gòu)溪椎。這促使我們使用一些絕對最小批量普舆,低于這個值的小批量處理不會減少計算時間恬口。
如果批量處理中的所有樣本可以并行地處理(通常確是如此),那么內(nèi)存消耗和批量大小會正比沼侣。對于很多硬件設(shè)施祖能,這是批量大小的限制因素。
在某些硬件上使用特定大小的數(shù)組時蛾洛,運(yùn)行時間會更少养铸。尤其是在使用 GPU 時,通常使用 2 的冪數(shù)作為批量大小可以獲得更少的運(yùn)行時間轧膘。一般钞螟,2 的冪數(shù)的取值范圍是 32 到 256,16 有時在嘗試大模型時使用谎碍。
可能是由于小批量在學(xué)習(xí)過程中加入了噪聲筛圆,它們會有一些正則化效果(Wilson and Martinez, 2003)。泛化誤差通常在批量大小為1時最好椿浓。因?yàn)樘荻裙烙嫷母叻讲睿∨坑?xùn)練需要較小的學(xué)習(xí)率以保持穩(wěn)定性闽晦。因?yàn)榻档偷膶W(xué)習(xí)率和消耗更多步驟來遍歷整個訓(xùn)練集都會產(chǎn)生更多的步驟扳碍,所以會導(dǎo)致總的運(yùn)行時間非常大。
小批量是隨機(jī)抽取的這點(diǎn)也很重要仙蛉。從一組樣本中計算出梯度期望的無偏估計要求這些樣本是獨(dú)立的笋敞。我們也希望兩個連續(xù)的梯度估計是互相獨(dú)立的,因此兩個連續(xù)的小批量樣本也應(yīng)該是彼此獨(dú)立的荠瘪。
實(shí)踐中通常將樣本順序打亂一次夯巷,然后按照這個順序存儲起來就足夠了。之后訓(xùn)練模型時會用到的一組組小批量連續(xù)樣本是固定的哀墓,每個獨(dú)立的模型每次遍歷訓(xùn)練數(shù)據(jù)時都會重復(fù)使用這個順序趁餐。然而,這種偏離真實(shí)隨機(jī)采樣的方法并沒有很嚴(yán)重的有害影響篮绰。不以某種方式打亂樣本順序才會極大地降低算法的性能后雷。
小批量隨機(jī)梯度下降的一個動機(jī)是,只要沒有重復(fù)使用樣本吠各,它將遵循著真實(shí)泛化誤差的梯度臀突。很多小批量隨機(jī)梯度下降方法的實(shí)現(xiàn)都會打亂數(shù)據(jù)順序一次,然后多次遍歷數(shù)據(jù)來更新參數(shù)贾漏。第一次遍歷時候学,每個小批量樣本都用來計算真實(shí)泛化誤差的無偏估計。第二次遍歷時纵散,估計將會是有偏的梳码,因?yàn)樗匦鲁槿×艘呀?jīng)用過的樣本隐圾,而不是從和原先樣本相同的數(shù)據(jù)生成分布中獲取新的無偏的樣本。但是边翁,額外的遍歷更新當(dāng)然會由于減小訓(xùn)練誤差而得到足夠的好處翎承,以抵消其帶來的訓(xùn)練誤差和測試誤差間差距的增加。
隨著數(shù)據(jù)集的規(guī)模迅速增長符匾,超越了計算能力的增速叨咖,機(jī)器學(xué)習(xí)應(yīng)用每個樣本只使用一次的情況變得越來越常見,甚至是不完整地使用訓(xùn)練集啊胶。在使用一個非常大的訓(xùn)練集時甸各,過擬合不再是問題,而欠擬合和計算效率變成了主要的顧慮焰坪。
2趣倾、神經(jīng)網(wǎng)絡(luò)優(yōu)化中的挑戰(zhàn)
2.1、病態(tài)
在優(yōu)化凸函數(shù)時某饰,會遇到一些挑戰(zhàn)儒恋。這其中最突出的是 Hessian 矩陣的病態(tài)。這是數(shù)值優(yōu)化黔漂、凸優(yōu)化或其他形式的優(yōu)化中普遍存在的問題诫尽。
在深度學(xué)習(xí)背景下,我們遇到的大多數(shù)函數(shù)的Hessian幾乎處處都是對稱的炬守。因?yàn)?Hessian 矩陣是實(shí)對稱的牧嫉,我們可以將其分解成一組實(shí)特征值和一組特征向量的正交基。在特定方向上的二階導(dǎo)數(shù)可以寫成减途。當(dāng)是的一個特征向量時酣藻,這個方向的二階導(dǎo)數(shù)就是對應(yīng)的特征值。對于其他的方向鳍置,方向二階導(dǎo)數(shù)是所有特征值的加權(quán)平均辽剧,權(quán)重在 0 和 1 之間,且與夾角越小的特征向量的權(quán)重越大税产。最大特征值確定最大二階導(dǎo)數(shù)抖仅,最小特征值確定最小二階導(dǎo)數(shù)垛吗。我們可以通過(方向)二階導(dǎo)數(shù)預(yù)期一個梯度下降步驟能表現(xiàn)得多好硝枉。我們在當(dāng)前點(diǎn)處作函數(shù)的近似二階泰勒級數(shù):
其中是梯度,是點(diǎn)的Hessian集嵌。如果我們使用學(xué)習(xí)率梧兼,那么新的點(diǎn)將會是放吩。代入上述的近似,可得:
其中有 3 項(xiàng):函數(shù)的原始值羽杰、函數(shù)斜率導(dǎo)致的預(yù)期改善渡紫、函數(shù)曲率導(dǎo)致的校正到推。當(dāng)最后一項(xiàng)太大時,梯度下降實(shí)際上是可能向上移動的惕澎。
當(dāng)超過時莉测,梯度的病態(tài)會成為問題。判斷病態(tài)是否不利于神經(jīng)網(wǎng)絡(luò)訓(xùn)練任務(wù)唧喉,我們可以監(jiān)測平方梯度范數(shù)和捣卤。在很多情況中,梯度范數(shù)不會在訓(xùn)練過程中顯著縮小八孝,但是的增長會超過一個數(shù)量級董朝。其結(jié)果是盡管梯度很強(qiáng),學(xué)習(xí)會變得非常緩慢干跛,因?yàn)閷W(xué)習(xí)率必須收縮以彌補(bǔ)更強(qiáng)的曲率子姜。
2.2、局部極小值
對于非凸函數(shù)時楼入,如神經(jīng)網(wǎng)絡(luò)哥捕,有可能會存在多個局部極小值。事實(shí)上嘉熊,幾乎所有的深度模型基本上都會有非常多的局部極小值遥赚。然而,我們會發(fā)現(xiàn)這并不是主要問題记舆。
由于模型可辨識性(model identifiability)問題,神經(jīng)網(wǎng)絡(luò)和任意具有多個等效參數(shù)化潛變量的模型都會具有多個局部極小值呼巴。如果一個足夠大的訓(xùn)練集可以唯一確定一組模型參數(shù)泽腮,那么該模型被稱為可辨認(rèn)的。帶有潛變量的模型通常是不可辨認(rèn)的衣赶,因?yàn)橥ㄟ^相互交換潛變量我們能得到等價的模型诊赊。例如,考慮神經(jīng)網(wǎng)絡(luò)的第一層府瞄,我們可以交換單元 i 和單元 j 的傳入權(quán)重向量碧磅、傳出權(quán)重向量而得到等價的模型。如果神經(jīng)網(wǎng)絡(luò)有層遵馆,每層有個單元鲸郊,那么會有種排列隱藏單元的方式。這種不可辨認(rèn)性被稱為權(quán)重空間對稱性(weight space symmetry)货邓。
除了權(quán)重空間對稱性秆撮,很多神經(jīng)網(wǎng)絡(luò)還有其他導(dǎo)致不可辨認(rèn)的原因。例如换况,在任意整流線性網(wǎng)絡(luò)或者 maxout 網(wǎng)絡(luò)中职辨,我們可以將傳入權(quán)重和偏置擴(kuò)大倍盗蟆,然后將傳出權(quán)重擴(kuò)大倍,而保持模型等價舒裤。
這些模型可辨識性問題意味著神經(jīng)網(wǎng)絡(luò)代價函數(shù)具有非常多喳资、甚至不可數(shù)無限多的局部極小值。然而腾供,所有這些由于不可辨識性問題而產(chǎn)生的局部極小值都有相同的代價函數(shù)值仆邓。因此,這些局部極小值并非是非凸所帶來的問題台腥。
如果局部極小值相比全局最小點(diǎn)擁有很大的代價宏赘,局部極小值會帶來很大的隱患。我們可以構(gòu)建沒有隱藏單元的小規(guī)模神經(jīng)網(wǎng)絡(luò)黎侈,其局部極小值的代價比全局最小點(diǎn)的代價大很多 (Sontag and Sussman, 1989; Brady et al., 1989; Gori and Tesi,1992)察署。如果具有很大代價的局部極小值是常見的,那么這將給基于梯度的優(yōu)化算法帶來極大的問題峻汉。
對于實(shí)際中感興趣的網(wǎng)絡(luò)贴汪,是否存在大量代價很高的局部極小值,優(yōu)化算法是否會碰到這些局部極小值休吠,都是尚未解決的公開問題扳埂。學(xué)者們現(xiàn)在猜想,對于足夠大的神經(jīng)網(wǎng)絡(luò)而言瘤礁,大部分局部極小值都具有很小的代價函數(shù)阳懂,我們能不能找到真正的全局最小點(diǎn)并不重要,而是需要在參數(shù)空間中找到一個代價很泄袼肌(但不是最醒业鳌)的點(diǎn)。
2.3赡盘、高原号枕、鞍點(diǎn)和其他平坦區(qū)域
對于很多高維非凸函數(shù)而言,局部極小值(以及極大值)事實(shí)上都遠(yuǎn)少于另一類梯度為零的點(diǎn):鞍點(diǎn)陨享。鞍點(diǎn)附近的某些點(diǎn)比鞍點(diǎn)有更大的代價葱淳,而其他點(diǎn)則有更小的代價。在鞍點(diǎn)處抛姑,Hessian 矩陣同時具有正負(fù)特征值赞厕。位于正特征值對應(yīng)的特征向量方向的點(diǎn)比鞍點(diǎn)有更大的代價,反之定硝,位于負(fù)特征值對應(yīng)的特征向量方向的點(diǎn)有更小的代價坑傅。我們可以將鞍點(diǎn)視為代價函數(shù)某個橫截面上的局部極小點(diǎn),同時也可以視為代價函數(shù)某個橫截面上的局部極大點(diǎn)喷斋。
多類隨機(jī)函數(shù)表現(xiàn)出以下性質(zhì):低維空間中唁毒,局部極小值很普遍蒜茴。在更高維空間中,局部極小值很罕見浆西,而鞍點(diǎn)則很常見粉私。對于這類函數(shù)而言,鞍點(diǎn)和局部極小值的數(shù)目比率的期望隨指數(shù)級增長近零。我們可以從直覺上理解這種現(xiàn)象——Hessian矩陣在局部極小點(diǎn)處只有正特征值诺核。而在鞍點(diǎn)處,Hessian矩陣則同時具有正負(fù)特征值久信。試想一下窖杀,每個特征值的正負(fù)號由拋硬幣決定。在一維情況下裙士,很容易拋硬幣得到正面朝上一次而獲取局部極小點(diǎn)入客。在維空間中,要拋擲次硬幣都正面朝上的難度是指數(shù)級的腿椎。
鞍點(diǎn)激增對于訓(xùn)練算法來說有哪些影響呢桌硫?對于只使用梯度信息的一階優(yōu)化算法而言,目前情況還不清楚啃炸。鞍點(diǎn)附近的梯度通常會非常小铆隘。另一方面,實(shí)驗(yàn)中梯度下降似乎可以在許多情況下逃離鞍點(diǎn)南用。
2.4膀钠、懸崖和梯度爆炸
多層神經(jīng)網(wǎng)絡(luò)通常存在像懸崖一樣的斜率較大區(qū)域,如圖所示裹虫。這是由于幾個較大的權(quán)重相乘導(dǎo)致的肿嘲。遇到斜率極大的懸崖結(jié)構(gòu)時,梯度更新會很大程度地改變參數(shù)值恒界,通常會完全跳過這類懸崖結(jié)構(gòu)睦刃。
不管我們是從上還是從下接近懸崖砚嘴,情況都很糟糕十酣,但幸運(yùn)的是我們可以用使用啟發(fā)式梯度截斷(gradient clipping)來避免其嚴(yán)重的后果。其基本想法源自梯度并沒有指明最佳步長际长,只說明了在無限小區(qū)域內(nèi)的最佳方向耸采。當(dāng)傳統(tǒng)的梯度下降算法提議更新很大一步時,啟發(fā)式梯度截斷會干涉來減小步長工育,從而使其不太可能走出梯度近似為最陡下降方向的懸崖區(qū)域虾宇。
2.5、長期依賴
當(dāng)計算圖變得極深時如绸,神經(jīng)網(wǎng)絡(luò)優(yōu)化算法會面臨的另外一個難題就是長期依賴問題——由于變深的結(jié)構(gòu)使模型喪失了學(xué)習(xí)到先前信息的能力嘱朽,讓優(yōu)化變得極其困難旭贬。
假設(shè)某個計算圖中包含一條反復(fù)與矩陣相乘的路徑。則步后搪泳,相當(dāng)于乘以稀轨。假設(shè)有特征值分解。在這種簡單的情況下岸军,很容易看出:
當(dāng)特征值不在1附近時奋刽,若在量級上大于1則會爆炸;若小于1時則會消失艰赞。梯度消失與爆炸問題(vanishing and exploding gradient problem)是指該計算圖上的梯度也會因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=diag(%CE%BB)%5Et" alt="diag(λ)^t" mathimg="1">大幅度變化佣谐。梯度消失使得我們難以知道參數(shù)朝哪個方向移動能夠改進(jìn)代價函數(shù),而梯度爆炸會使得學(xué)習(xí)不穩(wěn)定方妖。之前描述的促使我們使用梯度截斷的懸崖結(jié)構(gòu)便是梯度爆炸現(xiàn)象的一個例子狭魂。
2.6、非精確梯度
大多數(shù)優(yōu)化算法的先決條件都是我們知道精確的梯度或是 Hessian 矩陣吁断。在實(shí)踐中趁蕊,通常這些量會有噪聲,甚至是有偏的估計仔役。幾乎每一個深度學(xué)習(xí)算法都需要基于采樣的估計掷伙,至少使用訓(xùn)練樣本的小批量來計算梯度。
各種神經(jīng)網(wǎng)絡(luò)優(yōu)化算法的設(shè)計都考慮到了梯度估計的缺陷又兵。我們可以選擇比真實(shí)損失函數(shù)更容易估計的代理損失函數(shù)來避免這個問題任柜。
2.7、局部和全局結(jié)構(gòu)間的弱對應(yīng)
迄今為止沛厨,我們討論的許多問題都是關(guān)于損失函數(shù)在單個點(diǎn)的性質(zhì)——若 是當(dāng)前點(diǎn)的病態(tài)條件宙地,或者在懸崖中,或者是一個下降方向不明顯的鞍點(diǎn)逆皮,那么會很難更新當(dāng)前步宅粥。
如果該方向在局部改進(jìn)很大,但并沒有指向代價低得多的遙遠(yuǎn)區(qū)域电谣,那么我們有可能在單點(diǎn)處克服以上所有困難秽梅,但仍然表現(xiàn)不佳。
大多數(shù)優(yōu)化研究的難點(diǎn)集中于訓(xùn)練是否找到了全局最小點(diǎn)剿牺、局部極小點(diǎn)或是鞍點(diǎn)企垦,但在實(shí)踐中神經(jīng)網(wǎng)絡(luò)不會到達(dá)任何一種臨界點(diǎn)。神經(jīng)網(wǎng)絡(luò)通常不會到達(dá)梯度很小的區(qū)域晒来。甚至钞诡,這些臨界點(diǎn)不一定存在。
許多現(xiàn)有研究方法在求解具有困難全局結(jié)構(gòu)的問題時,旨在尋求良好的初始點(diǎn)荧降,而不是開發(fā)非局部范圍更新的算法接箫。如果存在一個區(qū)域,我們遵循局部下降便能合理地直接到達(dá)某個解朵诫,并且我們能夠在該良好區(qū)域上初始化學(xué)習(xí)列牺,那么這些問題都可以避免。最終的觀點(diǎn)還是建議在傳統(tǒng)優(yōu)化算法上研究怎樣選擇更佳的初始化點(diǎn)拗窃,以此來實(shí)現(xiàn)目標(biāo)更切實(shí)可行瞎领。
2.8、優(yōu)化的理論限制
一些理論結(jié)果表明随夸,我們?yōu)樯窠?jīng)網(wǎng)絡(luò)設(shè)計的任何優(yōu)化算法都有性能限制 (Blum and Rivest, 1992; Judd, 1989; Wolpert and MacReady, 1997)九默。通常這些結(jié)果不影響神經(jīng)網(wǎng)絡(luò)在實(shí)踐中的應(yīng)用。
在神經(jīng)網(wǎng)絡(luò)訓(xùn)練中宾毒,我們通常不關(guān)注某個函數(shù)的精確極小點(diǎn)驼修,而只關(guān)注將其值下降到足夠小以獲得一個良好的泛化誤差。對優(yōu)化算法是否能完成此目標(biāo)進(jìn)行理論分析是非常困難的诈铛。因此乙各,研究優(yōu)化算法更現(xiàn)實(shí)的性能上界仍然是學(xué)術(shù)界的一個重要目標(biāo)。
3幢竹、基本算法
3.1耳峦、隨機(jī)梯度下降
隨機(jī)梯度下降(SGD)及其變種很可能是一般機(jī)器學(xué)習(xí)中應(yīng)用最多的優(yōu)化算法,特別是在深度學(xué)習(xí)中焕毫。按照數(shù)據(jù)生成分布抽取個小批量(獨(dú)立同分布的)樣本蹲坷,通過計算它們梯度均值,我們可以得到梯度的無偏估計邑飒。
SGD 算法中的一個關(guān)鍵參數(shù)是學(xué)習(xí)率循签。因?yàn)?SGD 中梯度估計引入的噪聲源(個訓(xùn)練樣本的隨機(jī)采樣)并不會在極小點(diǎn)處消失,所以在實(shí)踐中疙咸,有必要隨著時間的推移逐漸降低學(xué)習(xí)率县匠,因此我們將第步迭代的學(xué)習(xí)率記作(相比之下,當(dāng)我們使用批量梯度下降到達(dá)極小點(diǎn)時撒轮,整個代價函數(shù)的真實(shí)梯度會變得很小乞旦,之后為 0,因此批量梯度下降可以使用固定的學(xué)習(xí)率)保證 SGD 收斂的一個充分條件是:
實(shí)踐中腔召,一般會線性衰減學(xué)習(xí)率直到第次迭代:
其中杆查。在步迭代之后扮惦,一般使 ? 保持常數(shù)臀蛛。
使用線性策略時,需要選擇的參數(shù)為。通常被設(shè)為需要反復(fù)遍歷訓(xùn)練集幾百次的迭代次數(shù)浊仆。通常應(yīng)設(shè)為大約的1%客峭。主要問題是如何設(shè)置。若太大抡柿,學(xué)習(xí)曲線將會劇烈振蕩舔琅,代價函數(shù)值通常會明顯增加。溫和的振蕩是良好的洲劣,容易在訓(xùn)練隨機(jī)代價函數(shù)(例如使用Dropout的代價函數(shù))時出現(xiàn)备蚓。如果學(xué)習(xí)率太小,那么學(xué)習(xí)過程會很緩慢囱稽。如果初始學(xué)習(xí)率太低郊尝,那么學(xué)習(xí)可能會卡在一個相當(dāng)高的代價值。通常战惊,就總訓(xùn)練時間和最終代價值而言流昏,最優(yōu)初始學(xué)習(xí)率會高于大約迭代100次左右后達(dá)到最佳效果的學(xué)習(xí)率。因此吞获,通常最好是檢測最早的幾輪迭代况凉,選擇一個比在效果上表現(xiàn)最佳的學(xué)習(xí)率,但又不能太大導(dǎo)致嚴(yán)重的震蕩各拷。
SGD 及相關(guān)的小批量亦或更廣義的基于梯度優(yōu)化的在線學(xué)習(xí)算法刁绒,一個重要的性質(zhì)是每一步更新的計算時間不依賴訓(xùn)練樣本數(shù)目的多寡。即使訓(xùn)練樣本數(shù)目非常大時烤黍,它們也能收斂膛锭。對于足夠大的數(shù)據(jù)集,SGD可能會在處理整個訓(xùn)練集之前就收斂到最終測試集誤差的某個固定容差范圍內(nèi)蚊荣。
3.2初狰、動量
雖然隨機(jī)梯度下降仍然是非常受歡迎的優(yōu)化方法,但其學(xué)習(xí)過程有時會很慢互例。動量方法 (Polyak, 1964) 旨在加速學(xué)習(xí)奢入,特別是處理高曲率、小但一致的梯度媳叨,或是帶噪聲的梯度腥光。動量算法積累了之前梯度指數(shù)級衰減的移動平均,并且繼續(xù)沿該方向移動糊秆。
從形式上看武福,動量算法引入了變量充當(dāng)速度角色——它代表參數(shù)在參數(shù)空間移動的方向和速率。速度被設(shè)為負(fù)梯度的指數(shù)衰減平均痘番。名稱動量(momentum)來自物理類比捉片,根據(jù)牛頓運(yùn)動定律平痰,負(fù)梯度是移動參數(shù)空間中粒子的力。動量在物理學(xué)上定義為質(zhì)量乘以速度伍纫。在動量學(xué)習(xí)算法中宗雇,我們假設(shè)是單位質(zhì)量,因此速度向量也可以看作是粒子的動量莹规。超參數(shù)決定了之前梯度的貢獻(xiàn)衰減得有多快赔蒲。更新規(guī)則如下:
速度累積了梯度元素,相對于 越大良漱,之前梯度對現(xiàn)在方向的影響也越大舞虱。帶動量的SGD算法如下:
如果動量算法總是觀測到梯度,那么它會在方向上不停加速母市,直到達(dá)到最終速度砾嫉,由得出,步長大小為:
因此將動量的超參數(shù)視為有助于理解窒篱。例如對應(yīng)著最大速度10倍于梯度下降算法焕刮。在實(shí)踐中,的一般取值為0.5墙杯,0.9 和 0.99配并。和學(xué)習(xí)率一樣,也會隨著時間不斷調(diào)整高镐。一般初始值是一個較小的值溉旋,隨后會慢慢變大。隨著時間推移調(diào)整沒有收縮重要嫉髓。
我們可以將動量算法視為模擬連續(xù)時間下牛頓動力學(xué)下的粒子观腊。這種物理類比有助于直覺上理解動量和梯度下降算法如何表現(xiàn)。如果代價函數(shù)的梯度是唯一的力算行,那么粒子可能永遠(yuǎn)不會停下來梧油。想象一下,假設(shè)理想情況下冰面沒有摩擦州邢,一個冰球從山谷一端下滑儡陨,上升到另一端,永遠(yuǎn)來回振蕩量淌。要解決這個問題骗村,我們添加一個正比于的力。在物理術(shù)語中呀枢,此力對應(yīng)于粘性阻力胚股,就像粒子必須通過一個抵抗介質(zhì),如糖漿裙秋。這會導(dǎo)致粒子隨著時間推移逐漸失去能量琅拌,最終收斂到局部極小點(diǎn)缨伊。
3.3、Nesterov 動量
受 Nesterov 加速梯度算法 (Nesterov, 1983, 2004) 啟發(fā)财忽,Sutskever et al. (2013)提出了動量算法的一個變種。這種情況的更新規(guī)則如下:
Nesterov 動量和標(biāo)準(zhǔn)動量之間的區(qū)別體現(xiàn)在梯度計算上泣侮。Nesterov 動量中即彪,梯度計算在施加當(dāng)前速度之后。因此活尊,Nesterov 動量可以解釋為往標(biāo)準(zhǔn)動量方法中添加了一個校正因子隶校。
4、參數(shù)初始化策略
深度學(xué)習(xí)模型的訓(xùn)練算法通常是迭代的蛹锰,因此要求使用者指定一些開始迭代的初始點(diǎn)深胳。訓(xùn)練深度模型是一個足夠困難的問題,以致于大多數(shù)算法都很大程度地受到初始化選擇的影響铜犬。當(dāng)學(xué)習(xí)收斂時舞终,初始點(diǎn)可以決定學(xué)習(xí)收斂得多快,以及是否收斂到一個代價高或低的點(diǎn)癣猾。
我們對于初始點(diǎn)如何影響泛化的理解是相當(dāng)原始的敛劝,幾乎沒有提供如何選擇初始點(diǎn)的任何指導(dǎo)。也許完全確知的唯一特性是初始參數(shù)需要在不同單元間 ‘‘破壞對稱性’’纷宇。如果具有相同激活函數(shù)的兩個隱藏單元連接到相同的輸入夸盟,那么這些單元必須具有不同的初始參數(shù)。如果它們具有相同的初始參數(shù)像捶,然后應(yīng)用到確定性損失和模型的確定性學(xué)習(xí)算法將一直以相同的方式更新這兩個單元上陕。
我們幾乎總是初始化模型的權(quán)重為高斯或均勻分布中隨機(jī)抽取的值。高斯或均勻分布的選擇似乎不會有很大的差別拓春,但也沒有被詳盡地研究释簿。然而,初始分布的大小確實(shí)對優(yōu)化過程的結(jié)果和網(wǎng)絡(luò)泛化能力都有很大的影響硼莽。
更大的初始權(quán)重具有更強(qiáng)的破壞對稱性的作用辕万,有助于避免冗余的單元,也有助于避免在每層線性成分的前向或反向傳播中丟失信號——矩陣中更大的值在矩陣乘法中有更大的輸出沉删。如果初始權(quán)重太大谒府,那么會在前向傳播或反向傳播中產(chǎn)生爆炸的值陈哑。
關(guān)于如何初始化網(wǎng)絡(luò),正則化和優(yōu)化有著非常不同的觀點(diǎn)。優(yōu)化觀點(diǎn)建議權(quán)重應(yīng)該足夠大以成功傳播信息遍蟋,但是正則化希望其小一點(diǎn)。
有些啟發(fā)式方法可用于選擇權(quán)重的初始大小狱窘。一種初始化個輸入和輸出的全連接層的權(quán)重的啟發(fā)式方法是從分布中采樣權(quán)重,而Glorot and Bengio (2010) 建議使用標(biāo)準(zhǔn)初始化(normalized initialization):
這種啟發(fā)式方法初始化所有的層货葬,折衷于使其具有相同激活方差和使其具有相同梯度方差之間。
Saxe et al. (2013)推薦初始化為隨機(jī)正交矩陣劲够,仔細(xì)挑選負(fù)責(zé)每一層非線性縮放或增益 (gain) 因子震桶。他們得到了用于不同類型的非線性激活函數(shù)的特定縮放因子。
Sussillo (2014) 表明征绎,正確設(shè)置縮放因子足以訓(xùn)練深達(dá)1000層的網(wǎng)絡(luò)蹲姐,而不需要使用正交初始化。這種方法的一個重要觀點(diǎn)是人柿,在前饋網(wǎng)絡(luò)中柴墩,激活和梯度會在每一步前向傳播或反向傳播中增加或縮小,遵循隨機(jī)游走行為凫岖。這是因?yàn)榍梆伨W(wǎng)絡(luò)在每一層使用了不同的權(quán)重矩陣江咳。如果該隨機(jī)游走調(diào)整到保持范數(shù),那么前饋網(wǎng)絡(luò)能夠很大程度地避免相同權(quán)重矩陣用于每層的梯度消失與爆炸問題哥放。
數(shù)值范圍準(zhǔn)則的一個缺點(diǎn)是歼指,設(shè)置所有的初始權(quán)重具有相同的標(biāo)準(zhǔn)差,例如甥雕,會使得層很大時每個單一權(quán)重會變得極其小东臀。Martensm(2010) 提出了一種被稱為稀疏初始化(sparse initialization)的替代方案,每個單元初始化為恰好有個非零權(quán)重犀农。這個想法保持該單元輸入的總數(shù)量獨(dú)立于輸入數(shù)目惰赋,而不使單一權(quán)重元素的大小隨縮小。稀疏初始化有助于實(shí)現(xiàn)單元之間在初始化時更具多樣性呵哨。但是赁濒,獲得較大取值的權(quán)重也同時被加了很強(qiáng)的先驗(yàn)。
計算資源允許的話孟害,將每層權(quán)重的初始數(shù)值范圍設(shè)為超參數(shù)通常是個好主意拒炎,使用超參數(shù)搜索算法,如隨機(jī)搜索挨务,挑選這些數(shù)值范圍击你。
設(shè)置偏置的方法必須和設(shè)置權(quán)重的方法協(xié)調(diào)。設(shè)置偏置為零通常在大多數(shù)權(quán)重初始化方案中是可行的谎柄。存在一些我們可能設(shè)置偏置為非零值的情況:
如果偏置是作為輸出單元丁侄,那么初始化偏置以獲取正確的輸出邊緣統(tǒng)計通常是有利的。
有時朝巫,我們可能想要選擇偏置以避免初始化引起太大飽和鸿摇。例如,我們可能會將 ReLU 的隱藏單元設(shè)為 0.1 而非 0劈猿,以避免 ReLU 在初始化時飽和拙吉。
有時潮孽,一個單元會控制其他單元能否參與到等式中。在這種情況下筷黔,我們有一個單元輸出往史,另一個單元,那么我們可以將視作門佛舱,以決定還是椎例。在這種情形下,我們希望設(shè)置偏置名眉,使得在初始化的大多數(shù)情況下粟矿。否則凰棉,沒有機(jī)會學(xué)習(xí)损拢。
5、自適應(yīng)學(xué)習(xí)率算法
神經(jīng)網(wǎng)絡(luò)研究員早就意識到學(xué)習(xí)率肯定是難以設(shè)置的超參數(shù)之一撒犀,因?yàn)樗鼘δP偷男阅苡酗@著的影響福压。動量算法可以在一定程度緩解這些問題,但這樣做的代價是引入了另一個超參數(shù)或舞。如果我們相信方向敏感度在某種程度是軸對齊的荆姆,那么每個參數(shù)設(shè)置不同的學(xué)習(xí)率,在整個學(xué)習(xí)過程中自動適應(yīng)這些學(xué)習(xí)率是有道理的映凳。
Delta-bar-delta算法 (Jacobs,1988) 是一個早期的在訓(xùn)練時適應(yīng)模型參數(shù)各自學(xué)習(xí)率的啟發(fā)式方法胆筒。該方法基于一個很簡單的想法,如果損失對于某個給定模型參數(shù)的偏導(dǎo)保持相同的符號诈豌,那么學(xué)習(xí)率應(yīng)該增加仆救。如果對于該參數(shù)的偏導(dǎo)變化了符號,那么學(xué)習(xí)率應(yīng)減小矫渔。當(dāng)然彤蔽,這種方法只能應(yīng)用于全批量優(yōu)化中。
5.1庙洼、AdaGrad
AdaGrad算法顿痪,獨(dú)立地適應(yīng)所有模型參數(shù)的學(xué)習(xí)率,縮放每個參數(shù)反比于其所有梯度歷史平方值總和的平方根 (Duchi et al., 2011)油够。具有損失最大偏導(dǎo)的參數(shù)相應(yīng)地有一個快速下降的學(xué)習(xí)率蚁袭,而具有小偏導(dǎo)的參數(shù)在學(xué)習(xí)率上有相對較小的下降。凈效果是在參數(shù)空間中更為平緩的傾斜方向會取得更大的進(jìn)步石咬。
5.2撕阎、RMSProp
RMSProp算法 (Hinton, 2012) 修改AdaGrad以在非凸設(shè)定下效果更好,改變梯度積累為指數(shù)加權(quán)的移動平均碌补。RMSProp使用指數(shù)衰減平均以丟棄遙遠(yuǎn)過去的歷史虏束,使其能夠在找到凸碗狀結(jié)構(gòu)后快速收斂棉饶。
相比于AdaGrad,使用移動平均引入了一個新的超參數(shù)镇匀,用來控制移動平均的長度范圍照藻。經(jīng)驗(yàn)上,RMSProp已被證明是一種有效且實(shí)用的深度神經(jīng)網(wǎng)絡(luò)優(yōu)化算法汗侵。目前它是深度學(xué)習(xí)從業(yè)者經(jīng)常采用的優(yōu)化方法之一幸缕。
5.3、Adam
Adam(Kingma and Ba, 2014)是另一種學(xué)習(xí)率自適應(yīng)的優(yōu)化算法晰韵》⑶牵“Adam’’ 這個名字派生自短語 “adaptive moments’’。早期算法背景下雪猪,它被看作結(jié)合RMSProp和具有一些重要區(qū)別的動量的變種栏尚。在Adam中,動量直接并入梯度一階矩(指數(shù)加權(quán))的估計只恨。Adam 通常被認(rèn)為對超參數(shù)的選擇相當(dāng)魯棒译仗,盡管學(xué)習(xí)率有時需要從建議的默認(rèn)修改。
目前官觅,最流行并且使用很高的優(yōu)化算法包括 SGD纵菌、具動量的 SGD、MSProp休涤、具動量的 RMSProp咱圆、AdaDelta 和 Adam。此時功氨,選擇哪一個算法似乎主要取決于使用者對算法的熟悉程度(以便調(diào)節(jié)超參數(shù))序苏。
6、二階近似方法
為表述簡單起見疑故,我們只考察目標(biāo)函數(shù)為經(jīng)驗(yàn)風(fēng)險:
6.1杠览、牛頓法
牛頓法是基于二階泰勒級數(shù)展開在某點(diǎn)附近來近似的優(yōu)化方法,其忽略了高階導(dǎo)數(shù):
其中是相對于的Hessian矩陣在處的估計纵势。如果我們再求解這個函數(shù)的臨界點(diǎn)(令上式對求導(dǎo)為0)踱阿,我們將得到牛頓參數(shù)更新規(guī)則:
牛頓法只適用于 Hessian 矩陣是正定的情況。在深度學(xué)習(xí)中钦铁,目標(biāo)函數(shù)的表面通常非凸(有很多特征)软舌,如鞍點(diǎn)。因此使用牛頓法是有問題的牛曹。如果 Hessian 矩陣的特征值并不都是正的佛点,例如,靠近鞍點(diǎn)處,牛頓法實(shí)際上會導(dǎo)致更新朝錯誤的方向移動超营。這種情況可以通過正則化 Hessian 矩陣來避免鸳玩。常用的正則化策略包括在 Hessian 矩陣對角線上增加常數(shù)。正則化更新變?yōu)椋?/p>
在曲率方向更極端的情況下演闭,的值必須足夠大不跟,以抵消負(fù)特征值。然而米碰,如果持續(xù)增加窝革,Hessian 矩陣會變得由對角矩陣主導(dǎo),通過牛頓法所選擇的方向會收斂到普通梯度除以吕座。當(dāng)很強(qiáng)的負(fù)曲率存在時虐译,可能需要特別大,以致于牛頓法比選擇合適學(xué)習(xí)率的梯度下降的步長更小吴趴。
除了目標(biāo)函數(shù)的某些特征帶來的挑戰(zhàn)漆诽,如鞍點(diǎn),牛頓法用于訓(xùn)練大型神經(jīng)網(wǎng)絡(luò)還受限于其顯著的計算負(fù)擔(dān)史侣。Hessian 矩陣中元素數(shù)目是參數(shù)數(shù)量的平方拴泌,因此魏身,如果參數(shù)數(shù)目為(甚至是在非常小的神經(jīng)網(wǎng)絡(luò)中也可能是百萬級別)惊橱,牛頓法需要計算矩陣的逆,計算復(fù)雜度為箭昵。另外税朴,由于參數(shù)將每次更新都會改變,每次訓(xùn)練迭代都需要計算 Hessian 矩陣的逆家制。其結(jié)果是正林,只有參數(shù)很少的網(wǎng)絡(luò)才能在實(shí)際中用牛頓法訓(xùn)練。
6.2颤殴、共軛梯度
共軛梯度是一種通過迭代下降的 共軛方向(conjugate directions)以有效避免 Hessian 矩陣求逆計算的方法觅廓。
這種方法的靈感來自于對最速下降方法弱點(diǎn)的仔細(xì)研究,其中線搜索迭代地用于與梯度相關(guān)的方向上(根據(jù)幾個計算涵但,并選擇其中能產(chǎn)生最小目標(biāo)函數(shù)值的杈绸。這種策略被稱為線搜索)。實(shí)際上矮瘟,每一個由梯度給定的線搜索方向瞳脓,都保證正交于上一個線搜索方向(假設(shè)上一個搜索方向是。在極小值處澈侠,線搜索終止劫侧,方向處的方向?qū)?shù)為零:。因?yàn)樵擖c(diǎn)的梯度定義了當(dāng)前的搜索方向,將不會貢獻(xiàn)于方向烧栋。因此方向正交于)写妥。這產(chǎn)生了鋸齒形的過程:
通過遵循每次線搜索結(jié)束時的梯度,我們在某種程度上撤銷了在之前線搜索的方向上取得的進(jìn)展审姓。在共軛梯度法中耳标,我們尋求一個和先前線搜索方向共軛(conjugate)的搜索方向,即它不會撤銷該方向上的進(jìn)展邑跪。在訓(xùn)練迭代時次坡,下一步的搜索方向的形式如下:
系數(shù)的大小控制我們應(yīng)沿方向加回多少到當(dāng)前搜索方向上。
如果画畅,其中是 Hessian 矩陣砸琅,則兩個方向和被稱為共軛的。兩種用于計算的流行方法是:
6.3轴踱、BFGS
Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法具有牛頓法的一些優(yōu)點(diǎn)症脂,但沒有牛頓法的計算負(fù)擔(dān)。擬牛頓法所采用的方法(BFGS 是其中最突出的)是使用矩陣近似逆淫僻,迭代地低秩更新精度以更好地近似诱篷。
當(dāng)Hessian逆近似更新時,下降方向為雳灵。該方向上的線搜索用于決定該方向上的步長棕所。參數(shù)的最后更新為:
和共軛梯度法相似,BFGS算法迭代一系列線搜索悯辙,其方向含二階信息琳省。然而和共軛梯度不同的是,該方法的成功并不嚴(yán)重依賴于線搜索尋找該方向上和真正極小值很近的一點(diǎn)躲撰。因此针贬,相比于共軛梯度,BFGS的優(yōu)點(diǎn)是其花費(fèi)較少的時間改進(jìn)每個線搜索拢蛋。在另一方面桦他,BFGS算法必須存儲Hessian逆矩陣,需要的存儲空間谆棱,使BFGS不適用于大多數(shù)具有百萬級參數(shù)的現(xiàn)代深度學(xué)習(xí)模型快压。
7、優(yōu)化策略和元算法
許多優(yōu)化技術(shù)并非真正的算法础锐,而是一般化的模板嗓节,可以特定地產(chǎn)生算法,或是并入到很多不同的算法中皆警。
7.1拦宣、批標(biāo)準(zhǔn)化
批標(biāo)準(zhǔn)化 (Io?e and Szegedy, 2015) 是優(yōu)化深度神經(jīng)網(wǎng)絡(luò)中最激動人心的最新創(chuàng)新之一。實(shí)際上它并不是一個優(yōu)化算法,而是一個自適應(yīng)的重參數(shù)化的方法鸵隧,試圖解決訓(xùn)練非常深的模型的困難绸罗。
非常深的模型會涉及多個函數(shù)或?qū)咏M合。在其他層不改變的假設(shè)下豆瘫,梯度用于如何更新每一個參數(shù)珊蟀。在實(shí)踐中,我們同時更新所有層外驱。當(dāng)我們進(jìn)行更新時育灸,可能會發(fā)生一些意想不到的結(jié)果,這是因?yàn)樵S多組合在一起的函數(shù)同時改變時昵宇,計算更新的假設(shè)是其他函數(shù)保持不變磅崭。
(以下摘自https://zhuanlan.zhihu.com/p/34879333)
隨著訓(xùn)練的進(jìn)行,網(wǎng)絡(luò)中的參數(shù)也隨著梯度下降在不停更新瓦哎。一方面砸喻,當(dāng)?shù)讓泳W(wǎng)絡(luò)中參數(shù)發(fā)生微弱變化時,由于每一層中的線性變換與非線性激活映射蒋譬,這些微弱變化隨著網(wǎng)絡(luò)層數(shù)的加深而被放大(類似蝴蝶效應(yīng))割岛;另一方面,參數(shù)的變化導(dǎo)致每一層的輸入分布會發(fā)生改變犯助,進(jìn)而上層的網(wǎng)絡(luò)需要不停地去適應(yīng)這些分布變化癣漆,使得我們的模型訓(xùn)練變得困難。上述這一現(xiàn)象叫做Internal Covariate Shift也切。Internal Covariate Shift一個較規(guī)范的定義為:在深層網(wǎng)絡(luò)訓(xùn)練的過程中扑媚,由于網(wǎng)絡(luò)中參數(shù)變化而引起內(nèi)部結(jié)點(diǎn)數(shù)據(jù)分布發(fā)生變化的這一過程腰湾。Internal Covariate Shift會帶來什么問題呢雷恃?
(1)上層網(wǎng)絡(luò)需要不停調(diào)整來適應(yīng)輸入數(shù)據(jù)分布的變化,導(dǎo)致網(wǎng)絡(luò)學(xué)習(xí)速度的降低
梯度下降的過程會讓每一層的參數(shù)發(fā)生變化费坊,進(jìn)而使得每一層的線性與非線性計算結(jié)果分布產(chǎn)生變化倒槐。后層網(wǎng)絡(luò)就要不停地去適應(yīng)這種分布變化,這個時候就會使得整個網(wǎng)絡(luò)的學(xué)習(xí)速率過慢附井。
(2)網(wǎng)絡(luò)的訓(xùn)練過程容易陷入梯度飽和區(qū)讨越,減緩網(wǎng)絡(luò)收斂速度
當(dāng)我們在神經(jīng)網(wǎng)絡(luò)中采用飽和激活函數(shù)(saturated activation function)時,例如sigmoid永毅,tanh激活函數(shù)把跨,很容易使得模型訓(xùn)練陷入梯度飽和區(qū)(saturated regime)。
我們?nèi)绾螠p緩Internal Covariate Shift沼死?
要緩解ICS的問題着逐,就要明白它產(chǎn)生的原因。ICS產(chǎn)生的原因是由于參數(shù)更新帶來的網(wǎng)絡(luò)中每一層輸入值分布的改變,并且隨著網(wǎng)絡(luò)層數(shù)的加深而變得更加嚴(yán)重耸别,因此我們可以通過固定每一層網(wǎng)絡(luò)輸入值的分布來對減緩ICS問題健芭。
(1)白化(Whitening)
白化(Whitening)是機(jī)器學(xué)習(xí)里面常用的一種規(guī)范化數(shù)據(jù)分布的方法,主要是PCA白化與ZCA白化秀姐。白化是對輸入數(shù)據(jù)分布進(jìn)行變換慈迈,進(jìn)而達(dá)到以下兩個目的:
使得輸入特征分布具有相同的均值與方差。其中PCA白化保證了所有特征分布均值為0省有,方差為1痒留;而ZCA白化則保證了所有特征分布均值為0,方差相同蠢沿。
去除特征之間的相關(guān)性狭瞎。
通過白化操作,我們可以減緩ICS的問題搏予,進(jìn)而固定了每一層網(wǎng)絡(luò)輸入分布熊锭,加速網(wǎng)絡(luò)訓(xùn)練過程的收斂(LeCun et al.,1998b;Wiesler&Ney,2011)雪侥。
(2)Batch Normalization提出
既然白化可以解決這個問題碗殷,為什么我們還要提出別的解決辦法?當(dāng)然是現(xiàn)有的方法具有一定的缺陷速缨,白化主要有以下兩個問題:
白化過程計算成本太高锌妻,并且在每一輪訓(xùn)練中的每一層我們都需要做如此高成本計算的白化操作。
白化過程由于改變了網(wǎng)絡(luò)每一層的分布旬牲,因而改變了網(wǎng)絡(luò)層中本身數(shù)據(jù)的表達(dá)能力仿粹。底層網(wǎng)絡(luò)學(xué)習(xí)到的參數(shù)信息會被白化操作丟失掉。
為解決上面兩個問題原茅,我們的思路很簡單吭历,一方面,我們提出的normalization方法要簡化計算過程擂橘;另一方面又需要經(jīng)過規(guī)范化處理后讓數(shù)據(jù)盡可能保留原始的表達(dá)能力晌区。于是就有了簡化+改進(jìn)版的白化——Batch Normalization。
既然白化計算過程比較復(fù)雜通贞,那我們就簡化一點(diǎn)朗若,比如我們可以嘗試單獨(dú)對每個特征進(jìn)行normalizaiton就可以了,讓每個特征都有均值為0昌罩,方差為1的分布就OK哭懈。
另一個問題,既然白化操作減弱了網(wǎng)絡(luò)中每一層輸入數(shù)據(jù)表達(dá)能力茎用,那我就再加個線性變換操作遣总,讓這些數(shù)據(jù)再能夠盡可能恢復(fù)本身的表達(dá)能力就好了你虹。
圖中可以看到共有8列,代表當(dāng)前訓(xùn)練樣本的batch中共有8個樣本彤避,每一行代表當(dāng)前層神經(jīng)元的一個節(jié)點(diǎn)傅物,可以看到當(dāng)前層共有4個神經(jīng)元結(jié)點(diǎn),即維度為4琉预。我們可以看到董饰,每行的數(shù)據(jù)分布都不同。
對于第一個神經(jīng)元圆米,我們求得卒暂,對第一行數(shù)據(jù)進(jìn)行normalize得到新的值,同理我們可以計算出其他輸入維度歸一化后的值娄帖。如下圖:
通過上面的變換也祠,我們解決了第一個問題,即用更加簡化的方式來對數(shù)據(jù)進(jìn)行規(guī)范化近速,使得各層的輸入每個特征的分布均值為0诈嘿,方差為1。
Normalization操作我們雖然緩解了ICS問題削葱,讓每層網(wǎng)絡(luò)的輸入數(shù)據(jù)分布都變得穩(wěn)定奖亚,但卻導(dǎo)致了數(shù)據(jù)表達(dá)能力的缺失。也就是我們通過變換操作改變了原有數(shù)據(jù)的信息表達(dá)(representation ability of the network)析砸,使得底層網(wǎng)絡(luò)學(xué)習(xí)到的參數(shù)信息丟失昔字。
因此,BN又引入了兩個可學(xué)習(xí)(learnable)的參數(shù)和首繁。這兩個參數(shù)的引入是為了恢復(fù)數(shù)據(jù)本身的表達(dá)能力作郭,對規(guī)范化后的數(shù)據(jù)進(jìn)行線性變換,即弦疮,通過上面的步驟夹攒,我們就在一定程度上保證了輸入數(shù)據(jù)的表達(dá)能力。
以上就是整個Batch Normalization在模型訓(xùn)練中的算法和思路挂捅。
7.2芹助、坐標(biāo)下降
在某些情況下,將一個優(yōu)化問題分解成幾個部分闲先,可以更快地解決原問題。如果我們相對于某個單一變量最小化无蜂,然后相對于另一個變量伺糠,反復(fù)循環(huán)所有的變量,我們會保證到達(dá)局部極小值斥季。這種做法被稱為坐標(biāo)下降(coordinate descent)训桶,因?yàn)槲覀円淮蝺?yōu)化一個坐標(biāo)累驮。更一般地, 塊坐標(biāo)下降(block coordinate descent)是指對于某個子集的變量同時最小化舵揭。術(shù)語 “坐標(biāo)下降’’ 通常既指塊坐標(biāo)下降谤专,也指嚴(yán)格的單個坐標(biāo)下降。
當(dāng)優(yōu)化問題中的不同變量能夠清楚地分成相對獨(dú)立的組午绳,或是當(dāng)優(yōu)化一組變量明顯比優(yōu)化所有變量效率更高時置侍,坐標(biāo)下降最有意義。例如拦焚,考慮代價函數(shù):
我們可以將訓(xùn)練算法的輸入分成兩個集合:參數(shù)和蜡坊。最小化關(guān)于這兩者之一的任意一組變量的目標(biāo)函數(shù)都是凸問題。因此赎败,塊坐標(biāo)下降允許我們使用高效的凸優(yōu)化算法秕衙,交替固定優(yōu)化和固定優(yōu)化。
7.3僵刮、Polyak 平均
Polyak平均 (Polyak and Juditsky, 1992) 會平均優(yōu)化算法在參數(shù)空間訪問軌跡中的幾個點(diǎn)据忘。如果次迭代梯度下降訪問了點(diǎn),那么Polyak平均算法的輸出是搞糕,在某些問題中若河,如梯度下降應(yīng)用于凸問題時,這種方法具有較強(qiáng)的收斂保證寞宫。當(dāng)應(yīng)用于神經(jīng)網(wǎng)絡(luò)時萧福,其驗(yàn)證更多是啟發(fā)式的,但在實(shí)踐中表現(xiàn)良好辈赋。基本想法是鲫忍,優(yōu)化算法可能會來回穿過山谷好幾次而沒經(jīng)過山谷底部附近的點(diǎn)。盡管兩邊所有位置的均值應(yīng)比較接近谷底钥屈。
當(dāng)應(yīng)用 Polyak 平均于非凸問題時悟民,通常會使用指數(shù)衰減計算平均值:
7.4、監(jiān)督預(yù)訓(xùn)練
有時篷就,如果模型太復(fù)雜難以優(yōu)化射亏,或是如果任務(wù)非常困難,直接訓(xùn)練模型來解決特定任務(wù)的挑戰(zhàn)可能太大竭业。有時訓(xùn)練一個較簡單的模型來求解問題智润,然后使模型更復(fù)雜會更有效。訓(xùn)練模型來求解一個簡化的問題未辆,然后轉(zhuǎn)移到最后的問題窟绷,有時也會更有效些。這些在直接訓(xùn)練目標(biāo)模型求解目標(biāo)問題之前咐柜,訓(xùn)練簡單模型求解簡化問題的方法統(tǒng)稱為預(yù)訓(xùn)練(pretraining)兼蜈。
貪心算法(greedy algorithm)將問題分解成許多部分攘残,然后獨(dú)立地在每個部分求解最優(yōu)值。令人遺憾的是为狸,結(jié)合各個最佳的部分不能保證得到一個最佳的完整解歼郭。貪心算法也可以緊接一個精調(diào)(fine-tuning)階段,聯(lián)合優(yōu)化算法搜索全問題的最優(yōu)解辐棒。使用貪心解初始化聯(lián)合優(yōu)化算法病曾,可以極大地加速算法,并提高尋找到的解的質(zhì)量涉瘾。
在貪心監(jiān)督預(yù)訓(xùn)練的原始版本 (Bengio et al., 2007c) 中知态,每個階段包括一個僅涉及最終神經(jīng)網(wǎng)絡(luò)的子集層的監(jiān)督學(xué)習(xí)訓(xùn)練任務(wù)。
貪心監(jiān)督預(yù)訓(xùn)練的一個例子如上圖所示立叛,其中每個附加的隱藏層作為淺層監(jiān)督多層感知機(jī)的一部分預(yù)訓(xùn)練负敏,以先前訓(xùn)練的隱藏層輸出作為輸入。最初由Bengio et al. (2007d) 提出的假說是,其有助于更好地指導(dǎo)深層結(jié)構(gòu)的中間層的學(xué)習(xí)。一般情況下菩彬,預(yù)訓(xùn)練對于優(yōu)化和泛化都是有幫助的。
7.5妖泄、設(shè)計有助于優(yōu)化的模型
改進(jìn)優(yōu)化的最好方法并不總是改進(jìn)優(yōu)化算法。相反艘策,深度模型中優(yōu)化的許多改進(jìn)來自于設(shè)計易于優(yōu)化的模型蹈胡。
在實(shí)踐中,選擇一族容易優(yōu)化的模型比使用一個強(qiáng)大的優(yōu)化算法更重要朋蔫。神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)在過去 30 年的大多數(shù)進(jìn)步主要來自于改變模型族罚渐,而非改變優(yōu)化過程。1980 年代用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)的帶動量的隨機(jī)梯度下降驯妄,仍然是現(xiàn)代神經(jīng)網(wǎng)絡(luò)應(yīng)用中的前沿算法荷并。
具體來說,現(xiàn)代神經(jīng)網(wǎng)絡(luò)的設(shè)計選擇體現(xiàn)在層之間的線性變換青扔,幾乎處處可導(dǎo)的激活函數(shù)源织,和大部分定義域都有明顯的梯度。特別地微猖,創(chuàng)新的模型谈息,如 LSTM,整流線性單元和 maxout 單元都比先前的模型(如基于 sigmoid 單元的深度網(wǎng)絡(luò))使用更多的線性函數(shù)励两。這些模型都具有簡化優(yōu)化的性質(zhì)黎茎。線性函數(shù)在一個方向上一致增加,所以即使模型的輸出遠(yuǎn)離正確值当悔,也可以簡單清晰地計算梯度傅瞻,使其輸出方向朝降低損失函數(shù)的方向移動。換言之盲憎,現(xiàn)代神經(jīng)網(wǎng)絡(luò)的設(shè)計方案旨在使其局部梯度信息合理地對應(yīng)著移向一個遙遠(yuǎn)的解嗅骄。
其他的模型設(shè)計策略有助于使優(yōu)化更簡單。例如饼疙,層之間的線性路徑或是跳躍連接減少了從較低層參數(shù)到輸出最短路徑的長度溺森,因而緩解了梯度消失的問題(Srivastava et al., 2015)。
7.6窑眯、延拓法和課程學(xué)習(xí)
延拓法(continuation method)是一族通過挑選初始點(diǎn)使優(yōu)化更容易的方法屏积,以確保局部優(yōu)化花費(fèi)大部分時間在表現(xiàn)良好的空間。延拓法背后想法是構(gòu)造一系列具有相同參數(shù)的目標(biāo)函數(shù)磅甩。為最小化代價函數(shù)炊林,我們構(gòu)建新的代價函數(shù)。這些代價函數(shù)的難度逐步提高卷要,其中是最容易最小化的渣聚,是最難的,真正的代價函數(shù)驅(qū)動整個過程僧叉。當(dāng)我們說比更容易時奕枝,是指在更多的空間上表現(xiàn)良好。隨機(jī)初始化更可能落入局部下降可以成功最小化代價函數(shù)的區(qū)域瓶堕,因?yàn)槠淞己脜^(qū)域更大隘道。這系列代價函數(shù)設(shè)計為前一個解是下一個的良好初始點(diǎn)。因此郎笆,我們首先解決一個簡單的問題谭梗,然后改進(jìn)解以解決逐步變難的問題,直到我們求得真正問題的解题画。
盡管延拓法最初用來解決局部最小值的問題默辨,而局部最小值已不再認(rèn)為是神經(jīng)網(wǎng)絡(luò)優(yōu)化中的主要問題了。幸運(yùn)的是苍息,延拓法仍然有所幫助缩幸。延拓法引入的簡化目標(biāo)函數(shù)能夠消除平坦區(qū)域,減少梯度估計的方差竞思,提高 Hessian 矩陣的條件數(shù)表谊,使局部更新更容易計算,或是改進(jìn)局部更新方向與朝向全局解方向之間的對應(yīng)關(guān)系盖喷。
Bengio et al. (2009) 指出被稱為課程學(xué)習(xí)(curriculum learning)或者塑造(shaping)的方法可以被解釋為延拓法爆办。課程學(xué)習(xí)被證實(shí)為與人類教學(xué)方式一致 (Khan et al., 2011):教師剛開始會展示更容易、更典型的示例课梳,然后幫助學(xué)習(xí)者在不太顯然的情況下提煉決策面距辆。