Dev Study
← AIを部品として組み込む仕組み
レッスン 6 / 12·約 9 分·第20期 AIを部品として組み込む仕組み

評価セットで調整すると、評価セットは使い切られる

リクエストがアプリケーションに届くまで
  1. ブラウザURL入力
  2. DNS名前→IP
  3. ルータ経路選択
  4. ロードバランサ振り分け
  5. Nginx受け口
  6. アプリ処理今ここ
  7. DB保存

確率で答える部品の確かさは、部品の外側にしか書けません。今回は、その確かさを測る評価セット自体が、使うたびに目減りすることを見ます。多重比較の一般形は、CS 領域のコース『評価のための統計』で扱います。

まず結論

同じ評価セットで多くの案を測って最良を選ぶと、選ばれた案の数字は楽観側に偏ります。どの案も同じ実力でも、偶然よく出た案が勝つからです。

結果を見て次の案を作る調整を重ねると、その評価セットは「一度も使っていないデータ」ではなくなります。勝者の本当の数字は、調整に使わなかった新しい事例で測り直すまで分かりません。

? 読む前に予測

正答率が本当はどれも0.70のプロンプト案を30個作り、同じ50件の評価セットで測って最良の案を選びます。選ばれた案の評価セット上の正答率は、平均するとどのくらいに見えるでしょうか。

当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。

抽象原理

最良を選ぶと、偶然の上振れも一緒に選ぶ

50件の評価セットで正答率を測ると、出てくる数字は「実力」そのものではありません。同じ実力の案でも、どの事例で当たり外れが出るかによって、数字は上下に揺れます。

1案だけなら、揺れは上にも下にも出るので平均すれば実力に一致します。ところが 30案を測って最大のものを選ぶと、揺れが上に出た案を選ぶことになります。 選んだ時点で、数字は楽観側に偏ります。

同じデータで多くの候補を比べることを 多重比較 と呼びます。候補が多いほど、実力と無関係にどれかが偶然よく見えやすくなります。新しい事例で測り直すと揺れは引き直されるので、上振れは持ち越されません。

30案から最良を選び、新しい事例で測り直す(模型)
30案を同じ50件で測るどの案も真の率は0.70
最大を選ぶ
最良案 0.827揺れが上に出た案を選んでいる
新しい50件で測り直す
0.702揺れは引き直され、実力に戻る
  • ・0.827 と 0.702 は 2000回繰り返した平均。厳密計算では 0.8266 と 0.70
具体実物

効果の無い30案から、勝者が生まれる

Python の標準ライブラリだけの模型です。30案は どれも各事例に独立に確率0.70で正解する、つまり改善が1つも無い案です。各案を50件で測って最良を選び、同じ案を新しい50件で測り直します。これを2000回繰り返した平均が次の出力です(macOS arm64・Python 3.14.6、2回実行して同一)。

$ python3 l6-d6.pyコマンド出力
true rate of every variant: 0.70
best of 30 on the tuning set (n=50): 0.827
same winner on fresh cases: 0.702

0.70 の案しか無いのに、勝者は 0.827 に見えます。差は約13ポイントです。案の数を変えて、最良の見かけの平均を二項分布から厳密に計算するとこうなります。

真の率0.70・各50件のとき、最良案の見かけの平均(厳密計算)表
案の数 見かけの平均
1 0.7000
5 0.7740
10 0.7969
30 0.8266
100 0.8531

試す案を増やすほど、何も改善しなくても勝者の数字は上がります。

✓ ここまでの確認

模型で、最良案は評価セットで 0.827 に見えたのに、新しい50件では 0.702 でした。下がった理由として適切なのはどれですか。

抽象原理

結果を見て次を作ると、補正の前提が崩れる

実際のプロンプト調整は、30案を先に並べません。評価セットで間違えた事例を見て、そこに効きそうな文言を足し、また測ります。次の案が、前の結果に依存しています。

同じ論文は、ここで静的な補正が使えなくなると書きます。

However such static approaches do not apply if the estimates or hypotheses tested on the holdout are chosen adaptively: that is, if the choice of hypotheses depends on previous analyses performed on the dataset. One prominent example in which a holdout set is often adaptively reused is hyperparameter tuning …

