调参经验
1. 假設(shè)一次訓(xùn)練有10個(gè)epoch,可能會(huì)出現(xiàn)以下情況:訓(xùn)練好一次模型去測(cè)試,測(cè)試的準(zhǔn)確率為0.92。又去訓(xùn)練一次模型(不是在之前訓(xùn)練模型的基礎(chǔ)上,而是單獨(dú)進(jìn)行一次訓(xùn)練),模型訓(xùn)練好去測(cè)試,測(cè)試準(zhǔn)確率為0.93或者0.89。如果我改變一個(gè)模型的參數(shù),比如調(diào)小dropout的值,可能訓(xùn)練出來(lái)的模型去測(cè)試準(zhǔn)確率為0.94,這不能就得出調(diào)小dropout就能很明顯提升模型的效果。因?yàn)閱为?dú)訓(xùn)練一次模型,也可能達(dá)到這個(gè)效果。造成這種情況出現(xiàn)的原因就是數(shù)據(jù)量太小,數(shù)據(jù)量小,可能兩次訓(xùn)練的模型去測(cè)試的準(zhǔn)確率變化比較大。如果數(shù)據(jù)量大,兩次訓(xùn)練的模型去測(cè)試準(zhǔn)確率變化可能在0.0000幾或者0.000幾,但改變參數(shù)可能就是0.00幾,這樣就很容易看出調(diào)整參數(shù)是否能提高準(zhǔn)確率了。解決方法就是可以在不改變參數(shù)前多訓(xùn)練幾次,一般會(huì)在一個(gè)范圍波動(dòng),改變參數(shù)也多訓(xùn)練幾次,這樣如果整個(gè)范圍相較于之前都升高就表明調(diào)參確實(shí)提高了準(zhǔn)確率。
2.?? learning rate影響的是
3.高學(xué)習(xí)率有利于加快迭代更新的速度,但不利于找到局部/全局最優(yōu)點(diǎn);低學(xué)習(xí)率有利于找到局部最優(yōu)點(diǎn),但可能使得模型無(wú)法跳出局部最優(yōu)而無(wú)法獲取全局最優(yōu);一般先利用較大的學(xué)習(xí)率尋找全局近似最優(yōu),再利用較小的學(xué)習(xí)率尋找局部最優(yōu),以期望獲取模型的全局最優(yōu)解。實(shí)際中,使用驗(yàn)證集是獲得合適LR的有效手段。開始訓(xùn)練時(shí),LR通常設(shè)為0.1(這個(gè)值有待驗(yàn)證)。在實(shí)踐中,當(dāng)你觀察到在驗(yàn)證集上的loss或者準(zhǔn)確率不在變化時(shí),將LR除以2或5后繼續(xù)跑。
4.關(guān)于學(xué)習(xí)率的大小 * 太大: loss爆炸, 或者nan
* 太小: 半天loss沒(méi)反映(但是, LR需要降低的情況也是這樣, 這里可視化網(wǎng)絡(luò)中間結(jié)果, 不是weights, 有效果, 倆者可視化結(jié)果是不一樣的, 太小的話中間結(jié)果有點(diǎn)水波紋或者噪點(diǎn)的樣子, 因?yàn)閒ilter學(xué)習(xí)太慢 的原因, 試過(guò)就會(huì)知道很明顯)
* 需要進(jìn)一步降低了: loss在當(dāng)前LR下一路降了下來(lái), 但是半天不再降了.
5.數(shù)據(jù)庫(kù)太小一般不會(huì)帶來(lái)不收斂的問(wèn)題,只要你一直在train總會(huì)收斂(rp問(wèn)題跑飛了不算)。反而不收斂一般是由于樣本的信息量太大導(dǎo)致網(wǎng)絡(luò)不足以fit住整個(gè)樣本空間。樣本少只可能帶來(lái)過(guò)擬合的問(wèn)題,你看下你的training set上的loss收斂了嗎?如果只是validate set上不收斂那就說(shuō)明overfitting了,這時(shí)候就要考慮各種anti-overfit的trick了,如dropout,SGD,增大minibatch的數(shù)量,減少fc層的節(jié)點(diǎn)數(shù)量,momentun, finetune等。(我自己覺(jué)得,train不是一定收斂的,但樣本信息量太大導(dǎo)致網(wǎng)絡(luò)不足以fit住整個(gè)樣本空間是造成不收斂的一種情況)
?? learning rate設(shè)大了會(huì)帶來(lái)跑飛(loss突然一直很大)的問(wèn)題,這個(gè)是新手最常見的情況——為啥網(wǎng)絡(luò)跑著跑著看著要收斂了結(jié)果突然飛了呢?可能性最大的原因是你用了relu作為激活函數(shù)的同時(shí)使用了softmax或者帶有exp的函數(shù)做分類層的loss函數(shù)。當(dāng)某一次訓(xùn)練傳到最后一層的時(shí)候,某一節(jié)點(diǎn)激活過(guò)度(比如100),那么exp(100)=Inf,發(fā)生溢出,bp后所有的weight會(huì)變成NAN,然后從此之后weight就會(huì)一直保持NAN,于是loss就飛起來(lái)。
5.
轉(zhuǎn)載于:https://www.cnblogs.com/ymjyqsx/p/6433104.html
總結(jié)
- 上一篇: git学习小结(未完待续)
- 下一篇: 项目 cmdb(一)