如何評估深度學習模型效果?阿里工程師這麼做

小嘰導讀:複雜的深度模型中,如果效果不好,是因爲網絡設計的欠缺?還是數據天然缺陷?是訓練代碼的bug?還是Tensorflow自身的問題?基於此,阿里工程師推出了DeepInsight深度學習質量平臺,致力於解決當前模型調試和問題定位等一系列問題。接下來,阿里巴巴高級技術專家、DeepInsight深度學習質量平臺技術負責人:孫凱(花名:路宸),帶我們一起探索。

1. 背景

機器學習訓練過程的調試、可視化以及訓練效果的評估一直是業界難題。在數據較少,模型較簡單,如LR、GBDT、SVM,超參不多的情況下,模型的可調性和可解釋性都有一定保障,那麼我們用簡單的訓練,再觀察召回/精度/AUC等指標就可以應對。

而深度學習時代,模型的複雜性遠遠超乎想象,層層嵌套的網絡結構,優化器和大量超參的選擇,特徵的連續化,一起構建了複雜的深度模型。如果效果不好,其原因是多樣的,爲了定位和解決這些問題,算法研發同學需要花費大量精力反覆嘗試,而且很可能得不到準確的答案。簡單來說,網絡模型近似於黑盒。

2. DeepInsight

通過研究,我們發現訓練和評估過程中大量中間指標與模型效果能產生關係,通過系統的分析建模張量、梯度、權重和更新量,能夠對算法調優、問題定位起到輔助決策作用。而且,通過改進AUC算法,分析ROC、PR、預估分佈等更多評估指標,能夠更全面地評估模型效果。

通過2個多月的努力,我們推出了DeepInsight平臺,致力於解決當前模型調試和問題定位等一系列問題。提交模型開始訓練之後,用戶可以通過DeepInsight平臺,能一站式查看並分析訓練過程,從訓練中間指標到預測指標,再到性能數據,一應俱全。對於訓練中明顯的問題,平臺也會高亮給予提示。未來,我們希望平臺能更好地幫助用戶發現和定位訓練中的問題,並能給予適當提示(如更改某些子網絡的最優化算法、更改學習率動量等),就如同GDB之於C++一樣。

2.1 目標

沉澱並持久化訓練數據。深度學習的數據非常寶貴,每次訓練的網絡拓撲、參數、訓練中間過程、模型評估指標都會持久存儲,方便後續人工分析和二次建模;

沉澱對模型訓練的認識,提供分析調優手段,輔助決策,同時規避各類已知問題;

利用大數據分析建模,尋找中間過程指標的關係,更好地輔助決策,我們稱這個目標爲Model on Model,即利用新的模型來分析評估深度模型;

在大數據分析建模的基礎上,嘗試對已有模型進行深度強化學習(DRL),提高深度學習調試效率。

2.2 架構

系統主要分爲四層:輸入層、解析層、評估層、輸出層;

同時包括五大組件:Tensorboard+可視化分析;TensorViewer日誌展示對比;TensorDealer集成配置;TensorTracer數據透出;TensorDissection分析調優。

2.3 進展

2.3.1 高性能可視化組件TensorBoard+

Google的TensorBoard(簡稱爲TB)是TensorFlow(簡稱爲TF)的可視化組件,可以查看深度學習的網絡結構、中間指標等。原生的TB是單機版命令行方式運行,無法多用戶使用;易用性差,每次切換日誌路徑都需要kill掉當前進程;同時性能也很差,加載工業模型數據立即卡死;指標分層混亂,幾千個指標全都羅列,無法查看;用法複雜功能較弱,不支持已展示圖形的二次數據對比,不支持X軸浮點數據展示等。

因此,我們重構了TB的核心代碼,支持GB級日誌加載和數據分層,將整個服務改造成多用戶版本,利用Docker靈活管理資源並自動回收。UI上支持了高亮自定義指標、分層展示、數據對比、日誌上傳等,具體如下:

支持在線更改TF日誌路徑:

支持圖形數據在線聚合對比:

支持X軸浮點數值類型展示:

支持圖形數據Hightlight分維度顯示:

支持手動調整前端定時刷新時間,實時展示數據:

2.3.2 集成配置日誌管理系統TensorViewer

TF的任務缺乏有效管理,用戶無法按需查看和分析數據,更無法回顧歷史數據。我們打通了TF與DeepInsight的通路,收集了所有任務的信息,用戶可以查看每次訓練的實時數據和所有歷史數據,支持多任務對比分析;同時支持一鍵跳轉到Tensorboard+,直接對當前日誌數據進行可視化展示。

2.3.3 改進TensorFlow的可視化數據透出

我們定義了一套數據透出方式,可以把所有內部數據透出成統一的Summary格式,並被Tensorboard+處理。由於PS架構沒有Master集中處理中間數據,再加上張量、梯度等指標的透出是極爲消耗資源的,所以,如何透出數據是值得深入研究的。當前我們在Worker0上透出數據,能滿足一般模型訓練的要求,未來,會研究Snapshot數據透出方案,在大規模網絡下也能取得較好效果。

當前,我們已經初步解析了Tensorflow透出的過程指標,正在這些海量指標上進行有監督和無監督的建模探索。

2.3.4 改進模型評估指標

Tensorflow自帶的AUC計算方式分桶較少,計算精度有bug,在處理大量數據時性能不夠,而且,僅僅能計算AUC,無法繪製ROC、PR等曲線。

我們改進了計算方式,引入更多桶,並提升計算效率,同時,繪製了更多新的指標。當前繪製的指標包括AUC、ROC、PR、波動率、正負樣本分桶分佈。通過觀察正負樣本的分佈,我們發現Tensorflow異步計算的缺陷,導致某些桶的樣本數量有誤差,會帶來AUC上極小波動,這個bug目前尚未解決。所有的預估指標都無縫接入DeepInsight平臺。

2.3.5 研究模型訓練中間指標

通過深入觀察和建模大規模Embedding子網絡的訓練指標,我們發現權重(偏置)值的變化可以反應出相關網絡結構是否被有效訓練。權重(偏置)值變化微弱的區域即爲訓練的“盲區”—該部分網絡沒有被訓練起來。通過觀察權重(偏置)的梯度,可以幫助我們診斷梯度彌散或梯度爆炸等問題,分析瞭解訓練該部分網絡的難易程度,有針對性地調整優化器以及學習率等設置。通過全面考察整個網絡各部分的激活以及梯度,可以幫助我們深入瞭解整個網絡前後向多路信息相互耦合、協同傳導的複雜機制,從而更有效地進行模型結構的設計調優。

對中間指標的研究會沉澱迴流到DeepInsight,在訓練指標產出後,對用戶給予提示,做到輔助決策的作用。



本文作者:孫凱

閱讀原文

本文來自雲棲社區合作伙伴“ 阿里技術”,如需轉載請聯繫原作者。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章