有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

機器之心報道

參與:Racoon X、張倩

集 Tabular 顯示實驗結果、自定義備忘、前端操作刪除/隱藏記錄、自動 git commit 等諸多功能於一體,這個調參神器助你高效「煉出金丹」。

「有沒有什麼可以節省大量時間的 Deep Learning 效率神器?」有人在知乎上問出了這樣一個問題。在回答區,復旦大學計算機科學技術學33院副教授邱錫鵬介紹了他們實驗室內部使用的調參利器——fitlog。

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

fitlog 是一款集成了自動版本管理和自動日誌記錄兩種功能的 Python 包,由復旦大學計算機科學技術學院自然語言處理與深度學習組的 fastNLP 團隊開發的。它可以幫助你在進行實驗時方便地保存當前的代碼、參數和結果。

根據邱錫鵬老師的介紹,fitlog 有很多非常實用的功能,如用 Tabular 顯示實驗結果;在後臺自動 git commit 代碼;超參數可視化;架構無關,TensorFlow、Pytorch 都支持……

如果實驗效果不理想,fitlog 還支持前端操作刪除、隱藏記錄,讓網友高呼「優秀」。

而且,figlog 的安裝非常簡單,使用 pip install fitlog 即可完成安裝。

GitHub 地址:https://github.com/fastnlp/fitlog

中文文檔:https://fitlog.readthedocs.io/zh/latest/

fitlog 到底有多好用

想必機器之心的讀者都不會對 TensorBoard 感到陌生,它為我們提供了一個高效調參的途徑。雖然 TensorBoard 功能強大、界面美觀,但仍無法滿足我們日常所有的「煉丹」需求。使用 fitlog 或許能夠解決一些深度學習中調參的痛點,下面我們來看一看它都有些什麼功能。

用 Tabular 顯示實驗結果

fitlog 支持利用 Tabular 顯示實驗結果,方便不同超參數之間的對比。如下圖所示,表中的每一行代表一次實驗:

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

具體來說,fitlog 可以:

支持 group 操作,方便查看某種特定數據集或參數的性能;

支持排序,最強超參數一目瞭然;

支持 column 順序、顯示自定義,拯救強迫症;

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

4. 支持針對某條實驗自定義備忘;

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

5. 支持前端加入別人實驗的性能數據,方便與 SOTA 結果對比;

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

6. 支持計算平均值、標準差;

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

7. 如果實驗結果不理想,fitlog 支持前端操作刪除、隱藏記錄;

8. 支持導出 excel、csv、txt、json 等格式,滿足分析需求;

9. 記錄 metric

機器學習不可避免地需要使用一些如 loss 之類的關鍵 metric,以便讓我們瞭解訓練過程是如何進行的。這些 metric 能夠幫助我們判斷模型是否已經過擬合或仍存在可提升的空間。並且,通過比較這些 metric 能夠幫助我們進行超參數的調整、提高模型性能。

下圖為使用 fitlog 記錄的 metric:

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

下圖為使用 TensorBoard 的 scalars 記錄示意圖:

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

從以上兩幅圖中可以看到,在記錄 metric 方面來說,fitlog 與 TensorBoard 的體驗是比較接近的。

支持在後臺自動 git commit 代碼

要想復現實驗結果,只有超參數是不夠的,所以 fitlog 支持在後臺為用戶自動 git commit 代碼(fitlog 藉助 git 進行代碼管理,但與開發者自己管理的 git 不衝突,是並行的)。如果需要回退到某次實驗的代碼,直接前端點擊「回退」就可以搞定。fitlog 甚至可以幫用戶管理隨機數種子,但 pytorch 等深度學習框架本身的隨機性無法解決。

超參數可視化

深度學習涉及大量的超參數調整。有時候,一組好的超參數組合帶來的性能提升,甚至要超過部分算法的改進。因此,記錄下這些超參數對於模型性能的影響顯得至關重要。選定一個 metric,可視化地展示出在不同超參數組合下,這個 metric 的變化趨勢,能夠極大地提高我們進行超參數搜索的效率。而 fitlog 正好可以提供你需要的可視化(下圖中的每條線代表一次實驗,最左側是 dev 上的性能)。

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

該功能類似於 TensorBoard 中的 HParams,如下圖所示:

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

架構無關,TensorFlow、PyTorch 都能用

fitlog 是架構無關的,tensorflow 和 pytorch 都能使用。除了自然語言處理,它還能用於計算機視覺任務。如果是自然語言處理任務,可以配合 fastNLP 框架一起使用,只需要增加三五行代碼便可以實現 metric、loss 的自動記錄。

有待提升的地方

作為一個輕量級的工具,fitlog 也有自身的缺點,如:

不支持保存 model 輸出的圖片,但是支持查看訓練過程中的文本輸出;

不支持除了 loss 與 metric 以外的曲線的展示。

例如,當我們需要查看輸入數據、可視化網絡層權重時,圖像的記錄與顯示會非常有幫助。下圖展示了在 TensorBoard 中顯示 Fashion-MNIST 數據集裡的部分圖片:

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

此外,可視化展示混淆矩陣(confusion matrix)對於分類模型的調參也很有幫助。混淆矩陣是機器學習中用來總結分類模型預測結果的分析手段之一,其使用矩陣的形式將真實類別與模型預測的類別進行彙總,讓我們能夠較為直觀地瞭解模型在哪些樣本的預測上表現不是很好。從下圖中可以較明顯地看出,該分類模型將 Shirts、T-Shirts 和 Pullovers 弄混了,模型的預測性能有待改進。

有沒有高效「煉丹」神器可以推薦?fastNLP祭出內部調參利器fitlog

以上功能是 fitlog 所不具備的,如果這對於你來說是必不可少的功能的話,目前來說可能還是得選擇 TensorBoard。


分享到:


相關文章: