日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【深度学习】收藏|神经网络调试Checklist

發布時間:2025/3/12 pytorch 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习】收藏|神经网络调试Checklist 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


前言

作為一名每天與神經網絡訓練/測試打交道的同學,是否經常會遇到以下這幾個問題,時常懷疑人生:

  • 怎么肥事,訓練正常著呢,咋效果這么差呢?

  • 嗯。。再等等是不是loss就更低了。啊?明明loss更低了呀,為啥效果更差了?

  • 又是怎么肥事?我改了哪里,效果提升了這么多?阿哈哈哈哈收工下班。

  • 總而言之,當模型效果不如預期的時候去調試深度學習網絡是一件頭疼且繁瑣的事情,為了讓這件麻煩事情更加僅僅有條,筆者結合實際經驗簡單整理了一些checklist,方便廣大煉丹師傅掌握火候。

    1.?從最簡單的數據/模型開始

    現在開源社區做的很好,同學們用模型也十分方便,但也有相應的問題。以句子情感識別為例,新入手的同學可能一上來就調出HuggingFace/transformers代碼庫,然后一股腦BERT/Roberta啥的跑個結果,當然文檔做好的開源代碼一般都能照著跑個好結果,但改到自己數據集上往往就懵逼了,啊這?51%的二分類準確率(可能夸張了點,但如果任務要比二分類稍微復雜點,基本結果不會如預期),也太差了吧,HuggingFace/transofmrers這些模型不行啊。算了,咱換一個庫吧,再次求助github和谷歌搜索。其實可能都還不清楚數據輸入格式對不對?數據量夠不夠?評測指標含義是否清楚?Roberta的tokenizer是咋做的?模型結構是什么樣子?

    所以第1個checklist是:請盡量簡單!

    • 模型簡單

    • 數據簡單

    模型簡單:解決一個深度學習任務,最好是先自己搭建一個最簡單的神經網絡,就幾層全連接的那種。

    數據簡單:一般來說少于10個樣本做調試足夠了,一定要做過擬合測試(特別是工作的同學,拿過來前人的代碼直接改個小結構就跑全量數據訓練7-8天是可能踩坑的哦,比如某tensorflow版本 GPU embedding查表,輸入超出了vocab size維度甚至可能都不報錯哦,但cpu又會報錯)!如果你的模型無法在7、8個樣本上過擬合,要么模型參數實在太少,要么有模型有bug,要么數據有bug。為什么不建議1個樣本呢?多選幾個有代表性的輸入數據有助于直接測試出非法數據格式。但數據太多模型就很難輕松過擬合了,所以建議在10個以下,1個以上,基本ok了。

    2. loss設計是否合理?

    loss決定了模型參數如何更新,所以記得確定一下你的loss是否合理?

    • 初始loss期望值和實際值誤差是否過大,多分類例子。

      橘個????:CIFAR-10用Softmax Classifier進行10分類,那么一開始每個類別預測對的概率是0.1(隨機預測),用Softmax loss使用的是negative log probability,所以正確的loss大概是:-ln(0.1)= 2.303左右。

    • 初始loss測試,二分類例子。假設數據中有20%是標簽是0,80%的標簽是1,那么一開始的loss大概應該是-0.2ln(0.5)-0.8ln(0.5)=0.69左右,如果一開始loss比1還大,那么可能是模型初始化不均勻或者數據輸入沒有歸一化。

    • 比如多任務學習的時候,多個loss相加,那這些loss的數值是否在同一個范圍呢?

    • 數據不均衡的時候是不是可以嘗試一下focal loss呢?

    3. 網絡中間輸出檢查、網絡連接檢查

    Pytorch已經可以讓我們像寫python一樣單步debug了,所以輸入輸出shape對齊這步目前還挺好做的,基本上單步debug走一遍forward就能將網絡中間輸出shape對齊,連接也能對上,但有時候還是可能眼花看漏幾個子網絡的連接。

    所以最好再外部測試一下每個參數的梯度是否更新了,訓練前后參數是否都改變了。


    那么具體的模型中間輸出檢查、網絡連接檢查是:

    • 確認所有子網絡的輸入輸出shape對齊,并確認全部都連接上了,可能有時候定一個一個子網絡,但放一邊忘記連入主網絡啦。

    • 梯度更新是否正確?如果某個參數沒有梯度,那么是不是沒有連上?

    • 如果參數的梯度大部分是0,那么是不是學習率太小了?

    • 時刻監測一下梯度對不對/時刻進行修正。經典問題:梯度消失,梯度爆炸。

    • 參數的梯度是否真的被更新了?有時候我們會通過參數名字來設置哪些梯度更新,哪些不更新,而這個時候有木有誤操作呢?

    讀者可以參考stanford cs231n中的Gradient checking:

    https://cs231n.github.io/neural-networks-3/#gradcheck

    https://cs231n.github.io/optimization-1/#gradcompute

    另外用tensorboard來檢查一下網絡連接/輸入輸出shape和連接關系也是不錯的。

    4. 時刻關注著模型參數

    所謂模型參數也就是一堆矩陣/或者說大量的數值。如果這些數值中有些數值異常大/小,那么模型效果一般也會出現異常。一般來說,讓模型參數保持正常有這么幾個方法:

    • 調整batch size(或者說mini-batch)。

    • 統計梯度下降中,我們需要的batch size要求是:1、batch size足夠大到能讓我們在loss反向傳播時候正確估算出梯度;2、batch size足夠小到統計梯度下降(SGD)能夠一定程度上regularize我們的網絡結構。batch size太小優化困難,太大又會導致:Generalization Gap和Sharp Minima(具體參考:論文https://arxiv.org/abs/1609.04836,On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima)。

    • 調整learning rate學習率。

      學習率太小可能會導致局部最優,而太大又會導致模型無法收斂。

      具體讀者可以學習斯坦佛cs231n這個部分:

      https://cs231n.github.io/neural-networks-3/#anneal,另外關于學習率幾個常用的網站:

      Pytorch:https://pytorch.org/docs/stable/_modules/torch/optim/lr_scheduler.html

    • Tensorflow:

      https://www.tensorflow.org/api_docs/python/tf/train/exponential_decay

      Keras:

      https://keras.io/callbacks/#learningratescheduler。

    • 梯度裁剪。

      在反向傳播的時候,將參數的梯度限制在一個范圍之類:[-min, max]。對于梯度消失和梯度爆炸很有幫助。

    • Batch normalization。將每層的輸入進行歸一化,有助于解決internal covariate shift問題。當然最近transformer流行的是Layer normalization。不同normalization的區別可以學習張俊林老師關于normalization的博客。

    • Dropout。

      網絡參數隨機失活,有效防止過擬合/正則的常用手段。但是如果batch normalization和Dropout一起使用的話,建議先學習這個文章:Pitfalls of Batch Norm in TensorFlow and Sanity Checks for Training Networks 還有這個文章:Understanding the Disharmony between Dropout and Batch Normalization by Variance Shift。

    • Regularization。

      Regularization對于模型的泛化能力很重要,他對于模型的參數量和復雜度做了一個懲罰,能在不顯著增加模型bias的情況下降低模型的variance。

      但需要注意的是:

      通常情況下,我們的loss是data loss加上regularization loss,那么如果regularization loss比data loss更大更重要了,那么魔性的data loss可能就學不好了。

    • 使用什么優化器?

      一般來說SGD作為baseline就可以了,但如果想要更好的效果比如使用Adam,還有很多其他SGD的改進可以使用。

      這個部分建議閱讀這篇文章進行學習:An overview of gradient descent optimization algorithms。

    5. 詳細記錄調試/調參數過程

    可能這會兒換了一個learning rate,過會兒增大了dropout,過會兒又加了一個batch normalization,最后也不知道自己改了啥。


    一個好的辦法是是使用excel(雖然有些古老,其實還是很有效的,可以記錄各種自己想要記錄的變量)將重點改進,改進結果進行存放,另外合理使用tensorboard也是不錯。

    由于要實驗或者改的地方太多,通常就時不時忘記/不方便使用git了,而是copy一大堆名字相似的文件,這個時候,請千萬注意你的代碼結構/命名規則,當然使用好bash腳本將使用的參數,訓練過程一一存放起來也是不錯的選擇。


    總之,無論是古老的工具,先進的工具,能將實驗過程進行記錄/復現的就是好工具。具體使用什么工具因人而異,可能有些人就是不喜歡用git。。。當然也有一些別人開發好的工具可以使用啦,比如:Comet.ml

    模型對數據/超參數,甚至是隨機種子、GPU版本,tensorflow/pytorch版本,所以請盡可能記錄好每個部分,并且最好時刻可以復現。最后小時候學的控制變量法也很重要哦。

    總結

    將以上內容做一個總結:

  • 簡單模型,簡單數據,全流程走通。

  • 調整/選擇合理的loss函數/評價指標,最好檢查一下初始loss是否符合預期。

  • 查看網絡中間輸出、子網絡是否都連接上了。

  • 時刻關注模型參數。無論是優化器的改變、學習率的改變、增加正則方法或者梯度裁剪,主要作用都是在修正/更新模型參數。

  • 詳細記錄實驗過程。保持良好的訓練/測試流程和習慣,SOTA近在眼前~。

  • 參考文獻:

    https://towardsdatascience.com/checklist-for-debugging-neural-networks-d8b2a9434f21

    往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:

    總結

    以上是生活随笔為你收集整理的【深度学习】收藏|神经网络调试Checklist的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 新天堂av| 日本黄色小网站 | 日韩国产第一页 | 国产精品国产三级国产播12软件 | 欲求不满在线小早川怜子 | 久久国产精品无码一级毛片 | 三上悠亚ed2k| 国产aaaaaaa| 91狠狠干 | 96在线观看 | 欧美一卡二卡三卡四卡 | 亚洲成年网| 福利一区在线观看 | 少妇高潮淫片免费观看 | 成 人 黄 色 片 在线播放 | 一区二区三区视频免费视 | 一区二区在线观看视频 | 九九国产 | 欧美日韩国产一区二区三区在线观看 | 日本孰妇毛茸茸xxxx | 日韩在线影院 | 精品久久久久久久久久久久久久久久久久 | 国产区精品视频 | 北条麻妃av在线播放 | 另类尿喷潮videofree | 成人在线免费观看网址 | 天天干夜夜操视频 | 国产人妖网站 | 色网导航站 | 精品91久久久久久 | 欧美动态视频 | 筱田优全部av免费观看 | 国产午夜精品一区二区理论影院 | 亚洲丝袜一区 | 中文字幕日韩三级片 | 天天干夜夜看 | 国产成人久久精品麻豆二区 | 国产精品一卡二卡在线观看 | 在线视频国产一区 | 天堂中文在线官网 | 好色艳妇小说 | 狂野少女电影在线观看国语版免费 | 国产字幕侵犯亲女 | 五十路av | 久久久久无码精品国产sm果冻 | 国产精品久久久久久网站 | 电影桑叶2在线播放完整版 222aaa | 高清在线一区二区三区 | 亚洲成人a∨ | 亚洲欧洲一区二区在线观看 | 在线看国产精品 | 99视频一区 | 日本在线视频观看 | 91福利一区| 亚洲精品激情视频 | 日韩欧美理论片 | 国产免费视频 | 色爽 av| 在线日韩中文字幕 | 九九午夜 | 成人福利网站在线观看 | 国产精品黑人一区二区三区 | 超碰97免费 | 亚洲视频一二三四 | 日产欧产va高清 | 国语对白清晰刺激对白 | 亚洲欧美一区二区三区情侣bbw | 色综合久久久无码中文字幕波多 | 欧美精品久 | 国产男男gay | 九九爱国产 | 美女光屁屁露胸胸 | 久久精品国产亚洲 | 做爰视频毛片视频 | 日本精品久久久久中文字幕 | 在线免费观看av网址 | 久久波多野结衣 | 国产国产乱老熟女视频网站97 | 污污网站在线免费观看 | 日日夜夜撸啊撸 | 日本一区二区三区在线观看 | 欧美日韩一区二区三区视频 | 亚洲xxxx天美 | 日韩成人精品视频 | 久久久久久久久久久91 | 肉嫁高柳家 高清 | 96看片| 国产精品久久久久久久久久东京 | 国产成人精品女人久久久 | 就要操就要日 | 五月婷婷一区 | 97超碰站| 天堂av最新网址 | 青青草www | 中文日韩在线 | youjizz国产精品 | 亚洲欧美日韩精品色xxx | 国产日本在线 | 久久99精品久久久久久三级 |