近日,Facebook開源了兩款基于PyTorch的實驗框架Ax和BoTorch。Ax是一個面向自適應實驗的理解、管理、部署和自動化任務的通用平臺,BoTorch則主要面向貝葉斯優化任務。這兩個框架旨在簡化PyTorch應用中的自適應實驗流程。
在現代機器學習應用中,對實驗到生產的流程進行簡化是最難實現的任務之一。在已經市場化深度學習框架中,Facebook的PyTorch因其高度靈活性成為數據科學界的最愛,PyTorch能夠實現快速建模和實驗。但是,深度學習應用中的許多實驗面臨的挑戰已經超出了特定框架的能力范圍。
對于數據科學家來說,在對不同的模型或超參數配置進行評估時,通常會受到實驗所需的昂貴計算資源和時間的障礙。近日,Facebook開源了兩個新框架,旨在簡化PyTorch應用程序中的自適應實驗流程:
Ax:一個易訪問的通用平臺,面向自適應實驗的理解、管理、部署和自動化。
BoTorch:基于PyTorch,是一個靈活的現代庫,用于貝葉斯優化——一種高效的全局優化的概率方法。
這兩種工具的目標是降低PyTorch開發人員進行快速實驗的入門門檻,以便為特定問題找到最佳模型。 Ax和BoTorch都基于概率模型,簡化了機器學習問題中給定環境下的探索流程。不過兩個框架針對的是實驗問題空間的不同維度。
BoTorch
BoTorch是一個基于PyTorch構建的貝葉斯優化庫。貝葉斯優化的目標是在有限的資源內找到問題的最優解。通常,貝葉斯優化用于解決黑盒優化問題,比如機器學習算法的超參數優化,A / B測試以及許多其他科學和工程問題。
貝葉斯優化問題試圖在無法獲取函數形式的情況下對一些昂貴的評估黑盒函數f進行最大化。具體來說,優化技術在一系列測試點處對f進行評估,希望在少量評估之后確定接近最優值。
為了實現這一目標,需要一種方法來推斷關于f尚未評估的點的概念。在貝葉斯優化中,這被稱為替代模型。重要的是,替代模型應該能夠以點x的函數值f(x)的后驗分布的形式對預測的不確定性進行量化。
BoTorch是Facebook在貝葉斯優化基礎上大量工作的成果,并將這些技術集成到PyTorch編程模型中。從概念上講,與替代優化方法相比,BoTorch具備一系列獨特優勢。
基于PyTorch:BoTorch構建于PyTorch框架基礎上,可以利用本機功能,如自動差異化,使用獨立于設備的代碼,支持高度并行化的現代化硬件(如GPU),有助于交互式計算圖的動態開發。
最先進的建模:BoTorch支持GPyTorch中的尖端概率建模,包括多任務高斯過程(GP),可擴展GP,深度內核學習,深度GP和近似推理等。
提高開發人員效率:BoTorch提供了簡單的編程模型,用于對貝葉斯優化的基本問題進行組合。具體而言,BoTorch依賴于基于蒙特卡羅模型的采集函數,使得新思路的實現變得更加簡單,無需對基礎模型做出限制性的假設。
高并行性帶來的可擴展性:BoTorch編程模型可以優化并發性和并行性任務進行批量計算,提高了大型基礎架構的可擴展性。
BoTorch的設計可以讓PyTorch開發人員更改、交換或重新排列深度神經網絡架構的不同組件,無需重建整個圖形來重新訓練整個模型。顯然,構建低級貝葉斯優化組件是一項需要深度專業知識的任務。為了應對這一挑戰,Facebook決定將BoTorch與另一個為深度學習實驗提供簡單編程模型的項目進行集成:
這就是Ax。
從概念上講,Ax是一個優化實驗平臺,比如A / B測試,模擬或機器學習模型實驗等。Ax提供了一個易用的高級API,可以和BoTorch進行連接,使開發人員能夠快速建模和運行實驗。 Ax和BoTorch之間的關系如下圖所示。使用BoTorch可以實現新的優化算法,而Ax則提供了一個簡單的API,用于配置調度、查詢數據和評估結果。
從優化的角度來看,Ax可以使用多臂老虎機優化處理離散型配置(比如A / B測試的變體),還可以使用貝葉斯優化的處理連續配置(比如整數或浮點)。Ax提供了一個高度可擴展的框架,允許開發人員為PyTorch模型定制各種實驗。從編程模型的角度來看,Ax提供了三個主要API:
循環API:用于同步優化循環,可以立即評估試驗。使用此API可以在一次調用中執行優化,一旦優化完成,就可以使用實驗內省。
服務API:可用作參數調整應用程序的輕量級服務,可以并行評估試驗以及異步獲得數據。
開發者API:主要供數據科學家,機器學習工程師和研究人員臨時使用。提供大量定制化和內省功能,推薦打算使用Ax來優化A / B測試的開發者使用。
從編程模型的角度來看,循環 API提供了最大程度的流程簡化,而開發者API實現了最高級別的自定義功能。使用Loop API進行無約束合成Branin函數代碼如下:
from ax import optimizefrom ax.utils.measurement.synthetic_functions import braninbest_parameters, values, experiment, model = optimize( parameters=[ { "name": "x1", "type": "range", "bounds": [-5.0, 10.0], }, { "name": "x2", "type": "range", "bounds": [0.0, 10.0], }, ], evaluation_function=lambda p: branin(p["x1"], p["x2"]), minimize=True,)
而開發者API則需要對Ax框架組件進行更深度的操控:
from ax import *branin_search_space = SearchSpace( parameters=[ RangeParameter( name="x1", parameter_type=ParameterType.FLOAT, lower=-5, upper=10 ), RangeParameter( name="x2", parameter_type=ParameterType.FLOAT, lower=0, upper=15 ), ])exp = SimpleExperiment( name="test_branin", search_space=branin_search_space, evaluation_function=lambda p: branin(p["x1"], p["x2"]), objective_name="branin", minimize=True,)sobol = Models.SOBOL(exp.search_space)for i in range(5): exp.new_trial(generator_run=sobol.gen(1))best_arm = Nonefor i in range(15): gpei = Models.GPEI(experiment=exp, data=exp.eval()) generator_run = gpei.gen(1) best_arm, _ = generator_run.best_arm_predictions exp.new_trial(generator_run=generator_run)best_parameters = best_arm.parameters
與其他實驗性框架相比,Ax具備一些明顯優勢。對于初學者來說,編程模型可以與BoTorch之外的不同優化框架一起使用。此外,Ax會自動選擇優化程序,讓數據科學家能夠更輕松對模型進行微調。最后,該框架由可視化工具和基準測試套件實現功能互補,簡化了對優化技術的評估流程。
Facebook內部的許多團隊都在廣泛使用Ax和BoTorch框架。這些框架的開源是對PyTorch生態系統的重要補充,PyTorch生態系統已被廣泛視作數據科學實驗中最靈活的深度學習框架之一。隨著數據科學界開始嘗試Axe和BoTorch,可能會將更多新想法整合到兩個框架中,優化PyTorch應用程序中的實驗流程。
-
Facebook
+關注
關注
3文章
1429瀏覽量
54754 -
機器學習
+關注
關注
66文章
8418瀏覽量
132635 -
pytorch
+關注
關注
2文章
808瀏覽量
13226
原文標題:用PyTorch做深度學習實驗!Facebook新框架Ax和BoTorch雙雙開源
文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論