【深度学习】算法工程师面试必考点:Dropout和R-Dropout的使用技巧
作者?|?BetterBench
出品 | 對白的算法屋
編者寄語:
搞懂Dropout和R-Drop看這篇就夠了。
上一篇R-Drop:提升有監(jiān)督任務(wù)性能最簡單的方法,很多小伙伴們都私信我說,讓我介紹一下Dropout和R-Drop之間的區(qū)別。相信大家看完這篇后,當(dāng)面試官再問時,就可以輕松應(yīng)對啦!
1、引言
在ML中存在兩類嚴(yán)重的問題:過擬合和學(xué)習(xí)時間開銷大
當(dāng)過擬合時,得到的模型會在訓(xùn)練集上有非常好的表現(xiàn),但是對新數(shù)據(jù)的預(yù)測結(jié)果會非常的不理想。為了解決過擬合問題,通常會采用訓(xùn)練多個模型來解決單模過擬合的問題。但又會帶來時間開銷大的問題。Dropout就很好的解決了這個問題,在單模內(nèi)防止過擬合。對于時間開銷大的地方是梯度下降,學(xué)習(xí)率衰減可以解決梯度下降中時間開銷的問題。
Dropout是在訓(xùn)練過程中,隨機(jī)地忽略部分神經(jīng)元,即是在正向傳播的過程中,這些被忽略的神經(jīng)元對下游神經(jīng)元的貢獻(xiàn)暫時消失,在反向傳播時,這些神經(jīng)元也不會有任何權(quán)重的更新。
2、Dropout使用技巧
(1)經(jīng)過驗證,隱含節(jié)點Dropout率等于0.5的時候最佳,此時Dropout隨機(jī)生成的網(wǎng)絡(luò)結(jié)構(gòu)最多。Dropout也可以用在輸入層,作為一種添加噪聲的方法。輸入層設(shè)為更接近1時,使得輸入變化不會太大,比如0.8。
(2)通常在網(wǎng)絡(luò)中Dropout率為0.2~0.5。0.2是一個很好的起點,太低的概率產(chǎn)生的作用有限,太高的概率可能導(dǎo)致網(wǎng)絡(luò)的訓(xùn)練不充分。
(3)當(dāng)在較大的網(wǎng)絡(luò)上使用Dropout時,可能會獲得更好的表現(xiàn),因為Dropout降低了模型訓(xùn)練過程中的干擾
(4)在輸入層和隱藏層上使用Dropout。或者在網(wǎng)絡(luò)的每一層都使用Dropout能有更佳的效果。
(5)使用較高的學(xué)習(xí)率,使用學(xué)習(xí)率衰減和設(shè)置較大的動量值,將學(xué)習(xí)率提高10~100倍,且使用0.9或0.99的動量值。
Keras中,momentum就是動量值sgd = SGD(lr=0.1,momentum=0.8,decay=0.0,nesterov=False)
(6)限制網(wǎng)絡(luò)權(quán)重的大小,打的學(xué)習(xí)率可能導(dǎo)致非常大的網(wǎng)絡(luò)權(quán)重,對網(wǎng)絡(luò)權(quán)重大小進(jìn)行約束,例如大小為4或5的最大范數(shù)正則化(Max-norm Regularizationi)。
Keras中,通過指定Dense中的kernel_constrain=maxnorm(x)來限制網(wǎng)絡(luò)權(quán)重參考資料:Dropout: A Simple Way to Prevent Neural Networks from Overfitting
3、Dropout的拓展R-Dropout
3.1 簡介
簡單來說就是模型中加入dropout,在訓(xùn)練階段的預(yù)測階段,用同樣的數(shù)據(jù)預(yù)測兩次,去追求兩次的結(jié)果盡可能接近,這種接近體現(xiàn)在損失函數(shù)上。雖然是同樣的數(shù)據(jù),但是因為模型中Dropout是隨機(jī)丟棄神經(jīng)元,會導(dǎo)致兩次丟棄的神經(jīng)元不一樣,從而預(yù)測的結(jié)果也會不一樣。R-Dropout思想就是去實現(xiàn)控制兩次預(yù)測盡量保持一致,從而去優(yōu)化模型。除了在NLP領(lǐng)域,其他的NLU、NLG、CV的分類等多種任務(wù)上都對R-Drop做了對比實驗,大部分實驗效果都稱得上“明顯提升”。
3.2 使用方法
和普通的Dropout方法不同,有封裝的API可以一行代碼使用。R-Dropout的使用需要自定義模型的輸入和損失函數(shù)。舉例如下,參考NLP 中Pytorch 實現(xiàn)R-Dropout
# define your task model, which outputs the classifier logits model = TaskModel()def compute_kl_loss(self, p, q pad_mask=None):p_loss = F.kl_div(F.log_softmax(p, dim=-1), F.softmax(q, dim=-1), reduction='none')q_loss = F.kl_div(F.log_softmax(q, dim=-1), F.softmax(p, dim=-1), reduction='none')# pad_mask is for seq-level tasksif pad_mask is not None:p_loss.masked_fill_(pad_mask, 0.)q_loss.masked_fill_(pad_mask, 0.)# You can choose whether to use function "sum" and "mean" depending on your taskp_loss = p_loss.sum()q_loss = q_loss.sum()loss = (p_loss + q_loss) / 2return loss# keep dropout and forward twice logits = model(x)logits2 = model(x)# cross entropy loss for classifier ce_loss = 0.5 * (cross_entropy_loss(logits, label) + cross_entropy_loss(logits2, label))kl_loss = compute_kl_loss(logits, logits2)# carefully choose hyper-parameters loss = ce_loss + α * kl_loss往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載黃海廣老師《機(jī)器學(xué)習(xí)課程》視頻課黃海廣老師《機(jī)器學(xué)習(xí)課程》711頁完整版課件本站qq群851320808,加入微信群請掃碼:
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【深度学习】算法工程师面试必考点:Dropout和R-Dropout的使用技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯视频安卓版下载_腾讯课堂上传课程视频
- 下一篇: 使用struts2的 下载