“居高臨下,勢(shì)如破竹”-參數(shù)的動(dòng)量更新方法

1.使用批訓(xùn)練的原因
在“山外有山比山高”-為什叫深度學(xué)習(xí)一文中,介紹了實(shí)際訓(xùn)練深度學(xué)習(xí)模型時(shí),可能需要將訓(xùn)練樣本隨機(jī)劃分成若干批次(Batch),每個(gè)批次包含若干樣本(Batch Size),利用這些樣本來(lái)計(jì)算梯度更新一次參數(shù).使用完所有的樣本更新參數(shù)稱為一個(gè)回合(Epoch).假設(shè)一個(gè)模型的訓(xùn)練數(shù)據(jù)包含樣本的個(gè)數(shù)是N,每個(gè)批次包含B個(gè)樣本,那么每個(gè)回合需要更新參數(shù)的次數(shù),同時(shí)也是劃分批次的個(gè)數(shù)為(N/B).下面,具體分析下訓(xùn)練中劃分批次的原因,需要先討論大批次和小批次在訓(xùn)練時(shí)間和訓(xùn)練精度上各自的優(yōu)缺點(diǎn).

?圖中左側(cè)和右側(cè)展示的是兩種極端的情況,左側(cè)是Batch Size等于N的情況,即每次更新參數(shù)取所有的樣本計(jì)算損失梯度,將這種情況稱為Full Batch;右側(cè)是Batch Size等于1的情況,即每次更新參數(shù)只取1個(gè)樣本計(jì)算損失梯度.
1.1 訓(xùn)練時(shí)間的比較分析
從理論上來(lái)看,每次更新參數(shù)使用所有的樣本計(jì)算梯度花費(fèi)的時(shí)間可能遠(yuǎn)超過(guò)每次更新參數(shù)使用一個(gè)樣本花費(fèi)的時(shí)間.但在實(shí)際訓(xùn)練的過(guò)程中,通常使用GPU進(jìn)行計(jì)算,因此在分析這個(gè)問(wèn)題時(shí),需要考慮使用GPU做并行計(jì)算的情況.
?

上圖展示了對(duì)于同樣的手寫數(shù)字辨識(shí)MNIST數(shù)據(jù)集,訓(xùn)練相同的模型時(shí),使用不同的Batch Size花費(fèi)時(shí)間的實(shí)驗(yàn)結(jié)果.左側(cè)為更新一次參數(shù)所花費(fèi)的時(shí)間,右側(cè)為完成一次完整的epoch所花費(fèi)的時(shí)間.橫軸均為Batch Size,縱軸均為訓(xùn)練花費(fèi)的時(shí)間.
由左圖可知,在使用GPU對(duì)數(shù)據(jù)做并行計(jì)算的情況下,Batch Size增大至1000對(duì)更新一次參數(shù)所花費(fèi)的時(shí)間并沒(méi)有產(chǎn)生顯著的影響;而當(dāng)Batch Size增大至10000時(shí),更新一次花費(fèi)的時(shí)間才有了顯著的變化.由于在GPU并行計(jì)算的作用下較大的Batch Size與較小的Batch Size更新一次參數(shù)花費(fèi)的時(shí)間無(wú)甚差別,但如果選擇較小的Batch Size一個(gè)Epoch中更新的次數(shù)卻增加了.所以最終呈現(xiàn)的效果確實(shí)較大的Batch Size完成一個(gè)Epoch更新所需要時(shí)間更少,如上圖右側(cè)圖所示.
綜上,在考慮并行計(jì)算處理的情況下,較大的Batch Size花費(fèi)的時(shí)間相對(duì)于較小的Batch Size反而更少.
1.2 訓(xùn)練精度的比較分析
如圖1所示,由于較大的Batch Size每次更新參數(shù)所使用的訓(xùn)練數(shù)據(jù)較多,猜測(cè)模型參數(shù)的更新比較穩(wěn)定,模型的精度比較高;而較小的Batch Size每次更新參數(shù)使用的訓(xùn)練數(shù)據(jù)較少,更新會(huì)受到噪音的影響,猜測(cè)模型參數(shù)的更新不穩(wěn)定,模型的精度比較低.但從實(shí)際訓(xùn)練的效果來(lái)看,卻呈現(xiàn)出另一種截然不同的結(jié)果.
1.2.1 數(shù)據(jù)集的劃分
在比較不同Batch Size對(duì)模型訓(xùn)練精度的影響之前,首先來(lái)了解一下訓(xùn)練模型時(shí)關(guān)于訓(xùn)練集(Train Data)、驗(yàn)證集(Validation Data)和測(cè)試集(Test Data)的劃分.在拿到樣本數(shù)據(jù)集時(shí)?,通常需要將樣本分成三份即訓(xùn)練集、驗(yàn)證集和測(cè)試集.訓(xùn)練集指用于更新模型參數(shù)的數(shù)據(jù)集,驗(yàn)證集指用于檢驗(yàn)超參數(shù)模型準(zhǔn)確率的數(shù)據(jù)集,測(cè)試集指模型真正沒(méi)有見(jiàn)到過(guò),用于考察模型泛化能力的數(shù)據(jù)集.之所以還需要使用測(cè)試集,是因?yàn)檫x擇超參數(shù)時(shí)使用了驗(yàn)證集這部分信息,如果檢驗(yàn)?zāi)P蜏?zhǔn)確性時(shí)還使用這部分信息,不能夠真實(shí)的反映模型的一般能力即泛化能力(Generalization?Ability).這好比模擬考和高考試卷肯定不一樣是相同的道理.
1.2.2 驗(yàn)證集準(zhǔn)確率比較分析

