深度學習/NLP調參trick整理(附代碼)

2021-03-02 數據科學應用研院

最近花了一個月,調了一個文本分類的模型,調參過程中從網上學到了很多技巧,在這裡總結整理並附上相關的代碼方便大家參考。

整體分為三部分數據集,模型結構/初始化,模型超參數

一.數據集

1.數據集的選取

為了儘快調整參數和模型,應當選取小數據集進行測試和調參

二.模型結構/初始化

1.模型初始化

作用:參數初始化很重要,它決定了模型的訓練速度與是否可以躲開局部極小

1.lstm的h用orthogonal

2.relu作激活函數初始化使用He normal==kaiming_normal,tanh作激活函數初始化使用Glorot normal=Xavier normal初始化

代碼示例:

parameter=nn.Parameter(nn.init.xavier_normal_(torch.Tensor(128, 64)), requires_grad=True)

2..Dropout

作用:防止過擬合,正則化

tip:

1.dropout對於具有大量參數的全連接效果最好,而CNN的卷積層不是全連接,參數不是很多,所以效果不明顯

2.最好是在開始的層加dropout,越往後的層,越是要小心加dropout

3.在很深的網絡裡可以每層之間都加

加在哪裡:

1.NLP embedding的位置

2.全連接層的激活函數層之後

代碼示例:

dropout = nn.Dropout(p=0.5)

embedding=dropout(embedding)

3..BatchNorm

作用:

1.歸一化防止過擬合

2.加快訓練速度,改進優化

tip:

1.batch size可能會影響它的結果,BN一般要求將訓練集完全打亂,並用一個較大的batch值,否則,一個batch的數據無法較好得代表訓練集的分布,會影響模型訓練的效果

2.對初始化不敏感,可以使用大學習率

加在哪裡:

1.BN+relu

2.Sigmoid+BN

代碼示例:BN+relu+dropout

dropout = nn.Dropout(p=0.5)

mlp1 = nn.Linear(256, 128)

mlp2 = nn.Linear(128, 64)

#假設有64個類別

bn = nn.BatchNorm1d(64)

relu = nn.ReLU()

output=mlp2(dropout(relu(bn(mlp1(document_vector)))))

三.模型超參數

1.學習率lr+優化器

定義:模型每次迭代更新時的變化程度

tip:

1.學習率lr一般嘗試 1e-3 1e-4

2.優化器adam和adam+momentum比較

2.1 adam收斂快但效果沒有sgd+momentum的解好

2.2 adam不需要特別調lr,sgd需要調lr和初始化權重

2.3 建議一開始使用adam(簡單方便),實在不行再嘗試sgd

3.Irscheduler控制學習率衰減

代碼示例:

optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

scheduler =torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=32) #T_max設32或64

optimizer.zero_grad()

#梯度清0

loss.backward()

#反向傳播

optimizer.step()

#優化器更新

scheduler.step()

2.batch size

定義:每次訓練模型時使用的數據數量

tip:

1.batch size越大,每個epoch更新的次數越少,所以需要更大的學習率lr;反之,batch size越小,因為每個epoch更新次數變多,需要更小的學習率lr

2.batch size太大爆顯存時可以考慮多卡並行計算,這樣會大大提高計算速度

3.一般小於等於128

3.embedding szie

定義:輸入向量的維數

tip:

1.embedding size (64 or 128)

2.LSTM/CNN hiddensize (256 or 512)

4.參數正則化

tip:

1.pytorch中Adam已經自帶了參數正則化,需要再調整可以自己輸入指定值

代碼示例:

optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate,eps=1e-7,weight_decay=0.0001)

https://zhuanlan.zhihu.com/p/350763434?utm_source=wechat_session&utm_medium=social&utm_oi=641551032598138880八大模塊一步到位!學習企業急需的數據課程內容!課程內容貼近企業真實工作環境,培養實戰型數據科學人才!掃下圖二維碼直達課程!數據科學時代,網際網路人必備技能!學成可降低跨部門溝通成本。運用數據科學與AI技術,幫助設計更好的網際網路產品,提高業務水平。

