微軟開源自動機器學習工具 - NNI
【重磅】微軟開源自動機器學習工具 - NNI
在機器學習建模時,除了準備資料,最耗時耗力的就是嘗試各種超參組合,找到模型最佳效果的過程了。即使是對於有經驗的演算法工程師和資料科學家,有時候也很難把握其中的規律,只能多次嘗試,找到較好的超參組合。而對於初學者來說,要花更多的時間和精力。
自動機器學習這兩年成為了熱門領域,著力解決超參除錯過程的挑戰,通過超參選擇演算法和強大的算力來加速超參搜尋的過程。
NNI ( ofollow,noindex" target="_blank">Neurol Network Intelligence ) 是微軟開源的自動機器學習工具。與當前的各種自動機器學習服務或工具相比,有非常獨特的價值。本文先介紹一下 NNI 的特點,然後再後續的安裝、使用章節詳細介紹如何上手。
-
支援私有部署。雲服務中的自動機器學習直接提供了自動機器學習的服務,不僅包含了自動機器學習的功能,也包含了算力。如果團隊或個人已經有了很強的算力資源,就需要支援私有部署的自動學習工具了。
NNI 支援私有部署。整個部署也很簡單,使用 pip 即可完成安裝。
-
分散式排程。NNI 可以在單機上完成試驗,也支援以下兩種分散式排程方案:
-
超參搜尋的直接支援。當前,大部分自動機器學習服務與工具都是在某個任務上使用,比如圖片分類。這樣的好處是,普通使用者只要有標記資料,就能訓練出一個高質量的平臺,不需要任何模型訓練方面的知識。但這需要對每個訓練任務進行定製,將模型訓練的複雜性包裝起來。
與大部分現有的自動機器學習服務與工具不同,NNI 需要使用者提供訓練程式碼,並指定超參的搜尋範圍。這樣的好處在於,NNI 幾乎是通用的工具,任何訓練任務都可以使用 NNI 來進行超參搜尋。但另一方面,NNI 的通用性,也帶來了一定的使用門檻。使用 NNI 需要有基本的模型訓練的經驗。
-
相容已有程式碼。NNI 使用時,可以通過註釋的方法來進行無侵入式的改動。不會影響程式碼原先的用途。通過註釋方式支援 NNI 後,程式碼還可以單獨執行。
-
易於擴充套件。NNI 的設計上有很強的可擴充套件性。通過下面這些擴充套件性,能將系統與演算法相隔離,把系統複雜性都包裝起來。
-
Tuner 介面,可以輕鬆實現新的超參除錯演算法。研究人員可以使用 NNI 來試驗新的超參搜尋方法,比如在強化學習時,在 Tuner 中支援 off-policy 來探索比較好的超參組合,在 Trial 裡進行 on-policy 的實際驗證。也可以使用 Tuner 和訓練程式碼相配合,支援複雜的超參搜尋方法。如,實現 ENAS ,將 Tuner 作為 Control,在多個 Trial 中並行試驗。
-
Accessor 介面,可以加速引數搜尋,將表現不好的超參組合提前結束。
-
NNI 還提供了可擴充套件的叢集介面,可以定製對接的計算叢集。方便連線已經部署的計算叢集。
-
-
視覺化介面。在啟動一次超參搜尋試驗後,就可以通過視覺化介面來檢視試驗進展,並幫助超參結果,洞察更多資訊。
-
首頁,可以看到當前試驗的進展情況,搜尋引數和效果最好的一些超參組合。
-
優化進度頁面可以看到按時序排列的精度或損失值(此圖為精度)。可以看到,時間越靠後(右側),精度高的越多。這說明選擇的超參探索演算法隨著時間能找到一些好的超參空間繼續探索。
- 通過超參的分佈圖來直觀地看到哪些超參值會明顯比較好,或者看出它們之間的關聯。通過下面的顏色圖就能直觀地看到紅色(即精度較高的超參組合)線條所表達的豐富資訊。如:
- 卷積核大一些會表現較好。
- 全連線層大了不一定太好。也許是所需要的訓練時間增加了,訓練速度太慢造成的。
- 而學習率小一些(小於0.03),表現基本都不錯。
- ReLU 比 tanh 等其它啟用函式也好不少。
- ...
-
通過試驗狀態頁面,能看到每個試驗的時間長度以及具體的超參組合。
-
通過控制頁面還可以實時的增加試驗的超參組合,或者調整超參的範圍。
-
最後,再貼一次地址: https://github.com/microsoft/nni
使用方法和更多詳情,可參考 GitHub 的官網,有問題或 bug 可以直接提 Issue。