上圖展示了不同Batch Size的情況下分別在MNIST、CIFAR-10兩種圖像識(shí)別數(shù)據(jù)集準(zhǔn)確率的變化情況.由圖可知,無(wú)論是訓(xùn)練集,還是驗(yàn)證集,兩種數(shù)據(jù)集在訓(xùn)練集和驗(yàn)證集的準(zhǔn)確率隨著Batch Size的增加都呈現(xiàn)出下降的趨勢(shì).同時(shí)可以觀察到,較大的Batch Size會(huì)導(dǎo)致訓(xùn)練集準(zhǔn)確率非常差.訓(xùn)練集準(zhǔn)確率非常差的現(xiàn)象被稱為欠擬合(Under-fitting).
?

由此可知,較小的Batch Size在驗(yàn)證集的準(zhǔn)確率反而比較高.上圖給出了這種現(xiàn)象一種可能的解釋,對(duì)于較大的Batch Size,損失函數(shù)的表達(dá)式可能基本上是固定的.如上圖左側(cè),一種極端的情況取Full Batch,當(dāng)參數(shù)更新遇到“坦途”時(shí),模型就真的沒(méi)辦法更新了.而較小的Batch Size每次的訓(xùn)練更新所使用的樣本數(shù)據(jù)差異很大,損失函數(shù)的差別就很大,此刻更新當(dāng)梯度為0的點(diǎn)時(shí),對(duì)于下次更新使用的損失函數(shù)來(lái)說(shuō),梯度未必為0,這就使得參數(shù)可以繼續(xù)更新.
1.2.3 測(cè)試集準(zhǔn)確率比較分析

?上圖展示了兩種Batch Size在不同數(shù)據(jù)集和神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練集和測(cè)試集準(zhǔn)確性情況.其中SB為較小的Batch Size取值為256,LB為較大的Batch Size是整個(gè)數(shù)據(jù)集的0.1倍.由圖可知,即便是在訓(xùn)練集的準(zhǔn)確率相差不大的情況下,較小的Batch Size在測(cè)試集上的準(zhǔn)確率都明顯大于較大Batch Size在測(cè)試集上的準(zhǔn)確率.圖中,訓(xùn)練集準(zhǔn)確率較好,測(cè)試集準(zhǔn)確率較差的現(xiàn)象被稱為過(guò)擬合(Over-Fitting).

