網(wǎng)站域名空間多少錢(qián)蘋(píng)果cms播放器
一.batch(批次)
在計(jì)算微分時(shí),不是對(duì)所有的數(shù)據(jù)算出來(lái)的Loss值做微分,而是將所有的數(shù)據(jù)分成一個(gè)一個(gè)的batch。一個(gè)batch是一個(gè)B,在更新參數(shù)時(shí),拿B的資料計(jì)算Loss,計(jì)算gradient,再更新參數(shù);另一組參數(shù)也是類(lèi)似,拿B的資料計(jì)算Loss,計(jì)算gradient,再更新參數(shù),以此類(lèi)推。不會(huì)將所有的數(shù)據(jù)計(jì)算loss,而是將資料分成一個(gè)一個(gè)的batch。
- 所有的batch計(jì)算過(guò)一遍就叫做一個(gè)epoch。在每一個(gè)epoch開(kāi)始前,會(huì)分一次batch。
- 每一個(gè)epoch分的batch都不一樣。在把所有的資料分成一個(gè)一個(gè)的batch時(shí),這個(gè)過(guò)程就叫做Shuffle。
Small batch v.s. Large Batch
假設(shè)現(xiàn)在有20個(gè)訓(xùn)練資料,左邊是沒(méi)有用batch的(batch size就是全部的訓(xùn)練資料)、右邊的batch size為1。左邊的需要把所有的資料看過(guò)一次,才能計(jì)算loss值,計(jì)算gradient,然后更新一次參數(shù)。右邊的更新一次參數(shù)只要一個(gè)B的batch資料,在一個(gè)epoch里面,就需要更新20次參數(shù)。
- 比較1:Speed for one update:Large Batch的蓄力時(shí)間較長(zhǎng),因?yàn)樾枰阉械馁Y料都看過(guò)一遍。Small batch的蓄力時(shí)間短,每看到一筆資料就需要更新一次參數(shù)。
- 比較2:Gredient:Large batch比較穩(wěn), Small Batch的就比較noisy。
- ?比較3:Time for one epoch:batch size 比較大的訓(xùn)練資料計(jì)算loss、gradient、更新參數(shù)的時(shí)間不一定比batch size 小的時(shí)間長(zhǎng)
?以識(shí)別數(shù)字為例,在batch size為1-1000時(shí)相差不大(GPU可以做平行運(yùn)算,所以計(jì)算1000個(gè)資料的時(shí)間并不是1個(gè)資料的1000倍),但是batch size超過(guò)一定界限,計(jì)算的時(shí)間會(huì)隨著batch size的增大而增大。
?因?yàn)橛?strong>平行運(yùn)算的能力,當(dāng) batch size 小的時(shí)候,跑完一個(gè)epoch花費(fèi)的時(shí)間比大的batch size的多。例如:batch size為1的時(shí)候與batch size為1000的時(shí)候時(shí)間差不多,但是,batch size為1的時(shí)候跑完一個(gè)epoch的時(shí)間為350+,batch size為1000的時(shí)候跑完一個(gè)epoch的時(shí)間只要20。這個(gè)時(shí)候 batch size 為1000的時(shí)間更短,更有效率。所以考慮平行運(yùn)算時(shí),batch size比較大的一個(gè)epoch花費(fèi)的時(shí)間更少。
?綜上來(lái)說(shuō),batch size 大的似乎更好,比較batch size 大小的好壞還需要考慮到穩(wěn)定還是陡,比較陡的gradient反而可以幫助訓(xùn)練。
例如:左邊為MNISTY的影像辨識(shí)例子、右邊為CIFAR-10的影像辨識(shí)例子。橫軸為batch size的大小,縱軸為正確率。batch size越大,validation上的結(jié)果就越差。在training上也是如此。這是optimization不理想所導(dǎo)致的問(wèn)題。
- ?比較4:optimization:小的batch size更有利于訓(xùn)練
因?yàn)槿绻莊ull batch的話(huà),沿著loss function更新參數(shù),遇到local minima、saddle point時(shí)就無(wú)法用gradient decent的方法更新了。
如果是small batch的話(huà),因?yàn)槊看斡靡粋€(gè)batch來(lái)計(jì)算loss,根據(jù)loss來(lái)更新參數(shù)。每次更新參數(shù)用到的loss function都是有差異的,第一次用L1、第二次用L2。假設(shè)第一次更新時(shí)用L1計(jì)算gradient為0,這就卡住了。但是L2的gradient不一定為0,可以繼續(xù)更新,所以比較陡的反而更有利于訓(xùn)練。
- ?比較5:Generalization:小的batch size對(duì)測(cè)試資料有幫助:
假8
為什么 小的batch size對(duì)測(cè)試資料有幫助呢?
?在Training loss上可能有很多的local minima,loss值趨近于0,如果一個(gè)local minima兩邊斜率很大,則這個(gè)local minima為sharp minima;如果一個(gè)local minima兩邊斜率很小,則這個(gè)local minima為flat minima。在Testing loss上,flat minima在Training loss和Testing loss上不會(huì)差很多;但是sharp minima在Training loss和Testing loss上會(huì)差很多。大的batch size會(huì)更容易得出sharp minima;小的batch size會(huì)更容易得出flat minima。
總結(jié)
在沒(méi)有平行運(yùn)算的情況下,Small Batch比 Large Batch更有效率;
在有平行運(yùn)算的情況下,Small Batch與Large Batch運(yùn)算時(shí)間沒(méi)有太大差距,除非大的超出一定界限;
在一個(gè)epoch時(shí)間內(nèi),Large Batch比Small Batch更快,Large Batch更有效率;
Small Batch比較陡,Large Batch比較穩(wěn)定;
比較noisy的batch size比比較stable 的batch size在訓(xùn)練和測(cè)試時(shí)占有優(yōu)勢(shì)。
2. momentum
Gradient Descent:
計(jì)算Gradient,沿著Gradient的反方向更新參數(shù);再計(jì)算下一個(gè)位置的Gradient,沿著Gradient的反方向更新參數(shù),以此類(lèi)推。
?Gradient Descent + Momentum:
不是沿著Gradient的反方向更新參數(shù),而是沿著Gradient的反方向加上前一步移動(dòng)的方向的結(jié)果來(lái)更新參數(shù)。初始參數(shù)為 θ ,前一步的movement為0,計(jì)算 θ 的gradient,移動(dòng)的方向?yàn)間radient的方向加上前一步的方向,以此類(lèi)推。