【深度学习】算法工程师面试必考点:Dropout和R-Dropout的使用技巧
作者?|?BetterBench
出品 | 對(duì)白的算法屋
編者寄語(yǔ):
搞懂Dropout和R-Drop看這篇就夠了。
上一篇R-Drop:提升有監(jiān)督任務(wù)性能最簡(jiǎn)單的方法,很多小伙伴們都私信我說(shuō),讓我介紹一下Dropout和R-Drop之間的區(qū)別。相信大家看完這篇后,當(dāng)面試官再問(wèn)時(shí),就可以輕松應(yīng)對(duì)啦!
1、引言
在ML中存在兩類嚴(yán)重的問(wèn)題:過(guò)擬合和學(xué)習(xí)時(shí)間開(kāi)銷大
當(dāng)過(guò)擬合時(shí),得到的模型會(huì)在訓(xùn)練集上有非常好的表現(xiàn),但是對(duì)新數(shù)據(jù)的預(yù)測(cè)結(jié)果會(huì)非常的不理想。為了解決過(guò)擬合問(wèn)題,通常會(huì)采用訓(xùn)練多個(gè)模型來(lái)解決單模過(guò)擬合的問(wèn)題。但又會(huì)帶來(lái)時(shí)間開(kāi)銷大的問(wèn)題。Dropout就很好的解決了這個(gè)問(wèn)題,在單模內(nèi)防止過(guò)擬合。對(duì)于時(shí)間開(kāi)銷大的地方是梯度下降,學(xué)習(xí)率衰減可以解決梯度下降中時(shí)間開(kāi)銷的問(wèn)題。
Dropout是在訓(xùn)練過(guò)程中,隨機(jī)地忽略部分神經(jīng)元,即是在正向傳播的過(guò)程中,這些被忽略的神經(jīng)元對(duì)下游神經(jīng)元的貢獻(xiàn)暫時(shí)消失,在反向傳播時(shí),這些神經(jīng)元也不會(huì)有任何權(quán)重的更新。
2、Dropout使用技巧
(1)經(jīng)過(guò)驗(yàn)證,隱含節(jié)點(diǎn)Dropout率等于0.5的時(shí)候最佳,此時(shí)Dropout隨機(jī)生成的網(wǎng)絡(luò)結(jié)構(gòu)最多。Dropout也可以用在輸入層,作為一種添加噪聲的方法。輸入層設(shè)為更接近1時(shí),使得輸入變化不會(huì)太大,比如0.8。
(2)通常在網(wǎng)絡(luò)中Dropout率為0.2~0.5。0.2是一個(gè)很好的起點(diǎn),太低的概率產(chǎn)生的作用有限,太高的概率可能導(dǎo)致網(wǎng)絡(luò)的訓(xùn)練不充分。
(3)當(dāng)在較大的網(wǎng)絡(luò)上使用Dropout時(shí),可能會(huì)獲得更好的表現(xiàn),因?yàn)镈ropout降低了模型訓(xùn)練過(guò)程中的干擾
(4)在輸入層和隱藏層上使用Dropout。或者在網(wǎng)絡(luò)的每一層都使用Dropout能有更佳的效果。
(5)使用較高的學(xué)習(xí)率,使用學(xué)習(xí)率衰減和設(shè)置較大的動(dòng)量值,將學(xué)習(xí)率提高10~100倍,且使用0.9或0.99的動(dòng)量值。
Keras中,momentum就是動(dòng)量值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)重,對(duì)網(wǎng)絡(luò)權(quán)重大小進(jìn)行約束,例如大小為4或5的最大范數(shù)正則化(Max-norm Regularizationi)。
Keras中,通過(guò)指定Dense中的kernel_constrain=maxnorm(x)來(lái)限制網(wǎng)絡(luò)權(quán)重參考資料:Dropout: A Simple Way to Prevent Neural Networks from Overfitting
3、Dropout的拓展R-Dropout
3.1 簡(jiǎn)介
簡(jiǎn)單來(lái)說(shuō)就是模型中加入dropout,在訓(xùn)練階段的預(yù)測(cè)階段,用同樣的數(shù)據(jù)預(yù)測(cè)兩次,去追求兩次的結(jié)果盡可能接近,這種接近體現(xiàn)在損失函數(shù)上。雖然是同樣的數(shù)據(jù),但是因?yàn)槟P椭蠨ropout是隨機(jī)丟棄神經(jīng)元,會(huì)導(dǎo)致兩次丟棄的神經(jīng)元不一樣,從而預(yù)測(cè)的結(jié)果也會(huì)不一樣。R-Dropout思想就是去實(shí)現(xiàn)控制兩次預(yù)測(cè)盡量保持一致,從而去優(yōu)化模型。除了在NLP領(lǐng)域,其他的NLU、NLG、CV的分類等多種任務(wù)上都對(duì)R-Drop做了對(duì)比實(shí)驗(yàn),大部分實(shí)驗(yàn)效果都稱得上“明顯提升”。
3.2 使用方法
和普通的Dropout方法不同,有封裝的API可以一行代碼使用。R-Dropout的使用需要自定義模型的輸入和損失函數(shù)。舉例如下,參考NLP 中Pytorch 實(shí)現(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í)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載黃海廣老師《機(jī)器學(xué)習(xí)課程》視頻課黃海廣老師《機(jī)器學(xué)習(xí)課程》711頁(yè)完整版課件本站qq群851320808,加入微信群請(qǐng)掃碼:
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【深度学习】算法工程师面试必考点:Dropout和R-Dropout的使用技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 腾讯视频安卓版下载_腾讯课堂上传课程视频
- 下一篇: 【深度学习】神经网络模型特征重要性可以查