ベイズの定理をAIで使う — 事前分布・事後分布・不確実性
たった1行のベイズの定理が、AIの現場では「確率の校正」「能動学習」「ベイズ最適化」という3つの実務ツールに化ける。検査の陽性から始めて、事前分布・事後分布・不確実性を前提知識ゼロで解説する。
要点
- ベイズの定理は、証拠を見る前の信念(事前分布)を尤度で重み付けし、見た後の信念(事後分布)に更新するルールである。
- 「事後 ∝ 尤度 × 事前」であり、答えは断定ではなく確率の分布として出るため、不確実性を数値として持ち歩ける。
- 事後確率を最大にする θ を選ぶのがMAP推定で、ガウス事前分布を置くとL2正則化(weight decay)に一致する。
- 温度スケーリングはsoftmaxの直前のスコアを定数 T で割るだけで、予測の順位は変わらず精度はそのまま、確率だけが実態に合う。
- 能動学習は不確実なものから先に人に聞き、ベイズ最適化は代理モデルと獲得関数で次に試す1点を決める。
On Calibration of Modern Neural Networks
一次資料 — この記事の根拠
この解説の公開 2026-08-13
On Calibration of Modern Neural NetworksarXiv:1706.04599論文ページ·PDFPractical Bayesian Optimization of Machine Learning AlgorithmsarXiv:1206.2944論文ページ·PDF
検査で「陽性」と言われたら、どれくらい心配すべきか
1000人に1人がかかる病気の検査を受けて「陽性」が出たとします。この検査は、病気の人を99%正しく陽性と判定し、健康な人を誤って陽性にする確率は1%です。さて、あなたが本当に病気である確率はいくつでしょう。
直感は「99%くらい」と答えたくなりますが、正解は約9%です。10万人で数えてみると分かります。病気の人は100人いて、そのうち99人が陽性。健康な人は99,900人いて、その1%=999人が誤って陽性。陽性の紙を受け取るのは合計1,098人ですが、本当に病気なのは99人だけ。99 ÷ 1,098 ≈ 9%です。
なぜ直感が外れたのか。「そもそも病気の人がめったにいない」という事前の情報を、直感は無視してしまうからです。この「事前の情報」と「目の前の証拠」を正しい配合で混ぜる公式が、ベイズの定理です。そしてAIの世界では、この1行の公式が「モデルの自信は信用できるか」「次にどのデータをラベル付けすべきか」「高価な実験をどこに割り振るか」という、きわめて実務的な問いに答える道具になります。
直感: ベイズの定理は「信念の更新ルール」
ベイズの定理を一言でいうと、証拠を見る前の信念(事前分布)を、証拠の説明力(尤度)で重み付けして、証拠を見た後の信念(事後分布)に更新するルールです。
刑事ドラマに例えます。捜査開始の時点で、刑事は容疑者ごとに「怪しさ」の見積もりを持っています。これが事前分布です。そこに新しい証拠 — 現場に残った足跡 — が見つかる。各容疑者について「その人が犯人だとしたら、この足跡はどれくらい自然か」を考える。これが尤度です。事前の怪しさと足跡の説明力を掛け合わせ、全体で辻褄が合うように割り算して出てくる新しい見積もりが事後分布。捜査が進むたびにこの更新を繰り返し、分布はだんだん尖っていきます。
大事なのは、答えが「犯人はAだ」という断定ではなく、確率の分布として出てくることです。分布が尖っていれば確信が強く、平らなら「まだ分からない」。この不確実性を数値として持ち歩けることが、ベイズ的な考え方の最大の武器です。
仕組み: 式はたった1行
読み方はこうです。 は仮説(病気である、この画像は猫である)、 は観測データ(陽性だった、この画素の並びだった)。 が事前確率=データを見る前の信念、 が尤度=仮説が正しいときにそのデータが出る確率、 は証拠=どの仮説かによらずそのデータが出る確率(全仮説にわたる合計で、答えを確率として合計1に揃える正規化係数)。左辺の が求めたい事後確率=データを見た後の信念です。
記号を日常語に置き換えると、この1行はこう読めます。いま信じるべき度合い = その仮説が目の前の出来事をどれだけうまく言い当てたか × もともとどれだけありそうだったか ÷ その出来事がどれだけありふれているか。最後の割り算が冒頭の例の勘所です。「陽性」という結果そのものはめずらしくなく、10万人のうち1,098人が受け取る — この大きな が、答えを9%まで引き戻しています。
分母は正規化のためだけにあるので、実務では比例関係で覚えるのが便利です。
つまり「事後 ∝ 尤度 × 事前」。事後の信念は、証拠の説明力と事前の信念の掛け算に比例する — 冒頭の検査の計算も、刑事の捜査も、やっていることはこの掛け算です。
分類器の出力も同じ形をしています。モデルが吐く「猫: 0.92、犬: 0.08」は、クラスにわたる一種の事後分布です。分布がどれくらい尖っているかは、下の図の温度スライダーで体感できます。温度を下げると1点に集中(強い確信)、上げると平ら(何も分かっていない)になります。
AIでの顔その1: 学習は事後分布の推定、事前分布は正則化
仮説 をモデルのパラメータ (重みの集まり)に置き換えると、学習は「データ を見た後、もっともらしいパラメータはどれか」という問いになります。事後確率を最大にする を選ぶのがMAP推定(最大事後確率推定)。対数を取ると積が和になり、次の形になります。
第1項はデータへの当てはまりの良さ(対数尤度。損失関数の符号を変えたもの)、第2項は「パラメータはこういう値であってほしい」という事前分布です。要するに、学習とは「当てはまり+事前の願い」の合計点が最大の重みを探すこと。そしてこの第2項が、ふだん正則化と呼んでいるものの正体です。「重みは0の近くにいてほしい」というガウス事前分布を置くと、第2項は見慣れたL2正則化(weight decay) に一致します。
事前分布を外す(どんな重みも等しくあり得るとする)と、モデルは訓練データに合わせることだけを考え、過学習へまっしぐらです。次の図で、次数を上げると訓練誤差は下がり続けるのにテスト誤差が離陸していく様子を再現できます。
損失関数と最適化の側から見た同じ話は損失関数と最適化で、過学習の診断は過学習と評価で扱っています。
AIでの顔その2: 確率の校正 — その「90%」は本当に90%か
分類器が「90%の確信で猫」と言ったとき、その90%は信用できるでしょうか。校正(calibration)とは「90%と言った予測を集めると実際に90%が当たっている」状態のこと。Guoらの2017年の研究は、現代の深いニューラルネットが系統的に自信過剰 — 90%と言いながら実際の正解率はずっと低いことがある — だと示しました。
ベイズの言葉でいえば、事後分布の「尖り」が過剰。処方箋のひとつが拍子抜けするほど単純な温度スケーリングで、softmaxに入る直前のスコア (ロジット)を定数 で割るだけです。
は温度と呼ばれる1つの数で、 なら分布が平らに(自信を下げる)、 なら尖ります(自信を上げる)。つまり、全部のスコアを同じ数で割っているだけなので、スコアの大小関係は原理的に動きません。動くのはスコア同士の間隔で、softmaxはその間隔を確信度に翻訳する — 割る数が大きいほど間隔は詰まり、「どれも似たようなもの」に見える、ということです。先ほどの温度スライダーそのものです。 は検証データで負の対数尤度が最小になるよう学習します。予測の順位は変わらないので精度はそのまま、確率の「言い値」だけが実態に合います。ずれの測定は、確信度を横軸・実際の正解率を縦軸に描く信頼度ダイアグラムと、それを1つの数に集約したECE(期待校正誤差)が定番です。
AIでの顔その3: 能動学習 — 「分からない」ものから先に聞く
ラベル付けは高くつきます。医用画像なら1枚に専門医の時間が必要です。能動学習(active learning)は発想を逆にし、ランダムに選んだデータではなく、モデル自身に「どれが分からないか」を申告させ、不確実なものから先に人に聞きます。
不確実性の測り方は事後分布から直接出ます。もっとも単純な不確実性サンプリングは、予測確率の最大値が小さい(どのクラスにも自信がない)標本を選ぶ方法。上位2クラスの確率差が小さいものを選ぶマージンサンプリング、分布の平ら具合をエントロピーで測る方法もあります。いずれも「事後分布が平らなところ=情報が足りないところ」にラベル付け予算を集中させる、という同じ思想です。ただし前提は、確率がそこそこ校正されていること。自信過剰なモデルは「全部分かっています」と言い張るので、分からないものを選べません。校正と能動学習は地続きです。
AIでの顔その4: ベイズ最適化 — 高価な実験を賢く割り振る
ハイパーパラメータ探索(学習率、層の数、正則化の強さ…)は、1回の試行に何時間もGPUを回す高価な実験です。ベイズ最適化は「評価が高くつく関数」の最大値を少ない試行で探す枠組みで、Snoekらの2012年の論文が機械学習のチューニングに広めました。
仕組みは2段構え。まず試行結果からガウス過程などの代理モデルを作る。これは各候補点について性能の予測とその予測の不確実性の両方を返します — ここがベイズたるゆえんです。次に獲得関数(期待改善量EIなど)が「予測値が高い場所(活用)」と「未踏で不確実性が大きい場所(探索)」を天秤にかけ、次に試す1点を決める。試行→事後分布の更新→次の1点、というベイズ更新のループです。乱択で回すより、有望な領域に試行が自然と集まります。
コードで体感: コイン投げのベイズ更新
いちばん小さなベイズ推論を10行で書きます。歪んだコインの表が出る確率 を、投げた結果から推定します。事前分布にベータ分布 Beta(a, b) を使うと、事後分布は「表の回数をaに、裏の回数をbに足すだけ」で求まります。
import numpy as np
a, b = 2, 2 # 事前分布 Beta(2,2):「たぶん公平」という緩い信念
flips = [1, 1, 0, 1, 1, 1, 0, 1] # 観測: 1=表, 0=裏
for x in flips:
a += x # 表が出たら a を +1
b += 1 - x # 裏が出たら b を +1
mean = a / (a + b) # 事後分布の平均 ≈ 0.67
std = np.sqrt(a * b / ((a + b)**2 * (a + b + 1))) # 事後の標準偏差 = 残る迷い
8回投げて表6回。割り算なら 6/8 = 0.75 ですが、事後平均は約0.67と控えめ — 事前分布の「たぶん公平」が、少ないデータでの断定にブレーキをかけています。std が残る限り「まだ確信していない」と数値で言え、データが増えるほど事後分布は尖って std は縮みます。
現場ではこう使う
確率の校正は、分類器の出力を「しきい値で意思決定」に使う場面 — 不正検知でアラートを上げる、医療トリアージで優先度を付ける — の前処理として、MLエンジニアが検証データで行います。scikit-learnなら CalibratedClassifierCV(method='sigmoid' か 'isotonic')、ニューラルネットなら温度1変数の最適化で、信頼度ダイアグラムとECEで確認します。落とし穴は2つ。訓練データで校正しない(自信過剰が残る)、そして運用中に分布が変わると校正はずれる。デプロイ後もECEを監視して再校正します。
能動学習は、アノテーション予算が限られたデータ整備の現場で使います。Pythonでは modAL などのライブラリに uncertainty_sampling が用意されています。落とし穴は選択バイアス: 不確実なものばかりでできたデータセットは母集団の分布からずれるので、評価用のテストセットは必ずランダムサンプリングで別に確保します。
ベイズ最適化は、ハイパーパラメータ探索でOptuna(TPESamplerが既定)や scikit-optimize の gp_minimize として触れます。実務の要点は探索空間の設計で、学習率のような桁で効くパラメータは log=True(対数スケール)で範囲指定しないと、探索が大きい値側に偏ります。また試行数が1桁なら乱択と大差が出ないことも多く、まず粗いランダム探索で範囲を絞ってから切り替えるのが定石です。
面接では「モデルの出す確率をそのまま信じてよいか」と問われます。「現代のネットは自信過剰になりがちなので、検証データで温度スケーリング等の校正を行い、ECEで確認してからしきい値設計に使う」と答えられれば、式(1)が現場までつながっています。
まとめ
- ベイズの定理は「事後 ∝ 尤度 × 事前」という信念の更新ルール。答えを分布で返すので、不確実性ごと持ち歩ける
- 正則化は事前分布の別名(L2 = ガウス事前)。学習はMAP推定として読み直せる
- 校正・能動学習・ベイズ最適化は、いずれも「事後分布の尖り=確信度」を実務の意思決定に変換する技術
確率の言葉づかい(分布・期待値・尤度)に不安があれば、先にAIのための確率を読むと本記事の式が全部つながります。
コメント
コメントにはログインが必要です