相關焦點

  • 深度學習調參tricks總結!
    多模型融合Ensemble是論文刷結果的終極核武器,深度學習中一般有以下幾種方式不同的參數,通過cross-validation,選取最好的幾組同樣的參數,模型訓練的不同階段,即不同迭代次數的模型。不同的模型,進行線性融合. 例如RNN和傳統模型.
  • 深度學習的NLP工具
    medium.com/apache-mxnet/gluonnlp-deep-learning-toolkit-for-natural-language-processing-98e684131c8a深度學習的
  • 深度學習調參有哪些技巧?
    要不要檢查自己的代碼(永遠不要懷疑工具庫, 除非你動過代碼)? 模型解決的問題定義是不是有問題? 你對應用場景的理解是不是有錯? 不要懷疑NN的能力, 不要懷疑NN的能力, 不要懷疑NN的能力. 就我們調參狗能遇到的問題, NN沒法擬合的, 這概率是有多小?+ 你可以不這麼做, 但是等你數據準備了兩天, 結果發現有問題要重新生成的時候, 你這周時間就醬油了.
  • 【Deep Learning】深度學習調參技巧的總結
    要不要檢查自己的代碼(永遠不要懷疑工具庫, 除非你動過代碼)? 模型解決的問題定義是不是有問題? 你對應用場景的理解是不是有錯? 不要懷疑NN的能力, 不要懷疑NN的能力, 不要懷疑NN的能力. 就我們調參狗能遇到的問題, NN沒法擬合的, 這概率是有多小?+ 你可以不這麼做, 但是等你數據準備了兩天, 結果發現有問題要重新生成的時候, 你這周時間就醬油了.
  • 2020年深度學習調參技巧合集
    參考論文:https://arxiv.org/abs/1312.6120[8]dropoutdropout是指在深度學習網絡的訓練過程中,對於神經網絡單元,按照一定的概率將其暫時從網絡中丟棄。注意是「暫時」,對於隨機梯度下降來說,由於是隨機丟棄,故而每一個mini-batch都在訓練不同的網絡。
  • 乾貨 | NLP、知識圖譜教程、書籍、網站、工具...(附資源連結)
    本文整理了關於 NLP 與知識圖譜的眾多參考資源,涵蓋內容與形式非常豐富。NLP參考資源自然語言處理(Natural Language Processing)是深度學習的主要應用領域之一。1.缺點:傳統方法居多,深度學習未涉及。
  • 一文學會最常見的10種NLP處理技術(附資源&代碼)
    為什麼要寫這篇文章?對於處理NLP問題,我也研究了一段時日。(http://www.ijrat.org/downloads/icatest2015/ICATEST-2015127.pdf)論文2:這篇論文非常出色,討論了運用深度學習對變化豐富的語種做詞形還原時會遇到的問題。
  • step-by-step: 夕小瑤版神經網絡調參指南
    今天終於下定決心必須要碼一篇了,下午臨時決定寫一篇神經網絡調參的文章,嗯,就是這一篇啦。雖然現在僅僅靠調參已經在深度學習領域不是香餑餑了,但是如果連參數都不會調,那可能連肉湯都喝不到的。畢竟你有再好的idea,也需要有一個漂亮的實驗結果去支撐的對不對,參數調不好,千裡馬也容易被當成騾子。 說到調參,也不得不吐槽現在行業裡論文復現難的問題。
  • 改善深度學習訓練的trick總結|CSDN博文精選
    作者 | ZesenChen來源 | CSDN博客精選在深度學習中,同樣一個模型用不同的初始化,數據處理,batch size,學習率,優化器都能得到不同性能的參數。我根據自己參與過的比賽中經常用到的一些trick進行大致的總結,有代碼的會順便附上,方便自己以後使用。
  • step-by-step: 夕小瑤版神經網絡調參指南(上)
    今天終於下定決心必須要碼一篇了,下午臨時決定寫一篇神經網絡調參的文章,嗯,就是這一篇啦。雖然現在僅僅靠調參已經在深度學習領域不是香餑餑了,但是如果連參數都不會調,那可能連肉湯都喝不到的。畢竟你有再好的idea,也需要有一個漂亮的實驗結果去支撐的對不對,參數調不好,千裡馬也容易被當成騾子。 說到調參,也不得不吐槽現在行業裡論文復現難的問題。
  • 你有哪些 deep learning(rnn、cnn)調參的經驗?
    公眾號重磅乾貨,第一時間送達來自 | 知乎地址 | https://www.zhihu.com/question/41631631/answer/859040970編輯 | 機器學習算法與自然語言處理公眾號本文僅作學術分享,若侵權,請聯繫後臺刪文處理你有哪些deep learning(rnn、cnn)調參的經驗
  • 深度學習在NLP中的運用?從分詞、詞性到機器翻譯、對話系統
    》中,我們已經講到,2016 年是深度學習大潮衝擊 NLP 的一年,通過去年一年的努力,深度學習在 NLP 領域已經站穩了腳跟。其中,對話交互系統已經成為一個重要的應用研究領域,2017 年的自然語言對話系統,將開創一個新的人機互動時代。
  • 深度學習調參有哪些「硬核」技巧?
    ,會感覺深度學習調參就像玄學一般,有時候參數調的好,模型會快速收斂,參數沒調好,可能迭代幾次loss值就直接變成Nan了。記得剛開始研究深度學習時,做過兩個小例子。於是從那時起我就深刻的感受到參數調節在深度學習模型訓練中的重要意義。其實上述問題產生的原因也很好理解,對於參數初始化,因為我們學習的本來就是權重W與偏置b,如果初始化足夠好,直接就初始化到最優解,那都不用進行訓練了。良好的初始化,可以讓參數更接近最優解,這可以大大提高收斂速度,也可以防止落入局部極小。
  • 【乾貨】NLP中「詞袋」模型和詞嵌入模型的比較(附代碼)
    什麼情況下詞袋模型比詞嵌入更具優勢,值得大家學習和收藏!通過使用scikit-learn,只需要幾行代碼就可以構建模型。之後可以用深度學習的方法來改進它。2. 如果你的數據集很小並且上下文是特定領域的,那麼詞袋模型會比詞嵌入更有效。上下文是非常特定的領域,這意味著你無法從預先訓練好的詞嵌入模型(比如GloVe, fastText等)中找到相應的向量。
  • NLP入門+實戰必讀:一文教會你最常見的10種自然語言處理技術(附代碼)
    在這篇文章中,你將學習到最常見的10個NLP任務,以及相關資源和代碼。對於處理NLP問題,我也研究了一段時日。這期間我需要翻閱大量資料,通過研究報告,博客和同類NLP問題的賽事內容學習該領域的最新發展成果,並應對NLP處理時遇到的各類狀況。因此,我決定將這些資源集中起來,打造一個對NLP常見任務提供最新相關資源的一站式解決方案。
  • NLP、CV、語音相關AI算法工程師面試問題、代碼、簡歷模板、知識點等資源整理分享
    本資源整理了機器學習、深度學習、算法工程師等AI相關崗位面試需要知識點,常見代碼實戰(分為C/C++和python版本)、常見問題,簡歷模板、比賽/競賽相關的資源,分享給需要的朋友。    •深度學習        o面試        o資料        o代碼實戰 Pytorch        o代碼實戰 Tensorflow        o網課    •C/C++    •Python    •競賽/比賽    •簡歷模板
  • 【CMU 2017秋季】深度學習NLP課程,PPT+視頻+課程表
    PPT: Class Intro Slides (http://phontron.com/class/nn4nlp2017/assets/slides/nn4nlp-01-intro.pdfPPT: LM Slides(phontron.com/class/nn4nlp2017/assets/slides/nn4nlp-02-lm.pdf)示例代碼
  • 這六段代碼隱藏著深度學習的前世今生!
    雷鋒網AI科技評論按:本文作者Emil Wallner用六段代碼解釋了深度學習的前世今生,這六段代碼覆蓋了深度學習幾十年來的重大創新和突破,作者將所有代碼示例都上傳了FloydHub 和 GitHub,想要在FloydHub上運行代碼示例的讀者,請確保已經安裝了floyd command line tool,並將作者提供的代碼示例拷貝到本地。
  • 【NLP】競賽必備的NLP庫
    jieba是Python中的優秀的中文分詞第三方庫,通過幾行代碼就可以完成中文句子的分詞。jieba的分詞精度和性能非常優異,經常用來進行中文分詞的實驗對比。此外jieba還可以很方便的自定義詞典,使用起來非常靈活。
  • NLP、KG相關軟體、工具、資源匯總
    )。這個repo的star沒有huggingface的高,個人覺得有兩個原因,一是沒有怎麼做PR;二是這個框架代碼太解耦了,剛入門,想要在上面進行擴展,學習成本比較高。(3.15.0下載地址連結:https://pan.baidu.com/s/1wgJ1EmUCx1sf-WzBDdOP8A 提取碼:yp8c)