1. 訓(xùn)練誤差和泛化誤差
機(jī)器學(xué)習(xí)模型在訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集上的表現(xiàn)撮竿。如果你改變過實驗中的模型結(jié)構(gòu)或者超參數(shù),你也許發(fā)現(xiàn)了:當(dāng)模型在訓(xùn)練數(shù)據(jù)集上更準(zhǔn)確時笔呀,它在測試數(shù)據(jù)集上卻不?定更準(zhǔn)確。這是為什么呢许师?
因為存在著訓(xùn)練誤差和泛化誤差:
- 訓(xùn)練誤差:模型在訓(xùn)練數(shù)據(jù)集上表現(xiàn)出的誤差房蝉。
- 泛化誤差:模型在任意?個測試數(shù)據(jù)樣本上表現(xiàn)出的誤差的期望,并常常通過測試數(shù)據(jù)集上的誤差來近似微渠。
訓(xùn)練誤差的期望小于或等于泛化誤差搭幻。也就是說,?般情況下逞盆,由訓(xùn)練數(shù)據(jù)集學(xué)到的模型參數(shù)會使模型在訓(xùn)練數(shù)據(jù)集上的表現(xiàn)優(yōu)于或等于在測試數(shù)據(jù)集上的表現(xiàn)檀蹋。由于?法從訓(xùn)練誤差估計泛化誤差,?味地降低訓(xùn)練誤差并不意味著泛化誤差?定會降低纳击。
機(jī)器學(xué)習(xí)模型應(yīng)關(guān)注降低泛化誤差续扔。
2. 該如何選擇模型
在機(jī)器學(xué)習(xí)中攻臀,通常需要評估若?候選模型的表現(xiàn)并從中選擇模型。這?過程稱為模型選擇(model selection)纱昧∨傩ィ可供選擇的候選模型可以是有著不同超參數(shù)的同類模型。以多層感知機(jī)為例识脆,我們可以選擇隱藏層的個數(shù)设联,以及每個隱藏層中隱藏單元個數(shù)和激活函數(shù)。為了得到有效的模型灼捂,我們通常要在模型選擇上下?番功夫离例。
2.1 驗證數(shù)據(jù)集
從嚴(yán)格意義上講,測試集只能在所有超參數(shù)和模型參數(shù)選定后使??次悉稠。不可以使?測試數(shù)據(jù)選擇模型宫蛆,如調(diào)參。由于?法從訓(xùn)練誤差估計泛化誤差的猛,因此也不應(yīng)只依賴訓(xùn)練數(shù)據(jù)選擇模型耀盗。鑒于此,我們可以預(yù)留?部分在訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集以外的數(shù)據(jù)來進(jìn)?模型選擇卦尊。這部分?jǐn)?shù)據(jù)被稱為驗證數(shù)據(jù)集叛拷,簡稱驗證集(validation set)。例如岂却,我們可以從給定的訓(xùn)練集中隨機(jī)選取?小部分作為驗證集忿薇,而將剩余部分作為真正的訓(xùn)練集。
可以通過預(yù)留這樣的驗證集來進(jìn)行模型選擇躏哩,判斷驗證集在模型中的表現(xiàn)能力署浩。
2.2 K 折交叉驗證
由于驗證數(shù)據(jù)集不參與模型訓(xùn)練,當(dāng)訓(xùn)練數(shù)據(jù)不夠?時震庭,預(yù)留?量的驗證數(shù)據(jù)顯得太奢侈瑰抵。?種改善的?法是K折交叉驗證(K-fold cross-validation)。在K折交叉驗證中器联,我們把原始訓(xùn)練數(shù)據(jù)集分割成K個不重合的?數(shù)據(jù)集,然后我們做K次模型訓(xùn)練和驗證婿崭。每?次拨拓,我們使??個?數(shù)據(jù)集驗證模型,并使?其他K ? 1個?數(shù)據(jù)集來訓(xùn)練模型氓栈。在這K次訓(xùn)練和驗證中渣磷,每次?來驗證模型的?數(shù)據(jù)集都不同。最后授瘦,我們對這K次訓(xùn)練誤差和驗證誤差分別求平均醋界。
3. ?擬合和過擬合
- 欠擬合:模型?法得到較低的訓(xùn)練誤差竟宋。
- 過擬合:是模型的訓(xùn)練誤差遠(yuǎn)小于它在測試數(shù)據(jù)集上的誤差。
給定訓(xùn)練數(shù)據(jù)集形纺,
- 如果模型的復(fù)雜度過低丘侠,很容易出現(xiàn)?擬合;
- 如果模型復(fù)雜度過?逐样,很容易出現(xiàn)過擬合蜗字。
應(yīng)對?擬合和過擬合的?個辦法是針對數(shù)據(jù)集選擇合適復(fù)雜度的模型。
訓(xùn)練數(shù)據(jù)集??
影響?擬合和過擬合的另?個重要因素是訓(xùn)練數(shù)據(jù)集的?小脂新。?般來說挪捕,如果訓(xùn)練數(shù)據(jù)集中樣本數(shù)過少,特別是?模型參數(shù)數(shù)量(按元素計)更少時争便,過擬合更容易發(fā)?级零。此外,泛化誤差不會隨訓(xùn)練數(shù)據(jù)集?樣本數(shù)量增加而增?滞乙。因此奏纪,在計算資源允許的范圍之內(nèi),我們通常希望訓(xùn)練數(shù)據(jù)集??些酷宵,特別是在模型復(fù)雜度較?時亥贸,例如層數(shù)較多的深度學(xué)習(xí)模型。
正則化
應(yīng)對過擬合問題的常??法:權(quán)重衰減(weight decay)浇垦,權(quán)重衰減等價于L2范數(shù)正則化(regularization)炕置。正則化通過為模型損失函數(shù)添加懲罰項使學(xué)出的模型參數(shù)值較小,是應(yīng)對過擬合的常??段男韧。
4. 丟棄法(Dropout)
除了上面提到的權(quán)重衰減以外朴摊,深度學(xué)習(xí)模型常常使?丟棄法(dropout)來應(yīng)對過擬合問題。丟棄法有?些不同的變體此虑。本節(jié)中提到的丟棄法特指倒置丟棄法(inverted dropout)甚纲。
回憶?下,“多層感知機(jī)”描述了?個單隱藏層的多層感知機(jī)朦前。其中輸?個數(shù)為4介杆,隱藏單元個數(shù)為5,且隱藏單元hi(i = 1, . . . , 5)的計算表達(dá)式為:
這??是激活函數(shù)韭寸,x1, . . . , x4是輸?春哨,隱藏單元i的權(quán)重參數(shù)為w1i, . . . , w4i,偏差參數(shù)為bi恩伺。當(dāng)對該隱藏層使?丟棄法時赴背,該層的隱藏單元將有?定概率被丟棄掉。設(shè)丟棄概率為p,那么有p的概率hi會被清零凰荚,有1 ? p的概率hi會除以1 ? p做拉伸燃观。丟棄概率是丟棄法的超參數(shù)。具體來說便瑟,設(shè)隨機(jī)變量ξi為0和1的概率分別為p和1 ? p缆毁。使?丟棄法時我們計算新的隱藏單元 。
由于E(ξi) = 1 ? p胳徽,因此:
即丟棄法不改變其輸?的期望值积锅。讓我們對隱藏層使?丟棄法,?種可能的結(jié)果如下圖所?养盗,其中h2和h5被清零缚陷。這時輸出值的計算不再依賴h2和h5,在反向傳播時往核,與這兩個隱藏單元相關(guān)的權(quán)重的梯度均為0箫爷。由于在訓(xùn)練中隱藏層神經(jīng)元的丟棄是隨機(jī)的,即h1, . . . , h5都有可能被清零聂儒,輸出層的計算?法過度依賴h1, . . . , h5中的任?個虎锚,從而在訓(xùn)練模型時起到正則化的作?,并可以?來應(yīng)對過擬合衩婚。在測試模型時窜护,我們?yōu)榱四玫礁哟_定性的結(jié)果,?般不使?丟棄法非春。
5. 梯度消失/梯度爆炸(Vanishing / Exploding gradients)
訓(xùn)練神經(jīng)網(wǎng)絡(luò)柱徙,尤其是深度神經(jīng)所面臨的一個問題就是梯度消失或梯度爆炸,也就是你訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時候奇昙,導(dǎo)數(shù)或坡度有時會變得非常大护侮,或者非常小,甚至于以指數(shù)方式變小储耐,這加大了訓(xùn)練的難度羊初。
本質(zhì)上,梯度消失和爆炸是一種情況什湘。在深層網(wǎng)絡(luò)中长赞,由于網(wǎng)絡(luò)過深,如果初始得到的梯度過小闽撤,或者傳播途中在某一層上過小涧卵,則在之后的層上得到的梯度會越來越小,即產(chǎn)生了梯度消失腹尖。梯度爆炸也是同樣的。一般地,不合理的初始化以及激活函數(shù)热幔,如sigmoid等乐设,都會導(dǎo)致梯度過大或者過小,從而引起消失/爆炸绎巨。
解決方案
-
預(yù)訓(xùn)練加微調(diào)
其基本思想是每次訓(xùn)練一層隱節(jié)點近尚,訓(xùn)練時將上一層隱節(jié)點的輸出作為輸入,而本層隱節(jié)點的輸出作為下一層隱節(jié)點的輸入场勤,此過程就是逐層“預(yù)訓(xùn)練”(pre-training)戈锻;在預(yù)訓(xùn)練完成后,再對整個網(wǎng)絡(luò)進(jìn)行“微調(diào)”(fine-tunning)和媳。
此方法有一定的好處格遭,但是目前應(yīng)用的不是很多了。
-
梯度剪切留瞳、正則
梯度剪切這個方案主要是針對梯度爆炸提出的拒迅,其思想是設(shè)置一個梯度剪切閾值,然后更新梯度的時候她倘,如果梯度超過這個閾值璧微,那么就將其強(qiáng)制限制在這個范圍之內(nèi)。這可以防止梯度爆炸硬梁。
另外一種解決梯度爆炸的手段是采用權(quán)重正則化(weithts regularization)比較常見的是L1和L2正則前硫。
-
ReLu、leakReLu等激活函數(shù)
ReLu:其函數(shù)的導(dǎo)數(shù)在正數(shù)部分是恒等于1荧止,這樣在深層網(wǎng)絡(luò)中屹电,在激活函數(shù)部分就不存在導(dǎo)致梯度過大或者過小的問題,緩解了梯度消失或者爆炸罩息。同時也方便計算嗤详。當(dāng)然,其也存在存在一些缺點瓷炮,例如過濾到了負(fù)數(shù)部分葱色,導(dǎo)致部分信息的丟失,輸出的數(shù)據(jù)分布不在以0為中心娘香,改變了數(shù)據(jù)分布苍狰。
leakrelu:就是為了解決relu的0區(qū)間帶來的影響,其數(shù)學(xué)表達(dá)為:leakrelu=max(k*x,0)其中k是leak系數(shù)烘绽,一般選擇0.01或者0.02淋昭,或者通過學(xué)習(xí)而來。
-
Batch Normalization
Batch Normalization是深度學(xué)習(xí)發(fā)展以來提出的最重要的成果之一了安接,目前已經(jīng)被廣泛的應(yīng)用到了各大網(wǎng)絡(luò)中翔忽,具有加速網(wǎng)絡(luò)收斂速度,提升訓(xùn)練穩(wěn)定性的效果,Batch Normalization本質(zhì)上是解決反向傳播過程中的梯度問題歇式。Batch Normalization驶悟,簡稱BN,即批規(guī)范化材失,通過規(guī)范化操作將輸出信號x規(guī)范化到均值為0痕鳍,方差為1保證網(wǎng)絡(luò)的穩(wěn)定性。
- 有一些從 0 到 1 而不是從 1 到 1000 的特征值龙巨,通過歸一化所有的輸入特征值??笼呆,以獲得類似范圍的值,可以加速學(xué)習(xí)旨别。所以 Batch 歸一化起的作用的原因诗赌,直觀的一點就是,它在做類似的工作昼榛,但不僅僅對于這里的輸入值境肾,還有隱藏單元的值。
- 它可以使權(quán)重比你的網(wǎng)絡(luò)更滯后或更深層胆屿,比如奥喻,第 10 層的權(quán)重更能經(jīng)受得住變化。
-
殘差結(jié)構(gòu)
殘差的方式非迹,能使得深層的網(wǎng)絡(luò)梯度通過跳級連接路徑直接返回到淺層部分环鲤,使得網(wǎng)絡(luò)無論多深都能將梯度進(jìn)行有效的回傳。
-
LSTM
LSTM全稱是長短期記憶網(wǎng)絡(luò)(long-short term memory networks)憎兽,是不那么容易發(fā)生梯度消失的冷离,主要原因在于LSTM內(nèi)部復(fù)雜的“門”(gates)。在計算時纯命,將過程中的梯度進(jìn)行了抵消西剥。
6. 隨機(jī)梯度下降法(SGD)
6.1 mini-batch梯度下降
你可以把訓(xùn)練集分割為小一點的子集訓(xùn)練,這些子集被取名為 mini-batch亿汞,假設(shè)每一個子集中只有 1000 個樣本瞭空,那么把其中的?? (1)到?? (1000)取出來,將其稱為第一個子訓(xùn)練集疗我,也叫做 mini-batch咆畏,然后你再取出接下來的 1000 個樣本,從?? (1001)到?? (2000)吴裤,然后再取 1000個樣本旧找,以此類推。
在訓(xùn)練集上運行 mini-batch 梯度下降法麦牺,你運行 for t=1……5000钮蛛,因為我們有5000個各有 1000 個樣本的組鞭缭,在 for 循環(huán)里你要做得基本就是對?? {??}和?? {??}執(zhí)行一步梯度下降法。
- batch_size=1愿卒,就是SGD缚去。
- batch_size=n,就是mini-batch
- batch_size=m琼开,就是batch
其中1<n<m,m表示整個訓(xùn)練集大小枕荞。
優(yōu)缺點:
- batch:相對噪聲低些柜候,幅度也大一些,你可以繼續(xù)找最小值躏精。
- SGD:大部分時候你向著全局最小值靠近渣刷,有時候你會遠(yuǎn)離最小值,因為那個樣本恰好給你指的方向不對矗烛,因此隨機(jī)梯度下降法是有很多噪聲的辅柴,平均來看,它最終會靠近最小值瞭吃,不過有時候也會方向錯誤碌嘀,因為隨機(jī)梯度下降法永遠(yuǎn)不會收斂,而是會一直在最小值附近波動歪架。一次性只處理了一個訓(xùn)練樣本股冗,這樣效率過于低下。
- mini-batch:實踐中最好選擇不大不小的 mini-batch和蚪,得到了大量向量化止状,效率高,收斂快攒霹。
首先怯疤,如果訓(xùn)練集較小,直接使用 batch 梯度下降法催束,這里的少是說小于 2000 個樣本集峦。一般的 mini-batch 大小為 64 到 512,考慮到電腦內(nèi)存設(shè)置和使用的方式泣崩,如果 mini-batch 大小是 2 的??次方少梁,代碼會運行地快一些。
6.2 調(diào)節(jié) Batch_Size 對訓(xùn)練效果影響到底如何矫付?
- Batch_Size 太小凯沪,模型表現(xiàn)效果極其糟糕(error飆升)。
- 隨著 Batch_Size 增大买优,處理相同數(shù)據(jù)量的速度越快妨马。
- 隨著 Batch_Size 增大挺举,達(dá)到相同精度所需要的 epoch 數(shù)量越來越多。
- 由于上述兩種因素的矛盾烘跺, Batch_Size 增大到某個時候湘纵,達(dá)到時間上的最優(yōu)。
- 由于最終收斂精度會陷入不同的局部極值滤淳,因此 Batch_Size 增大到某些時候梧喷,達(dá)到最終收斂精度上的最優(yōu)。
7. 優(yōu)化算法
7.1 動量法
在每次迭代中脖咐,梯度下降根據(jù)?變量當(dāng)前位置铺敌,沿著當(dāng)前位置的梯度更新?變量。然而屁擅,如果?變量的
迭代?向僅僅取決于?變量當(dāng)前位置偿凭,這可能會帶來?些問題。
讓我們考慮?個輸?和輸出分別為?維向量x = [x1, x2]?和標(biāo)量的?標(biāo)函數(shù) 派歌。弯囊,這?將系數(shù)從1減小到了0.1。下?實現(xiàn)基于這個?標(biāo)函數(shù)的梯度下降胶果,并演?使?學(xué)習(xí)率為0.4時?變量的迭代軌跡匾嘱。
可以看到,同?位置上稽物,?標(biāo)函數(shù)在豎直?向(x2軸?向)?在?平?向(x1軸?向)的斜率的絕對值更?奄毡。因此,給定學(xué)習(xí)率贝或,梯度下降迭代?變量時會使?變量在豎直?向?在?平?向移動幅度更?吼过。那么,我們需要?個較小的學(xué)習(xí)率從而避免?變量在豎直?向上越過?標(biāo)函數(shù)最優(yōu)解咪奖。然而盗忱,這會造成?變量在?平?向上朝最優(yōu)解移動變慢。
動量法的提出是為了解決梯度下降的上述問題羊赵。由于小批量隨機(jī)梯度下降?梯度下降更為?義趟佃,本章后續(xù)討論將沿?“小批量隨機(jī)梯度下降”?節(jié)中時間步t的小批量隨機(jī)梯度gt的定義。設(shè)時間步t的?變量為xt昧捷,學(xué)習(xí)率為ηt闲昭。在時間步0,動量法創(chuàng)建速度變量v0靡挥,并將其元素初始化成0序矩。在時間步t > 0,動量法對每次迭代的步驟做如下修改:
其中跋破,動量超參數(shù)γ滿?0 ≤ γ < 1簸淀。當(dāng)γ = 0時瓶蝴,動量法等價于小批量隨機(jī)梯度下降。在梯度下降時候使用動量法后的迭代軌跡:
可以看到使?較小的學(xué)習(xí)率η = 0.4和動量超參數(shù)γ = 0.5時租幕,動量法在豎直?向上的移動更加平滑舷手,且在?平?向上更快逼近最優(yōu)解。
所以劲绪,在動量法中男窟,?變量在各個?向上的移動幅度不僅取決當(dāng)前梯度,還取決于過去的各個梯度在各個?向上是否?致珠叔。在本節(jié)之前?例的優(yōu)化問題中蝎宇,所有梯度在?平?向上為正(向右),而在豎直?向上時正(向上)時負(fù)(向下)祷安。這樣,我們就可以使?較?的學(xué)習(xí)率兔乞,從而使?變量向最優(yōu)解更快移動汇鞭。
7.2 AdaGrad算法
優(yōu)化算法中,?標(biāo)函數(shù)?變量的每?個元素在相同時間步都使?同?個學(xué)習(xí)率來?我迭代庸追。在“動量法”?我們看到當(dāng)x1和x2的梯度值有較?差別時霍骄,需要選擇?夠小的學(xué)習(xí)率使得?變量在梯度值較?的維度上不發(fā)散。但這樣會導(dǎo)致?變量在梯度值較小的維度上迭代過慢淡溯。動量法依賴指數(shù)加權(quán)移動平均使得?變量的更新?向更加?致读整,從而降低發(fā)散的可能。本節(jié)我們介紹AdaGrad算法咱娶,它根據(jù)?變量在每個維度的梯度值的?小來調(diào)整各個維度上的學(xué)習(xí)率米间,從而避免統(tǒng)?的學(xué)習(xí)率難以適應(yīng)所有維度的問題。
AdaGrad算法會使??個小批量隨機(jī)梯度gt按元素平?的累加變量st膘侮。在時間步0屈糊,AdaGrad將s0中每個元素初始化為0。在時間步t琼了,?先將小批量隨機(jī)梯度gt按元素平?后累加到變量st:
其中⊙是按元素相乘逻锐。接著,我們將?標(biāo)函數(shù)?變量中每個元素的學(xué)習(xí)率通過按元素運算重新調(diào)整?下:
其中η是學(xué)習(xí)率雕薪,?是為了維持?jǐn)?shù)值穩(wěn)定性而添加的常數(shù)昧诱,如10的-6次方。這?開?所袁、除法和乘法的運算都是按元素運算的盏档。這些按元素運算使得?標(biāo)函數(shù)?變量中每個元素都分別擁有??的學(xué)習(xí)率。
需要強(qiáng)調(diào)的是纲熏,小批量隨機(jī)梯度按元素平?的累加變量st出現(xiàn)在學(xué)習(xí)率的分?項中妆丘。因此锄俄,
- 如果?標(biāo)函數(shù)有關(guān)?變量中某個元素的偏導(dǎo)數(shù)?直都較?,那么該元素的學(xué)習(xí)率將下降較快勺拣;
- 反之奶赠,如果?標(biāo)函數(shù)有關(guān)?變量中某個元素的偏導(dǎo)數(shù)?直都較小,那么該元素的學(xué)習(xí)率將下降較慢药有。
然而毅戈,由于st?直在累加按元素平?的梯度,?變量中每個元素的學(xué)習(xí)率在迭代過程中?直在降低(或不變)愤惰。所以苇经,當(dāng)學(xué)習(xí)率在迭代早期降得較快且當(dāng)前解依然不佳時,AdaGrad算法在迭代后期由于學(xué)習(xí)率過小宦言,可能較難找到?個有?的解扇单。
7.3 RMSProp算法
當(dāng)學(xué)習(xí)率在迭代早期降得較快且當(dāng)前解依然不佳時,AdaGrad算法在迭代后期由于學(xué)習(xí)率過小奠旺,可能較難找到?個有?的解蜘澜。為了解決這?問題,RMSProp算法對AdaGrad算法做了?點小小的修改响疚。
不同于AdaGrad算法?狀態(tài)變量st是截?時間步t所有小批量隨機(jī)梯度gt按元素平?和鄙信,RMSProp算法將這些梯度按元素平?做指數(shù)加權(quán)移動平均。具體來說忿晕,給定超參數(shù)0 ≤ γ < 1装诡,RMSProp算法在時間步t > 0計算:
和AdaGrad算法?樣,RMSProp算法將?標(biāo)函數(shù)?變量中每個元素的學(xué)習(xí)率通過按元素運算重新調(diào)整践盼,然后更新?變量:
其中η是學(xué)習(xí)率鸦采,?是為了維持?jǐn)?shù)值穩(wěn)定性而添加的常數(shù),如10的-6次方宏侍。因為RMSProp算法的狀態(tài)變量st是對平?項gt ⊙ gt的指數(shù)加權(quán)移動平均赖淤,所以可以看作是最近1/(1 ? γ)個時間步的小批量隨機(jī)梯度平?項的加權(quán)平均。如此?來谅河,?變量每個元素的學(xué)習(xí)率在迭代過程中就不再?直降低(或不變)咱旱。
7.4 AdaDelta算法
除了RMSProp算法以外,另?個常?優(yōu)化算法AdaDelta算法也針對AdaGrad算法在迭代后期可能較難找到有?解的問題做了改進(jìn)绷耍。有意思的是吐限,AdaDelta算法沒有學(xué)習(xí)率這?超參數(shù)。
AdaDelta算法也像RMSProp算法?樣褂始,使?了小批量隨機(jī)梯度gt按元素平?的指數(shù)加權(quán)移動平均變量st诸典。在時間步0,它的所有元素被初始化為0崎苗。給定超參數(shù)0 ≤ ρ < 1(對應(yīng)RMSProp算法中的γ)狐粱,在時間步t > 0舀寓,同RMSProp算法?樣計算:
與RMSProp算法不同的是,AdaDelta算法還維護(hù)?個額外的狀態(tài)變量?xt肌蜻,其元素同樣在時間步0時被初始化為0互墓。我們使??xt?1來計算?變量的變化量:
最后,我們使??xt來記錄?變量變化量 按元素平?的指數(shù)加權(quán)移動平均:
可以看到蒋搜,如不考慮?的影響篡撵,AdaDelta算法與RMSProp算法的不同之處在于使? 來替代超參數(shù)η。
7.5 Adam算法
Adam算法在RMSProp算法基礎(chǔ)上對小批量隨機(jī)梯度也做了指數(shù)加權(quán)移動平均豆挽。
Adam算法使?了動量變量vt和RMSProp算法中小批量隨機(jī)梯度按元素平?的指數(shù)加權(quán)移動平均變量st育谬,并在時間步0將它們中每個元素初始化為0。給定超參數(shù)0 ≤ β1 < 1(算法作者建議設(shè)為0.9)帮哈,時間步t的動量變量vt即小批量隨機(jī)梯度gt的指數(shù)加權(quán)移動平均:
和RMSProp算法中?樣膛檀,給定超參數(shù)0 ≤ β2 < 1(算法作者建議設(shè)為0.999),將小批量隨機(jī)梯度按元素平?后的項gt ⊙ gt做指數(shù)加權(quán)移動平均得到st:
由于我們將 v0 和 s0 中的元素都初始化為 0娘侍,在時間步 t 我們得到 宿刮。將過去各時間步小批量隨機(jī)梯度的權(quán)值相加,得到 私蕾。需要注意的是,當(dāng) t 較小時胡桃,過去各時間步小批量隨機(jī)梯度權(quán)值之和會較小踩叭。例如,當(dāng)β1 = 0.9時翠胰,v1 = 0.1g1容贝。為了消除這樣的影響,對于任意時間步 t之景,我們可以將 vt 再除以 斤富,從而使過去各時間步小批量隨機(jī)梯度權(quán)值之和為1。這也叫作偏差修正锻狗。在Adam算法中满力,我們對變量 vt 和 st 均作偏差修正:
接下來,Adam算法使?以上偏差修正后的變量v?t和s?t轻纪,將模型參數(shù)中每個元素的學(xué)習(xí)率通過按元素運算重新調(diào)整:
其中η是學(xué)習(xí)率油额,?是為了維持?jǐn)?shù)值穩(wěn)定性而添加的常數(shù),如10的-8次方刻帚。和AdaGrad算法潦嘶、RMSProp算法以及AdaDelta算法?樣,?標(biāo)函數(shù)?變量中每個元素都分別擁有??的學(xué)習(xí)率崇众。最后掂僵,使? 迭代?變量:
7.6 局部最優(yōu)--鞍點問題
一個具有高維度空間的函數(shù)航厚,如果梯度為 0,那么在每個方向锰蓬,它可能是凸函數(shù)幔睬,也可能是凹函數(shù)。如果你在 2 萬維空間中互妓,那么想要得到局部最優(yōu)溪窒,所有的 2 萬個方向都需要是這樣,但發(fā)生的機(jī)率也許很小冯勉,也許是2的-20000次方澈蚌,你更有可能遇到有些方向的曲線會這樣向上彎曲,另一些方向曲線向下彎灼狰,而不是所有的都向上彎曲宛瞄,因此在高維度空間,你更可能碰到鞍點交胚。
而不會碰到局部最優(yōu)份汗。至于為什么會把一個曲面叫做鞍點,你想象一下蝴簇,就像是放在馬背上的馬鞍一樣杯活,如果這是馬,這是馬的頭熬词,這就是馬的眼睛旁钧,畫得不好請多包涵,然后你就是騎馬的人互拾,要坐在馬鞍上歪今,因此這里的這個點,導(dǎo)數(shù)為 0 的點颜矿,這個點叫做鞍點寄猩。我想那確實是你坐在馬鞍上的那個點,而這里導(dǎo)數(shù)為 0骑疆。
鞍點中的平穩(wěn)段是一個問題田篇,這樣使得學(xué)習(xí)十分緩慢,這也是像 Momentum 或是RMSprop封断,Adam 這樣的算法斯辰,能夠加速學(xué)習(xí)算法的地方。在這些情況下坡疼,更成熟的優(yōu)化算法彬呻,如 Adam 算法,能夠加快速度,讓你盡早往下走出平穩(wěn)段闸氮。
8. 如何解決訓(xùn)練樣本少的問題
- 利用預(yù)訓(xùn)練模型進(jìn)行遷移微調(diào)(fine-tuning)剪况,預(yù)訓(xùn)練模型通常在特征上擁有很好的語義表達(dá)。此時蒲跨,只需將模型在小數(shù)據(jù)集上進(jìn)行微調(diào)就能取得不錯的效果译断。CV有ImageNet,NLP有BERT等或悲。
- 數(shù)據(jù)集進(jìn)行下采樣操作孙咪,使得符合數(shù)據(jù)同分布。
- 數(shù)據(jù)集增強(qiáng)巡语、正則或者半監(jiān)督學(xué)習(xí)等方式來解決小樣本數(shù)據(jù)集的訓(xùn)練問題翎蹈。
9. 如何提升模型的穩(wěn)定性?
- 正則化(L2, L1, dropout):模型方差大男公,很可能來自于過擬合荤堪。正則化能有效的降低模型的復(fù)雜度狂魔,增加對更多分布的適應(yīng)性酌摇。
- 前停止訓(xùn)練:提前停止是指模型在驗證集上取得不錯的性能時停止訓(xùn)練。這種方式本質(zhì)和正則化是一個道理坞笙,能減少方差的同時增加的偏差踏拜。目的為了平衡訓(xùn)練集和未知數(shù)據(jù)之間在模型的表現(xiàn)差異碎赢。
- 擴(kuò)充訓(xùn)練集:正則化通過控制模型復(fù)雜度,來增加更多樣本的適應(yīng)性速梗。
- 特征選擇:過高的特征維度會使模型過擬合揩抡,減少特征維度和正則一樣可能會處理好方差問題,但是同時會增大偏差镀琉。
10. 有哪些改善模型的思路
-
**數(shù)據(jù)角度 **
增強(qiáng)數(shù)據(jù)集。無論是有監(jiān)督還是無監(jiān)督學(xué)習(xí)蕊唐,數(shù)據(jù)永遠(yuǎn)是最重要的驅(qū)動力屋摔。更多的類型數(shù)據(jù)對良好的模型能帶來更好的穩(wěn)定性和對未知數(shù)據(jù)的可預(yù)見性。對模型來說替梨,“看到過的總比沒看到的更具有判別的信心”钓试。
-
模型角度
模型的容限能力決定著模型可優(yōu)化的空間。在數(shù)據(jù)量充足的前提下副瀑,對同類型的模型弓熏,增大模型規(guī)模來提升容限無疑是最直接和有效的手段。
-
調(diào)參優(yōu)化角度
如果你知道模型的性能為什么不再提高了糠睡,那已經(jīng)向提升性能跨出了一大步挽鞠。 超參數(shù)調(diào)整本身是一個比較大的問題。一般可以包含模型初始化的配置,優(yōu)化算法的選取信认、學(xué)習(xí)率的策略以及如何配置正則和損失函數(shù)等等材义。
-
訓(xùn)練角度
在越大規(guī)模的數(shù)據(jù)集或者模型上,誠然一個好的優(yōu)化算法總能加速收斂嫁赏。但你在未探索到模型的上限之前其掂,永遠(yuǎn)不知道訓(xùn)練多久算訓(xùn)練完成。所以在改善模型上充分訓(xùn)練永遠(yuǎn)是最必要的過程潦蝇。充分訓(xùn)練的含義不僅僅只是增大訓(xùn)練輪數(shù)款熬。有效的學(xué)習(xí)率衰減和正則同樣是充分訓(xùn)練中非常必要的手段。
11. 如何提高深度學(xué)習(xí)系統(tǒng)的性能
- 提高模型的結(jié)構(gòu)攘乒。
- 改進(jìn)模型的初始化方式贤牛,保證早期梯度具有某些有益的性質(zhì),或者具備大量的稀疏性持灰,或者利用線性代數(shù)原理的優(yōu)勢盔夜。
- 擇更強(qiáng)大的學(xué)習(xí)算法。
12. 參考文獻(xiàn)
作者:@mantchs
GitHub:https://github.com/NLP-LOVE/ML-NLP
歡迎大家加入討論堤魁!共同完善此項目喂链!群號:【541954936】點擊加入