正確估計預測不確定性是涉及關鍵決策的應用中的基礎。不確定性可用於評估模型預測的可靠性,觸發人類干預或確定是否可以安全部署在野外。
Fortuna是一個用於不確定性量化的庫,可讓用戶輕鬆運行基準並為生產系統帶來不確定性。 Fortuna提供了從任何框架中編寫的預訓練模型開始的校準和保形方法,它進一步支持了幾種貝葉斯推理方法,從用亞麻編寫的深度學習模型開始。該語言的目的是對於不熟悉不確定性量化的從業者而言是直觀的,並且是高度可配置的。
檢查文檔以獲取快速啟動,示例和參考。
Fortuna提供了三種不同的用法模式:從不確定性估計,從模型輸出到亞麻模型。這些根據自己的應用程序決定的限制服務。它們的管道在下圖中描繪了,每個圖都是從一個綠色面板開始的。

從不確定性估計值開始的兼容性要求最小,它是與庫的交互的最快水平。這種用法模式提供了用於分類和回歸的共形預測方法。這些對輸入中的不確定性進行了估計,並返回一組嚴格的預測集,以保留用戶賦予的概率水平。在一維回歸任務中,可以將保形設置視為校準版本或可靠的間隔。
請注意,如果您在輸入中提供的不確定性估計是不准確的,則保形集可能很大且無法使用。因此,如果您的應用程序允許,請考慮從模型輸出和亞麻模型使用模式。
例子。假設您要使用覆蓋誤差error校準可靠的間隔,每個間隔對應於不同的測試輸入變量。我們假設可靠的間隔將作為下限和上限的數組傳遞,分別是test_lower_bounds和test_upper_bounds 。您還具有針對多個驗證輸入計算的可靠間隔的下限和上限,分別為val_lower_bounds和val_upper_bounds 。 val_targets表示相應的驗證目標數組。以下代碼會產生共形預測間隔,即您測試可靠的間隔的校準版本。
from fortuna . conformal import QuantileConformalRegressor
conformal_intervals = QuantileConformalRegressor (). conformal_interval (
val_lower_bounds = val_lower_bounds , val_upper_bounds = val_upper_bounds ,
test_lower_bounds = test_lower_bounds , test_upper_bounds = test_upper_bounds ,
val_targets = val_targets , error = error )從模型輸出開始,假設您已經在某些框架中訓練了一個模型,並以numpy.ndarray格式的模型輸出到達Fortuna。這種使用模式使您可以校準模型輸出,估計不確定性,計算指標並獲得保形集。
與來自不確定性估計的使用模式相比,該模式提供了更好的控制,因為它可以確保對不確定性估計進行了適當的校準。但是,如果該模型已經接受了經典方法的培訓,則導致的模型(又稱認識論)不確定性的定量可能很差。為了減輕此問題,請考慮來自亞麻模型使用模式。
例子。假設您有驗證和測試模型輸出,分別為val_outputs和test_outputs 。此外,您有一些驗證和目標變量數組,分別是val_targets和test_targets 。以下代碼提供了一個最小的分類示例,以獲得校準的預測熵估計。
from fortuna . output_calib_model import OutputCalibClassifier
calib_model = OutputCalibClassifier ()
status = calib_model . calibrate ( outputs = val_outputs , targets = val_targets )
test_entropies = calib_model . predictive . entropy ( outputs = test_outputs )從亞麻模型開始,比不確定性估計和模型輸出模式的兼容性要求更高,因為它需要用亞麻編寫的深度學習模型。但是,它使您可以用可擴展的貝葉斯推理程序代替標準模型訓練,這可能會顯著改善預測不確定性的量化。
例子。假設您具有從輸入到邏輯的Flax分類深度學習模型model ,輸出維度為output_dim 。此外,您分別進行了一些培訓,驗證和校準tensorflow數據加載器train_data_loader , val_data_loader和test_data_loader 。以下代碼提供了一個最小的分類示例,以獲取校準的概率估計。
from fortuna . data import DataLoader
train_data_loader = DataLoader . from_tensorflow_data_loader ( train_data_loader )
calib_data_loader = DataLoader . from_tensorflow_data_loader ( val_data_loader )
test_data_loader = DataLoader . from_tensorflow_data_loader ( test_data_loader )
from fortuna . prob_model import ProbClassifier
prob_model = ProbClassifier ( model = model )
status = prob_model . train ( train_data_loader = train_data_loader , calib_data_loader = calib_data_loader )
test_means = prob_model . predictive . mean ( inputs_loader = test_data_loader . to_inputs_loader ())注意:在安裝Fortuna之前,您需要在虛擬環境中安裝JAX。
您可以通過打字來安裝fortuna
PIP安裝AWS-Fortuna
另外,您可以使用詩歌構建包裝。如果您選擇這種方式,請首先安裝詩歌並將其添加到您的路徑中(請參閱此處)。然後輸入
詩歌安裝
所有依賴項將安裝在其所需版本上。考慮將以下標誌添加到上面的命令:
-E transformers如果想使用型號和數據集,則可以通過擁抱臉部。-E sagemaker如果您想安裝在Amazon Sagemaker上運行Fortuna所需的依賴項。-E docs如果要安裝獅身人面像依賴關係以構建文檔。-E notebooks如果您想使用Jupyter筆記本電腦。最後,您可以訪問詩歌通過打字poetry shell創建的Virtualenv,也可以使用run命令(例如poetry run python在Virtualenv中執行命令。
在 /示例目錄中找到了幾個用法示例。
我們提供一條簡單的管道,使您能夠以最小的努力在亞馬遜薩吉式製造商上運行Fortuna。
config_dir ,這是通往主要配置目錄的絕對路徑,而config_filename ,它是主配置文件的名稱(無.yaml擴展),輸入python並運行以下: from fortuna . sagemaker import run_training_job
run_training_job ( config_dir = config_dir , config_filename = config_filename )引用Fortuna:
@Article {ditommaso2023fortuna,
title = {fortuna:深度學習中的不確定性量化庫},
作者= {Ditommaso,Gianluca和Gasparin,Alberto和Donini,Michele和Seege,Matthias和Wilson,Andrew Gordon和Archambeau,Cedric},Cedric},
journal = {arxiv preprint arxiv:2302.04019},
年= {2023}
}
如果您想為該項目做出貢獻,請參閱我們的貢獻指南。
該項目已根據APACHE-2.0許可獲得許可。有關更多信息,請參見許可證。