🎓 レベル:基礎 | 重要度:A(必須)
📎 前提:事前・尤度・事後・周辺尤度 | 数理:事前分布・事後分布・ベイズ更新(統計)
要点(BLUF)
- ベイズ更新とは、前のデータで得た事後分布を、次のデータの事前として使うこと。データを順に取り込めます(オンライン学習)。
- 逐次更新(1つずつ)とバッチ更新(一括)は同じ事後に至ります。共役なら「パラメータを足すだけ」(表で 、裏で )。
- データが i.i.d. なら、観測の順序を変えても最終事後は同じ。事後は十分統計量(表の数 、試行数 )だけで決まります。
1. 事後は「次の事前」になる
データ を見た後の事後を、 を見るときの事前として使えます。独立観測なら:
導出は素直で、同時尤度を分解するだけです:
要するに:きのうの結論(事後)を、きょうの出発点(事前)にする。これを繰り返せばデータが流れてくる状況にそのまま対応できます。
flowchart LR P0["事前 Beta(1,1)"] --> U1["+D1"] U1 --> P1["事後1"] P1 --> U2["+D2"] U2 --> P2["事後2(=次の事前)"] P2 --> DOTS["…"] DOTS --> PN["最終事後 Beta(21,11)"]
2. 逐次 = バッチ(共役ならパラメータの足し算)
全データ を一括で使っても、
積の順序は結果を変えないので、1つずつ掛けても一括でも同じ事後です。ベータ–二項の共役(第2章で詳述)では、これは「表が出たら を1増やし、裏が出たら を1増やす」という驚くほど単純な更新になります。一様事前 から始め、 回中 回表なら最終事後は です。
3. コードで逐次更新を見て、バッチと一致させる
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import japanize_matplotlib # 日本語ラベル用
# 真の確率 0.7 のコインを 30 球観測
rng = np.random.default_rng(1)
data = rng.binomial(1, 0.7, size=30) # 0/1 の列
# 逐次更新:Beta(1,1) から、表(1)で a+1、裏(0)で b+1
a, b = 1, 1
theta = np.linspace(0, 1, 300)
snapshots = {0, 1, 5, 30}
plt.figure(figsize=(7, 4))
for i in range(len(data) + 1):
if i in snapshots:
plt.plot(theta, stats.beta(a, b).pdf(theta), label=f"{i}球後 Beta({a},{b})")
if i < len(data):
if data[i] == 1:
a += 1
else:
b += 1
plt.axvline(0.7, color="black", ls=":", label="真の p=0.7")
plt.xlabel("p(表の確率)"); plt.ylabel("事後密度")
plt.title("逐次ベイズ更新:観測ごとに事後が尖る")
plt.legend(); plt.tight_layout(); plt.show()
# 逐次更新の最終 と バッチ更新(全データ一括)が一致するか
k, n = int(data.sum()), len(data)
print(f"逐次更新の最終: Beta({a},{b})")
print(f"バッチ更新: Beta({1 + k},{1 + n - k})")
出力:
逐次更新の最終: Beta(21,11)
バッチ更新: Beta(21,11)
出力の意味:30球(表20・裏10)を1球ずつ取り込んでも、最後にまとめて取り込んでも、事後は同じ です。図では、観測が進むほど事後分布が真値 の周りに尖っていきます——これが信念が固まっていく過程の可視化です。「逐次でも一括でも同じ」という性質のおかげで、ストリーミングデータでも安心して1球ずつ更新できます。
4. 観測順序によらない(十分統計量)
データが i.i.d.(独立同分布)なら、最終事後は表の数 と試行数 だけで決まります。これらは二項モデルの十分統計量で、個々の観測の順番や並びの情報は事後に効きません。つまり data をどうシャッフルしても は変わりません。
⚠️ ただしこれは「観測が i.i.d.」という前提あってのこと。時系列のように観測が互いに依存する場合は順序が本質的に効くので、逐次更新の式 で条件付けを明示的に扱う必要があります。
⚠️ よくある誤解
- 「逐次更新とバッチ更新は別物」ではない:i.i.d. かつ更新を正しく行えば数学的に同一の事後です。違いが出るなら、事前の入れ方かモデルの独立性の仮定を疑います。
- 「先に来たデータほど強く効く」ではない:i.i.d. なら順序不変。早い遅いは効きません(効くと感じるなら依存構造があるか、近似計算の誤差です)。
- 「毎回 Beta(1,1) からやり直す」必要はない:逐次推論の利点は、過去のデータを保持せず事後パラメータ だけ持ち越せば済むこと。これがオンライン学習の効率の源です。
関連ノート
- 事前・尤度・事後・周辺尤度
- 点推定と損失関数(次のトピック・事後から1点を選ぶ)
- 第2章 共役事前分布(「パラメータの足し算」の正体)
- 事前分布・事後分布・ベイズ更新(統計)
- ベイズ統計テキスト 全体目次