將模型參數(shù)更新時(shí)遇到的局部極小點(diǎn)分成兩種情形,一種是附近較為“寬闊”的極小點(diǎn)(Flat Minima),另外一種是附近較為“狹窄”的極小點(diǎn)(Sharp Minima),如上圖所示.對(duì)于較小的Batch Size,?由于每次更新的隨機(jī)性較大,遇到較為“狹窄”的極小點(diǎn)很容易繼續(xù)更新,往往傾向于在“寬闊”的極小點(diǎn)停止更新.反之,對(duì)于較大的Batch Size,往往傾向于在“狹窄”的極小點(diǎn)停止更新.這里假定測(cè)試集的損失函數(shù)在訓(xùn)練集的基礎(chǔ)上進(jìn)行了平移,盡管在訓(xùn)練集和測(cè)試集上損失函數(shù)相差較大,但對(duì)于“寬闊”的極小點(diǎn)來(lái)說(shuō)測(cè)試集的損失和訓(xùn)練集的損失相差不大,損失均很小,而對(duì)于“狹窄”的極小點(diǎn)來(lái)說(shuō),損失函數(shù)卻變成了另外一種情形,差距非常大.
綜上所述,對(duì)于較大的Batch Size來(lái)說(shuō),訓(xùn)練模型的時(shí)間較短,但訓(xùn)練的精度較差;對(duì)于較小的Batch Size來(lái)說(shuō),訓(xùn)練的精度較高,但訓(xùn)練的時(shí)間較長(zhǎng).因此,需要在兩種情況下做一個(gè)折中,這就是超參數(shù)Batch Size設(shè)計(jì)的原因,需要選擇合適的Batch Size既確保模型訓(xùn)練的時(shí)間較短,又確保模型的精度較高.
2.動(dòng)量梯度下降方法

?在“升維的降維打擊”-參數(shù)訓(xùn)練的駐點(diǎn)分析一文中,討論了駐點(diǎn)為鞍點(diǎn)的情形以及可以通過(guò)計(jì)算Hession矩陣的特征向量來(lái)繼續(xù)更新參數(shù),但這種方法不符合現(xiàn)實(shí)的情況,因?yàn)槟P偷膮?shù)量太大了,計(jì)算Hession矩陣花費(fèi)的時(shí)間代價(jià)會(huì)非常大.接下來(lái)尋找一種可以使參數(shù)訓(xùn)練“逃離”鞍點(diǎn)的參數(shù)更新方法.
上圖所示,對(duì)于傳統(tǒng)的梯度下降方法,可能參數(shù)更新到一個(gè)“坦途”即第2個(gè)黑色球所在的位置就不再更新了.然而兵法有云“居高臨下,勢(shì)如破竹”,這是古人發(fā)現(xiàn)了冷兵器時(shí)代的作戰(zhàn)秘密——?jiǎng)幽芎蛻T性,由此引發(fā)了進(jìn)一步的思考,對(duì)于傳統(tǒng)的梯度下降方法進(jìn)行改進(jìn).考慮現(xiàn)實(shí)的世界,假設(shè)真的放了一個(gè)鐵球從山上滾下,鐵球真的會(huì)遇到坦途就停止嗎?答案是不會(huì).
圖中紅色箭頭表示負(fù)的梯度,藍(lán)色虛線箭頭表示上一次的動(dòng)量(Movement),藍(lán)色實(shí)線箭頭表示本次的動(dòng)量.本次動(dòng)量等于上一次的動(dòng)量與負(fù)的梯度之和,為參數(shù)應(yīng)該更新的實(shí)際值.首先考慮第2個(gè)黑色球所在的位置,如果紅色箭頭足夠地小,可能球并不會(huì)往下走,但如果加上上次的動(dòng)量值,會(huì)繼續(xù)走很大一段距離.接著,考慮第三個(gè)黑色球所在的位置,此時(shí)梯度為0,如果按照之前方法,參數(shù)不會(huì)更新,但是此時(shí)動(dòng)量是存在的,它無(wú)形中會(huì)推著球繼續(xù)往前走.最后,考慮第四個(gè)黑色球的位置,此時(shí)球走到了接近山頂?shù)奈恢?按照傳統(tǒng)的梯度下降的方法,紅色的箭頭往左,它會(huì)將球往回拉,但如果此時(shí)積累的動(dòng)能足夠多,大于此時(shí)的梯度值,動(dòng)能會(huì)推著球繼續(xù)往前走,這樣,黑色球很有可能找到更小的局部極小點(diǎn).
與上圖的原理一致,當(dāng)引入動(dòng)量更新方法時(shí),參數(shù)更新由傳統(tǒng)的更新方法轉(zhuǎn)變?yōu)槭?1),式中,表示模型參數(shù),
表示動(dòng)量,
表示更新的次數(shù),
表示學(xué)習(xí)速率,
表示梯度.
?????? ? ? ? ? ?