當我自學機器學習時,經(jīng)常試著根據(jù)項目教程編寫代碼,我會按照作者概述的步驟來做。但有時候,我的模型的表現(xiàn)會比教程作者的模型要差。也許您也遇到過類似的情況。或者,您只是從GitHub拉取了同事的代碼。而您模型的性能指標與同事的報告聲稱的性能指標不一樣。所以做同樣的事情并不能保證同樣的結(jié)果,是不是?這是機器學習中一個普遍存在的問題:可再現(xiàn)性難題。
不用說,機器學習模型只有在別人可以復制試驗并再現(xiàn)結(jié)果時才有用。從典型的“它在我的機器上工作”問題到機器學習模型訓練方式的細微變化,可再現(xiàn)性存在幾個挑戰(zhàn)。
我們在本文中將仔細研究機器學習中可再現(xiàn)性的挑戰(zhàn)和重要性,以及數(shù)據(jù)管理、版本控制和實驗跟蹤在解決機器學習可再現(xiàn)性挑戰(zhàn)中的作用。
什么是機器學習背景下的可再現(xiàn)性?
不妨看看如何在機器學習的背景下最準確地定義可再現(xiàn)性。
假設一個現(xiàn)有的項目針對給定的數(shù)據(jù)集使用特定的機器學習算法。有了數(shù)據(jù)集和算法,我們應該能夠運行算法(想運行多少次就運行多少次),并在每次運行時再現(xiàn)(或復制)結(jié)果。
但機器學習中的可再現(xiàn)性并非沒有挑戰(zhàn)。我們已經(jīng)討論了其中幾個挑戰(zhàn),不妨在下一節(jié)中更詳細地討論它們。
機器學習中可再現(xiàn)性的挑戰(zhàn)
任何應用環(huán)境都存在可靠性和可維護性等挑戰(zhàn)。然而在機器學習應用中,還存在額外的挑戰(zhàn)。
當我們談論機器學習應用時,我們通常指端到端機器學習管道,它們通常包括以下步驟:
由于其中一個或多個步驟的變更,可能會出現(xiàn)可再現(xiàn)性問題。大多數(shù)變更都可以記錄在下面其中一種變更中:
環(huán)境變更
代碼變更
數(shù)據(jù)變更
不妨看看這每一種變更在如何阻礙可再現(xiàn)性。
環(huán)境變更
Python和基于Python的機器學習框架使得開發(fā)機器學習應用程序變得輕而易舉。然而,Python中的依賴項管理(管理某個項目所需的不同庫和版本)卻并非易事。一個小小的變更就足以破壞代碼,比如使用不同版本的庫和使用被廢棄的參數(shù)的函數(shù)調(diào)用。
這還包括操作系統(tǒng)的選擇。存在與硬件相關的挑戰(zhàn),比如GPU浮點精度方面的差異等。
代碼變更
從清洗輸入數(shù)據(jù)集以確定哪些樣本進入訓練數(shù)據(jù)集,到訓練神經(jīng)網(wǎng)絡時隨機初始化權(quán)重,隨機性在機器學習中扮演著重要作用。
設置不同的隨機種子可能導致全然不同的結(jié)果。對于我們訓練的每個模型,都有一組超參數(shù)。因此,調(diào)整一個或多個超參數(shù)也可能導致不同的結(jié)果。
數(shù)據(jù)變更
即便使用相同的數(shù)據(jù)集,我們也看到超參數(shù)值和隨機性的不一致性如何使復制結(jié)果變得困難。因此,當數(shù)據(jù)發(fā)生變化(數(shù)據(jù)分布變化、記錄子集的修改或丟棄某些樣本)時,顯然很難再現(xiàn)結(jié)果。
總之,當我們試圖復制機器學習模型的結(jié)果時,哪怕是代碼、所用的數(shù)據(jù)集和機器學習模型運行的環(huán)境出現(xiàn)小小的變化,也會阻止我們獲得與原始模型相同的結(jié)果。
如何應對可再現(xiàn)性挑戰(zhàn)?
現(xiàn)在我們看看如何應對這些挑戰(zhàn)。
數(shù)據(jù)管理
我們發(fā)現(xiàn)可再現(xiàn)性最明顯的挑戰(zhàn)之一是數(shù)據(jù)方面。有某些數(shù)據(jù)管理方法(比如對數(shù)據(jù)集進行版本控制),這樣我們就可以跟蹤數(shù)據(jù)集變更,并存儲數(shù)據(jù)集方面的有用元數(shù)據(jù)。
版本控制
應該使用Git之類的版本控制系統(tǒng)來跟蹤代碼的任何變更。
在現(xiàn)代軟件開發(fā)中,您可能遇到過CI/CD管道,它們可以大大簡化以下操作,并大大提高效率:跟蹤變更、測試新變更,并將它們推送到生產(chǎn)環(huán)境。
在其他軟件應用程序中,跟蹤代碼的變更簡單直觀。然而在機器學習中,代碼變更還可能需要對所用的算法和超參數(shù)值進行更改。即使對于簡單的模型,我們可以嘗試的可能性的數(shù)量也非常多。這就是實驗跟蹤的意義所在。
實驗跟蹤
構(gòu)建機器學習應用程序等同于進行廣泛的試驗。從算法到超參數(shù),我們嘗試不同的算法和超參數(shù)值,因此跟蹤這些試驗很重要。
跟蹤機器學習試驗包括如下:
記錄超參數(shù)掃描
記錄模型的性能指標和模型檢查點
存儲關于數(shù)據(jù)集和模型的實用元數(shù)據(jù)
用于機器學習實驗跟蹤和數(shù)據(jù)管理等操作的工具
如前所述,控制數(shù)據(jù)集版本、跟蹤代碼變更以及跟蹤機器學習實驗都可以復制機器學習應用程序。下面幾個工具可以幫助您構(gòu)建可再現(xiàn)的機器學習管道:
權(quán)重和偏誤
MLflow
Neptune.ai
Comet ML
DVC
結(jié)語
綜上所述,我們已回顧了機器學習中可再現(xiàn)性的重要性和挑戰(zhàn)。我們討論了數(shù)據(jù)和模型版本控制以及實驗跟蹤等方法。此外,我們還列出了一些可以用于實驗跟蹤和更有效的數(shù)據(jù)管理的工具。