Mímisbrunnr知恵の泉

← ベイズ統計 一覧

🎓 レベル:発展 | 重要度:B(標準)

📎 前提:ガウス過程 | 関連:ニューラルネットの正則化(機械学習)

⚠️ 要最新確認:ベイズ深層学習は研究が非常に速く動く領域です。手法の優劣・実装の定番は短期間で変わるので、最新の文献・ライブラリを確認してください。

要点(BLUF)

1. 単一 NN の過信問題

標準的なニューラルネットは、重みを1組に決める点推定(最尤/MAP)です。だから予測も1点で、「どれくらい確からしいか」を言いません。さらに困るのは、学習データから外れた入力でも、自信満々に断言してしまうこと(過信)。安全が要る応用(医療・自動運転)では、「分からないときは分からないと言う」不確実性の定量化が不可欠です。ガウス過程(ガウス過程)が外挿で帯を広げたのと同じことを、深層モデルでもやりたい——それがベイズ深層学習の動機です。

2. 2種類の不確実性

種類何の不確実性データを増やすと
認識的(epistemic)モデル・知識の不足減る(学べば確信が増す)学習データのない領域
アレアトリック(aleatoric)データ自体の雑音減らない(本質的なばらつき)観測ノイズ・ラベルの曖昧さ

ベイズの事後(重みの分布)が認識的不確実性を、尤度の分散がアレアトリック不確実性を担います。両者を分けて扱えるのがベイズ的アプローチの利点です。

3. コード:ディープアンサンブルの認識的不確実性

最も手軽で強力な近似がディープアンサンブル——初期値の違う複数の NN を独立に学習し、予測のばらつきを不確実性とみなします(モデル間の不一致=認識的不確実性)。

import numpy as np
from sklearn.neural_network import MLPRegressor
import warnings; warnings.filterwarnings("ignore")

rng = np.random.default_rng(0)
f = lambda x: np.sin(1.5*x)
Xtr = rng.uniform(-3, 3, 60)[:, None]                     # データは [-3,3]
ytr = f(Xtr.ravel()) + rng.normal(0, 0.1, 60)
Xte = np.linspace(-7, 7, 300)[:, None]                    # 外挿を含む範囲

# 違う初期値で小さい MLP を 20 個学習(ディープアンサンブル)
preds = []
for seed in range(20):
    net = MLPRegressor(hidden_layer_sizes=(64, 64), activation="tanh",
                       max_iter=2000, random_state=seed, alpha=1e-4)
    net.fit(Xtr, ytr.ravel())
    preds.append(net.predict(Xte))
preds = np.array(preds)
epi_sd = preds.std(0)                                     # アンサンブルの不一致=認識的不確実性

inside = np.abs(Xte.ravel()) <= 3
print("ディープアンサンブル(20モデル)の予測ばらつき:")
for x0 in [0.0, 2.5, 5.0, 6.5]:
    i = np.argmin(np.abs(Xte.ravel()-x0))
    print(f"  x={x0:>4}: アンサンブルSD={epi_sd[i]:.3f}{'データ内' if abs(x0)<=3 else '外挿'})")
print(f"データ内の平均SD={epi_sd[inside].mean():.3f}, 外挿|x|>5の平均SD={epi_sd[np.abs(Xte.ravel())>5].mean():.3f}")

出力:

ディープアンサンブル(20モデル)の予測ばらつき:
  x= 0.0: アンサンブルSD=0.066  (データ内)
  x= 2.5: アンサンブルSD=0.206  (データ内)
  x= 5.0: アンサンブルSD=0.956  (外挿)
  x= 6.5: アンサンブルSD=1.190  (外挿)
データ内の平均SD=0.222, 外挿|x|>5の平均SD=1.080

出力の意味:データのある [3,3][-3,3] ではモデルどうしがよく一致(SD 0.220.22)、外挿(x>5|x|>5)では予測が大きく割れます(SD 1.081.08、約5倍)。各 NN は同じデータで学習しても、データのない領域では初期値しだいで好き勝手に外挿するため、不一致が認識的不確実性を表します。単一の NN ならどれか1本の自信満々な線を信じてしまうところを、アンサンブルは「ここは分からない」と幅で示せます——GP の予測帯(ガウス過程)と同じ役割を、深層モデルで近似的に実現しています。

4. ベイズ深層学習の主な手法

手法考え方位置づけ
ディープアンサンブル違う初期値で複数学習し予測のばらつきを使う単純・強力。実務の定番の一つ
MC ドロップアウト推論時もドロップアウトを残し複数回予測ドロップアウト(ニューラルネットの正則化)≒近似変分推論
変分 BNN重みの事後を変分分布で近似(確率的変分推論と再パラメータ化原理的だが学習が難しいことも
ラプラス近似学習後の MAP 周りをガウス近似(ベイズGLM の NN 版)後付けで不確実性を足せる

どれも「重みの点推定」を「重みの分布(または複数モデル)」に置き換えて、認識的不確実性を得る工夫です。手法の優劣は問題依存で、研究も速いので要最新確認

5. GP・VAE との関係

ベイズ深層学習は、本テキストで積み上げた変分推論(第6章)・ラプラス近似(第7章)・不確実性の考え方を、深層モデルに持ち込んだ応用領域です。

⚠️ よくある誤解

関連ノート