指南
驗證訓練好的模型
訓練好的模型可能在它已經看過的測試集上得分很高,在輸入稍有變化時翻轉答案,也可能碰上一個幸運的種子。Oloproof 在模型發布前逐一檢查這些問題:測試集與訓練資料的對照、在宣告的雜訊下的每個預測,以及跨多個種子的訓練配方。用 oloproof init --example model-validation 複製範例:一個由 NumPy 離線在合成資料上訓練的貸款模型。
測試集與訓練資料的對照
oloproof leakage check --training data/training.jsonl --record每個案例都會在字串轉為小寫、空白合併之後,與每一列訓練資料做精確比對(--round 對數字取整,--field 指定要比較的鍵)。訓練檔案在你的機器上讀取,從不儲存或傳送;紀錄只保留案例 ID 和計數。在 release.yaml 中宣告 leakage: required,閘門就會被阻擋(exit 3),直到記錄下對該測試集的一次乾淨檢查。在訓練資料中發現的案例使證據無效;這不是模型的 FAIL。近似重複不做檢查。
雜訊下的預測
metamorphic:
transforms:
- name: noise
field: features
perturb: {kind: numeric_noise, scale: {income: 1.0, debt_ratio: 0.02}, seed: 7}
evaluators:
- {type: metamorphic_relation, relation: same_label, transform: noise, field: label, passes_when: flipped}每個案例會得到一個副本,在指定的數字上加入依種子產生的雜訊,flips_under_noise 是標籤發生變化的案例所占比例。categorical_swap 依宣告的對應替換值,blur、brightness、occlusion 和 jpeg 則改變影像。迴歸模型使用帶容差的 same_score_within。人無法判斷一列資料上的雜訊是否保留了它的含義,因此數值擾動屬於宣告的轉換:它的比率會被回報,基於它的規則結果為 INSUFFICIENT_EVIDENCE 並附 transform_declared。影像轉換與文字轉換一樣,在人的標籤顯示它保留了每張影像的含義之後才可用於閘門。範例中的 image/ 專案展示了兩種情況:一種是經標註檢查的模糊,其翻轉率超過上限而不通過;另一種是灰色補丁,標註顯示它有時會遮住刮痕,因此其規則不作判定。
跨種子的配方
你發布的檢查點和任何系統一樣,由它自己的執行來判定。第二個問題是你的訓練方式是否夠好:下個月重新訓練,你會得到另一次抽樣。用 k 個種子訓練 k 個檢查點,在同一測試集上分別執行,並為這些執行命名:
seeds:
recipe: loan-model
checkpoints: {seed_1: latest~4, seed_2: latest~3, seed_3: latest~2, seed_4: latest~1, seed_5: latest}
rule: {id: recipe_accurate, criterion: correct, min: 0.8}oloproof seeds seeds.yaml --policy recipe.yaml 讀取跨種子的期望通過率,其區間同時計入測試集中的案例和你嘗試過的種子。在範例中,五個種子的得分為 85.7% 到 90.3%,配方的結果為 88.2%,區間 83.2% 到 91.9%:相對於 80% 為 PASS。該區間是近似的,因此政策需要 allow_approximate_methods: true,否則答案是 MANUAL_REVIEW。政策必須至少包含一條規則;該指令只讀取其信賴水準、這項許可和評審者門檻,其他一概不讀。它也會列出判定隨種子而變的案例,--html FILE 會寫出一個離線頁面,列出每個檢查點下的每個案例。
每個檢查點都計入。訓練失敗的種子會被保留,它沒有回答的每個案例在下界按失敗計、在上界按通過計,因此會使區間變寬。少於三個種子的結果為 INSUFFICIENT_EVIDENCE;要作出任何判定大約需要五個。閘門不會信任的評審者同樣不能判定配方。每個檢查點必須執行同一測試集,各自對應一個系統版本,宣告了分組的測試集會被拒絕。
這無法告訴你的
- 沒有人宣告的擾動。只會嘗試宣告的轉換,依宣告的幅度進行,低翻轉率無法說明更大的變化或攻擊者的搜尋。
- 認證的穩健性。不會為任何輸入證明任何界限;翻轉率只是測試集案例上的比率。
- 模型是如何訓練的。Oloproof 無法看到種子是否在評估任何檢查點之前選定,失敗的執行是否被丟棄,或者檢查點之間是否僅有種子不同。
- 比大約 k 個種子中出現一次更罕見的失敗。如果配方十次中有一次訓練失敗,而五個種子都沒有失敗,區間無從得知。
- 訓練檔案沒有顯示的洩漏:近似重複、調整過尺寸的影像,或用於調參卻未放入檔案的列。
- 種子執行中的洩漏。oloproof seeds 不讀取 leakage: required;你發布的檢查點在它自己的執行上接受閘門,而那次執行會讀取。
任何評估都無法告訴你的內容見獨立的頁面。