在機器學習建模時,除了準備數據,最耗時耗力的就是嘗試各類超參組合,找到模型最佳效果的過程了。即便是對於有經驗的算法工程師和數據科學家,有時候也很難把握其中的規律,只能屢次嘗試,找到較好的超參組合。而對於初學者來講,要花更多的時間和精力。git
自動機器學習這兩年成爲了熱門領域,着力解決超參調試過程的挑戰,經過超參選擇算法和強大的算力來加速超參搜索的過程。github
NNI (Neural 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 還提供了可擴展的集羣接口,能夠定製對接的計算集羣。方便鏈接已經部署的計算集羣。
可視化界面。在啓動一次超參搜索試驗後,就能夠經過可視化界面來查看試驗進展,並幫助超參結果,洞察更多信息。
首頁,能夠看到當前試驗的進展狀況,搜索參數和效果最好的一些超參組合。
優化進度頁面能夠看到按時序排列的精度或損失值(此圖爲精度)。能夠看到,時間越靠後(右側),精度高的越多。這說明選擇的超參探索算法隨着時間能找到一些好的超參空間繼續探索。
經過試驗狀態頁面,能看到每一個試驗的時間長度以及具體的超參組合。
經過控制頁面還能夠實時的增長試驗的超參組合,或者調整超參的範圍。
最後,再貼一次地址:https://github.com/microsoft/nni
使用方法和更多詳情,可參考 GitHub 的官網,有問題或 bug 能夠直接提 Issue。