技術干貨 | 模型優化精度、速度我全都要!MindSpore模型精度調優實戰(二)

      網友投稿 938 2022-05-30

      引言:在模型的開發過程中,精度達不到預期常常讓人頭疼。為了幫助用戶解決模型調試調優的問題,我們為MindSpore量身定做了可視化調試調優組件:MindInsight。我們還梳理了針對常見精度問題的調試調優指南,將以“MindSpore模型精度調優實戰”系列文章的形式分享出來,希望能幫助用戶輕松定位精度問題,快速優化模型精度。

      回顧MindSpore模型精度調優實戰系列點擊跳轉鏈接→技術干貨 | 更快定位精度問題!MindSpore模型精度調優實戰(一)。

      本文是系列分享的第二篇,將給出常用的精度調試調優思路。本系列分享假設您的腳本已經能夠運行并算出loss值。如果腳本還不能運行,請先參考相關報錯提示進行修改。

      遇到精度問題時,常用調試調優思路如下:

      1. 檢查代碼和超參

      2. 檢查模型結構

      3. 檢查輸入數據

      4. 檢查loss曲線

      5. 檢查精度是否達到預期

      01精度調優準備

      1.1 回顧算法設計,全面熟悉模型

      精度調優前,要先對算法設計做回顧,確保算法設計明確。如果參考論文實現模型,則應回顧論文中的全部設計細節和超參選擇情況;如果參考其它框架腳本實現模型,則應確保有一個唯一的、精度能夠達標的標桿腳本;如果是新開發的算法,也應將重要的設計細節和超參選擇明確出來。這些信息是后面檢查腳本步驟的重要依據。

      精度調優前,還要全面熟悉模型。只有熟悉了模型,才能準確理解MindInsight提供的信息,判斷是否存在問題,查找問題源頭。因此,花時間理解模型算法和結構、理解模型中算子的作用和參數的含義、理解模型所用優化器的特性等模型要素是很重要的。動手分析精度問題細節前,建議先帶著問題加深對這些模型要素的了解。

      技術干貨 | 模型優化精度、速度我全都要!MindSpore模型精度調優實戰(二)

      前,要先對算法設計做回顧,確保算法設計明確。如果參考論文實現模型,則應回顧論文中的全部設計細節和超參選擇情況;如果參考其它框架腳本實現模型,則應確保有一個唯一的、精度能夠達標的標桿腳本;如果是新開發的算法,也應將重要的設計細節和超參選擇明確出來。這些信息是后面檢查腳本步驟的重要依據。

      精度調優前,還要全面熟悉模型。只有熟悉了模型,才能準確理解MindInsight提供的信息,判斷是否存在問題,查找問題源頭。因此,花時間理解模型算法和結構、理解模型中算子的作用和參數的含義、理解模型所用優化器的特性等模型要素是很重要的。動手分析精度問題細節前,建議先帶著問題加深對這些模型要素的了解。

      1.2 熟悉工具

      MindInsight功能豐富,建議用戶簡單閱讀MindInsight教程(https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/visualization_tutorials.html),了解主要功能。定位精度問題時,建議使能summary訓練信息收集功能,在腳本中加入SummaryCollector,并使用訓練看板查看訓練過程數據,如下圖所示。Summary功能的使用指南請見 (https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/summary_record.html),訓練可視功能的使用指南請見(https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/dashboard.html)?。

      https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/debugger.html

      02檢查代碼和超參

      檢查腳本時,也要關注超參的情況,超參問題主要體現為超參取值不合理,例如

      1. 學習率設置不合理;

      2. loss_scale參數不合理;

      03檢查模型結構

      在模型結構方面,常見的問題有:

      1. 算子使用錯誤(使用的算子不適用于目標場景,如應該使用浮點除,錯誤地使用了整數除);

      2. 權重共享錯誤(共享了不應共享的權重);

      3. 權重凍結錯誤(凍結了不應凍結的權重);

      4. 節點連接錯誤(應該連接到計算圖中的block未連接);

      5. loss函數錯誤;

      注2:腳本遷移工具可以將PyTorch、TensorFlow框架下編寫的模型轉換為MindSpore腳本,請訪問教程(https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/migrate_3rd_scripts_mindconverter.html)?以了解更多信息。

      04檢查輸入數據

      1. 數據缺失值過多;

      2. 每個類別中的樣本數目不均衡;

      3. 數據中存在異常值;

      4. 數據標簽錯誤;

      5. 訓練樣本不足;

      6. 未對數據進行標準化,輸入模型的數據不在正確的范圍內;

      7. finetune和pretrain的數據處理方式不同;

      8. 訓練階段和推理階段的數據處理方式不同;

      若數據處理流水線未發現問題,可以手動檢查數據集是否存在分類不均衡、標簽匹配錯誤、缺失值過多、訓練樣本不足等問題。

      05檢查loss曲線

      很多精度問題會在網絡訓練過程中發現,常見的問題或現象有:

      1. 權重初始化不合理(例如初始值為0,初始值范圍不合理等);

      2. 權重中存在過大、過小值;

      3. 權重變化過大;

      4. 權重凍結不正確;

      5. 權重共享不正確;

      6. 激活值飽和或過弱(例如Sigmoid的輸出接近1,Relu的輸出全為0);

      7. 梯度爆炸、消失;

      8. 訓練epoch不足;

      9. 算子計算結果存在NAN、INF;

      上述這些問題或現象,有的可以通過loss表現出來,有的則難以觀察。MindInsight提供了針對性的功能,可以觀察上述現象、自動檢查問題,幫助您更快定位問題根因。例如:

      MindInsight的參數分布圖模塊可以展示模型權重隨訓練過程的變化趨勢;

      MindInsight的張量可視模塊可以展示張量的具體取值,對不同張量進行對比;

      MindInsight調試器內置了種類豐富,功能強大的檢查能力,可以檢查權重問題(例如權重不更新、權重更新過大、權重值過大/過小)、梯度問題(例如梯度消失、梯度爆炸)、激活值問題(例如激活值飽和或過弱)、張量全為0、NAN/INF、算子計算過程溢出等問題。

      調試器使用教程:

      大多數情況下,SummaryCollector會自動記錄模型的loss曲線,可以通過MindInsight的標量可視模塊查看。loss曲線能夠反映網絡訓練的動態趨勢,通過觀察loss曲線,可以得到模型是否收斂、是否過擬合等信息。

      大多數情況下,SummaryCollector會自動記錄模型參數變化情況(默認記錄5個參數),可以通過MindInsight的參數分布圖模塊查看。如果想要記錄更多參數的參數分布圖,請參考SummaryCollector的histogram_regular參數(https://www.mindspore.cn/doc/api_python/zh-CN/master/mindspore/mindspore.train.html#mindspore.train.callback.SummaryCollector),或參考HistogramSummary算子(https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/summary_record.html#summarysummarycollector)。

      張量不會被自動記錄,如果想要通過MindInsight查看張量的具體取值,請使用TensorSummary算子 (https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/summary_record.html#summarysummarycollector)。

      5.1 loss跑飛

      loss跑飛是指loss中出現了NAN、+/-INF或者特別大的值。loss跑飛一般意味著算法設計或實現存在問題。定位思路如下:

      1)檢查超參是否有不合理的特別大/特別小的取值,

      2)檢查模型結構是否實現正確,特別是檢查loss函數是否實現正確,

      3)檢查輸入數據中是否有缺失值、是否有特別大/特別小的取值。

      1)若loss值出現NAN、+/-INF,可使用“檢查張量溢出”條件添加全局監測點,定位首先出現NAN、+/-INF的算子節點,檢查算子的輸入數據是否會導致計算異常(例如除零)。若是算子輸入數據的問題,則可以針對性地加入小數值epsilon避免計算異常。

      2)若loss值出現特別大的值,可使用“檢查過大張量”條件添加全局監測點,定位首先出現大值的算子節點,檢查算子的輸入數據是否會導致計算異常。若輸入數據本身存在異常,則可以繼續向上追蹤產生該輸入數據的算子,直到定位出具體原因。

      3)若懷疑參數更新、梯度等方面存在異常,可使用“檢查權重變化過大”、“檢查梯度消失”、“檢查梯度過大”等條件設置監測點,定位到異常的權重或梯度,然后結合張量檢查視圖,逐層向上對可疑的正向算子、反向算子、優化器算子等進行檢查。

      5.2 loss收斂慢

      1)檢查超參是否有不合理的特別大/特別小的取值,特別是檢查學習率是否設置過小或過大,學習率設置過小會導致收斂速度慢,學習率設置過大會導致loss震蕩、不下降;

      2)檢查模型結構是否實現正確,特別是檢查loss函數、優化器是否實現正確;

      3)檢查輸入數據的范圍是否正常,特別是輸入數據的值是否過小

      1)可使用“檢查權重變化過小”、“檢查未變化權重”條件對可訓練(未固定)的權重進行監測,檢查權重是否變化過小。若發現權重變化過小,可進一步檢查學習率取值是否過小、優化器算法是否正確實現、梯度是否消失,并做針對性的修復。

      2)可使用“檢查梯度消失”條件對梯度進行監測,檢查是否存在梯度消失的現象。若發現梯度消失,可進一步向上檢查導致梯度消失的原因。例如,可以通過“檢查激活值范圍”條件檢查是否出現了激活值飽和、Relu輸出為0等問題。

      5.3 其它loss現象

      06檢查精度是否達到預期

      MindInsight可以為用戶記錄每次訓練的精度結果。在model.train和model.eval中使用同一個SummaryCollector實例時,會自動記錄模型評估(metrics)信息。訓練結束后,可以通過MindInsight的模型溯源模塊檢查訓練結果精度是否達標。

      6.1 檢查訓練集上的精度

      1)檢查腳本,檢查超參是否有不合理的值

      2)檢查模型結構是否實現正確

      3)檢查輸入數據是否正確

      4)檢查loss曲線的收斂結果和收斂趨勢是否存在異常

      2. 嘗試使用MindInsight溯源分析功能優化超參。溯源分析頁面會對超參的重要性進行分析,用戶應優先考慮調整重要性高的超參,從散點圖中可以觀察出超參和優化目標的關系,從而針對性地調整超參取值。

      模型解釋使用教程:

      https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/model_explaination.html

      6.2 檢查驗證集上的精度

      若訓練集精度和驗證集精度都未達到預期,則應首先參考上一節檢查訓練集精度。若訓練集精度已達到預期,但是驗證集精度未達到預期,大概率是模型出現了過擬合,處理思路如下:

      4. 適當降低模型的規模。例如減少卷積層數等。

      6.3 檢查測試集上的精度

      1. 檢查測試集評估腳本的評估邏輯有誤錯誤。特別是數據處理方式是否與訓練集一致,推理算法有誤錯誤,是否加載了正確的模型checkpoint。

      2. 檢查測試集中的數據質量,例如數據的分布范圍是否明顯同訓練集不同,數據是否存在大量的噪聲、缺失值或異常值。

      07小結

      由于相同的現象存在多個可能原因,精度問題的定位非常依賴專家經驗。希望上述定位方法和功能能夠起到良好的引導的作用,幫助你不斷積累成功經驗,成為精度調優大師。

      了解完MindSpore的關鍵技術是不是很心動呢!趕緊【點擊鏈接】并【立即報名】,即可在 ModelArts 平臺學習到一個經典案例掌握基于MindSpore的深度學習!

      MindSpore 機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【開天aPaaS】經驗即服務,看數字資產治理如何加速應用創新
      下一篇:Go語言基礎學習 - 并發
      相關文章
      久久水蜜桃亚洲av无码精品麻豆| 亚洲人成人无码网www电影首页| 亚洲国产精品一区二区成人片国内 | 国产精品久久久久久亚洲影视| 日本亚洲精品色婷婷在线影院 | 亚洲AV噜噜一区二区三区 | 亚洲综合av一区二区三区| 亚洲娇小性xxxx色| 亚洲精品国产国语| 在线观看亚洲AV每日更新无码| 亚洲国产最大av| 亚洲午夜精品一区二区麻豆| 亚洲午夜成人精品无码色欲| 亚洲一卡一卡二新区无人区| 亚洲精品无码不卡在线播放| 亚洲av成人一区二区三区在线播放| 国产精品亚洲专区无码牛牛| 成人亚洲国产精品久久| 亚洲成a人片在线观看久| 亚洲精品在线视频| 亚洲国产综合无码一区| 亚洲AV无码乱码国产麻豆| 久久精品国产亚洲av影院| 亚洲制服丝袜一区二区三区| 国产精品亚洲四区在线观看| 亚洲精品精华液一区二区| 国产成人 亚洲欧洲| 久久精品亚洲乱码伦伦中文| 亚洲精品~无码抽插| 噜噜噜亚洲色成人网站∨| 亚洲av无码久久忘忧草| 亚洲精品人成网线在线播放va| 日韩成人精品日本亚洲| 亚洲一区二区三区国产精品| 亚洲精品无码成人片久久 | 99亚洲男女激情在线观看| 亚洲一区无码精品色| 久久国产精品亚洲一区二区| 亚洲欧洲国产成人精品| 亚洲日韩乱码中文字幕| 亚洲国产中文字幕在线观看|