要旨はその帰結を Reusing a holdout set adaptively multiple times can easily lead to overfitting to the holdout set itself. と書きます。表題の「使い切られる」は教材側の比喩で、原典の言い方は評価用データそのものへの過適合(overfitting)です。

評価セットが未使用でなくなる経路はもう1つあります。Sainz らは汚染を trained on the test split of a benchmark, and then evaluated in the same benchmark と書きます。汚染は評価データが 訓練に入る 経路、調整は評価データを 選択に使う 経路です。どちらも、評価では高く新しい事例で下がる点は同じです。

具体実物

機械学習の3分割に置いてみる

機械学習では、データを訓練・検証・テストに分けます。訓練データで学習し、検証データでハイパーパラメータを調整・選択し、最後に 一度も使っていない テストデータで性能を測ります。調整に使ったデータで評価する「ズル」を避けるための分け方です。

プロンプト調整を当てはめると、重みは変えていないので訓練データはありません。残るのは検証とテストの区別です。

3分割の役割と、プロンプト調整での対応表
役割 機械学習の場合 プロンプト調整の場合
訓練 重みを学習する (無い)
検証 ハイパーパラメータを選ぶ 結果を見て文面を直す評価セット
テスト 一度だけ最終性能を測る 調整に使わなかった事例

結果を見て文面を直してきた評価セットは、検証データの役に移っています。 テストデータの役を果たすのは、調整の判断に使わなかった事例だけです。

✓ ここまでの確認

評価セット50件を見ながらプロンプトを何度も直してきました。機械学習の訓練・検証・テストの3分割に当てはめると、この評価セットはどれに当たりますか。

⇄ 2つを見比べる
具体例 A

評価セットで選んだプロンプト

効果の無い30案から最良を選ぶと、評価セットでは 0.827 に見えます。同じ案を新しい50件で測ると 0.702 でした(2000回平均の模型)。

どこで測ったか表
測った場所 正答率
選択に使った評価セット 0.827
新しい50件 0.702
具体例 B

検証データで選んだハイパーパラメータ

機械学習では、検証データでの成績で設定を選びます。だから最終性能は検証データではなく、一度も使っていないテストデータで測ります。

プロンプトの選択とハイパーパラメータの選択。2つに共通する構造は何でしょうか。

「選ぶのに使ったデータ」と「最終的な数字を出すデータ」が同じかどうかに着目してください。

この章のまとめ

  • 多くの案を同じ評価セットで測って 最良を選ぶと、偶然の上振れも選ぶ。模型では真の率0.70が 0.827 に見え、新しい50件で 0.702。
  • 案が多いほど見かけは上がる(厳密計算で5案 0.774、30案 0.8266、100案 0.853)。
  • 30案を先に決める場合は、Dwork らが補正の容易な側に置く。結果を見て次を作る 調整は chosen adaptively で、静的な補正が効かない。
  • 汚染は評価データが 訓練に入る 経路、調整は 選択に使う 経路。結果は同じく新しい事例で下がる。
  • 直してきた評価セットは 検証データ。本当の数字は、調整に使わなかった事例で測る。

自分の現場で確かめる

読んだだけでは身につきません。手元の環境で実際に見てみてください。

理解度チェック

読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。

問題 1 / 3正解: 0

Dwork らの arXiv:1506.02629 は、どんな場合に「多重検定として補正すれば済む」静的な方法が使えないと書いていますか。

用語集(4語)
評価セット(eval set)
部品の出来を測るために用意した事例の集まり。調整の判断に使った時点で、未使用のテストデータではなくなる。
多重比較
同じデータで多くの候補を比べること。候補が多いほど、実力と無関係にどれかが偶然よく見えやすくなる。
適応的なデータ分析(adaptive data analysis)
同じデータでの前の分析結果を見て、次に試す分析や仮説を決める進め方。Dwork らはハイパーパラメータ調整を代表例に挙げる。
汚染(contamination)
評価に使うデータが、モデルの訓練データに入り込んでいること。評価での数字を過大にする。