本文へスキップ

ガイド

学習済みモデルを検証する

学習済みモデルは、すでに見たスイートで高いスコアを出し、入力が少し動くと答えを反転させ、たまたま幸運なシードを引くことがあります。Oloproof はモデルを出荷する前に、これらをそれぞれ確認します。学習データに対するスイート、宣言したノイズの下での各予測、そして複数のシードにわたる学習レシピです。例は oloproof init --example model-validation でコピーできます。合成データで NumPy によりオフラインで学習した融資モデルです。

学習データに対するスイート

oloproof leakage check --training data/training.jsonl --record

各ケースは、文字列を小文字にし空白をまとめたうえで、すべての学習行と完全一致で比較されます(--round は数値を丸め、--field は比較するキーを指定します)。学習ファイルはあなたのマシンで読まれ、保存も送信もされません。記録に残るのはケース ID と件数です。release.yaml で leakage: required を宣言すると、このスイートのクリーンなチェックが記録されるまでゲートはブロックされます(終了コード 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 を使います。行に加えたノイズがその意味を保つかどうかは人には判断できないため、数値の摂動は宣言扱いです。その率は報告され、それに対するルールは transform_declared とともに INSUFFICIENT_EVIDENCE になります。画像の変換は、テキストの変換と同じく、人のラベルが各画像の意味を保つと示した時点でゲートを決められます。例の 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 はシードにわたる期待合格率を読み、スイートが持つケースと試したシードの両方を数える区間を付けます。例では 5 つのシードが 85.7% から 90.3% で、レシピは 88.2%、83.2% から 91.9% となり、80% に対して PASS です。区間は近似なので、ポリシーには allow_approximate_methods: true が必要で、ない場合の答えは MANUAL_REVIEW です。ポリシーには少なくとも 1 つのルールが必要です。コマンドが読むのは信頼水準、そのオプトイン、ジャッジの基準だけで、それ以外は読みません。シードによって判定が変わるケースも一覧表示し、--html FILE はすべてのケースをすべてのチェックポイントの下に並べたオフラインのページを 1 つ書き出します。

すべてのチェックポイントが数えられます。学習に失敗したシードも残され、それが答えなかった各ケースは下端では不合格、上端では合格として数えられるので、区間が広がります。シードが 3 つ未満なら INSUFFICIENT_EVIDENCE です。何かを決めるには約 5 つが必要です。ゲートが信頼しないジャッジは、レシピも決めません。すべてのチェックポイントは同じスイートを、それぞれ 1 つのシステムバージョンで実行する必要があり、グループを宣言するスイートは拒否されます。

これでわからないこと

  • 誰も宣言していない摂動。試されるのは宣言した変換だけで、宣言した大きさだけです。反転率が低くても、より大きな変化や攻撃者の探索については何もわかりません。
  • 認証された頑健性。どの入力についても上限は証明されません。反転率はスイートのケースにわたる率です。
  • モデルがどう学習されたか。シードがどのチェックポイントの評価よりも前に選ばれたか、失敗した実行が捨てられたか、チェックポイントの違いがシードだけかを、Oloproof は見ることができません。
  • k シードに約 1 回より稀な失敗。レシピが 10 回に 1 回学習に失敗し、5 つのシードのどれも失敗しなかったなら、区間はそれを知ることができません。
  • 学習ファイルに現れないリーク。ほぼ重複、リサイズした画像、チューニングに使ったがファイルから外した行です。
  • シード実行でのリーク。oloproof seeds は leakage: required を読みません。出荷するチェックポイントは、それを読むそれ自身の実行でゲートされます。

どの評価にもわからないことは専用のページにあります。