SGLD ストキャスティック勾配ランジュバン シミュレーター 戻る
ベイズ深層学習・MCMC

SGLD ストキャスティック勾配ランジュバン シミュレーター

SGD に Brownian 雑音を加えるだけで Bayesian 事後分布をサンプリングする SGLD (Welling & Teh 2011) を、ステップサイズ・バッチサイズ・雑音強度・データ規模の 6 つのスライダーで操作できるツールです。確率的バイアスとランジュバンノイズのトレードオフ、有効サンプル数 ESS、混合時間、Gelman-Rubin R̂ がリアルタイムで更新され、Bayesian 深層学習のサンプラー設計を直感的に学べます。

パラメータ設定
ステップサイズ η
η が大きいほど混合時間↓・bias↑のトレードオフ
イテレーション数
サンプラーの総ステップ数。ESS と coverage に直結
ミニバッチサイズ B
小さいほど勾配雑音↑→ bias↑、計算コスト↓
全データ数 N
SGLD の bias は N/B に比例して効く
雑音強度 √(2/N·η) 倍
温度パラメータ的に Brownian 雑音の振幅を制御
勾配分散 σ²_g
ミニバッチ勾配の分散。bias の主因子
計算結果
確率的バイアス
ランジュバンノイズ
有効サンプル数 ESS
混合時間 (iters)
事後分布カバレッジ (%)
R̂ 収束指標
2D 損失曲面と SGD/SGLD ウォーカー

赤い点が SGD(最尤推定に直行)、青い点が SGLD(Brownian 雑音で事後分布の輪郭を探索)。同心の薄い円が事後分布 p(θ|D) の等高線。η と雑音強度を変えると軌跡の広がりが変化します。

SGD vs SGLD 損失推移
事後分布カバレッジ vs イテレーション数
理論・主要公式

$$\theta_{t+1} = \theta_t - \frac{\eta_t}{2}\sum_{i\in B_t} \nabla L_i(\theta_t) + \sqrt{\eta_t}\,\xi_t,\quad \xi_t \sim \mathcal{N}(0,I)$$

SGLD 更新則(Welling & Teh 2011)。η_t はステップサイズ、B_t はミニバッチ、ξ_t は Brownian 雑音。η→0 の極限で正確な事後分布サンプリング、有限 η では bias を伴う近似。

$$\mathrm{Bias} \;\propto\; \eta\,\sigma_g^2\,\frac{N}{B}, \qquad \mathrm{Var} \;\propto\; \eta, \qquad \tau_{\mathrm{mix}} \approx \frac{1}{\eta}$$

確率的バイアスは η と勾配分散 σ²_g に比例、混合時間 τ_mix は η の逆数。Brownian 雑音は √(2η) スケールで支配的になり、KSD(Kernel Stein Discrepancy)も η の関数として上界がついている(Chen-Ding-Carin 2015)。

Stochastic Gradient Langevin Dynamics (SGLD) — Bayesian深層学習

🙋
最近の論文でよく「SGLD」って見かけるんですが、これって名前のとおりただの SGD の親戚ですか? ランジュバンっていう人名がついてるけど…
🎓
親戚というより「双子」だね。式を見るとほぼ同じで、SGD の更新 θ ← θ − η·∇L にガウス雑音 √(2η)·ξ を 1 行足すだけ。でもこの一行で性格がガラッと変わって、「最尤解 1 点を探すアルゴリズム」が「事後分布 p(θ|D) からサンプルを引く MCMC」になる。元ネタの Welling-Teh (2011) は ICML のたった 8 ページの論文だけど、Bayesian 深層学習の事実上のスタートラインになったよ。ランジュバンの名前は、確率分布をターゲットにしたブラウン運動の連続版「ランジュバン拡散方程式」から来ている。
🙋
なるほど。でも左の「ステップサイズ η」を上げると上の R̂ がどんどん大きくなりますよね。default の 4.49 でもう収束失敗判定だし、ちっとも上手くサンプリングしてくれないんですけど…
🎓
そこが SGLD の一番のクセなんだ。確率的バイアスは η·σ²_g·N/B に比例するから、データセット N=10000、バッチ B=32 だと N/B=312 倍に増幅されて、η=0.001 でも bias が 0.156 になっちゃう。一方で Brownian 雑音は √(2η)=0.045 だから、bias が雑音の 3.5 倍も大きい。これじゃ「サンプリング」じゃなくて「バイアス入り SGD」だね。「N を 100 まで下げる」「B を 256 まで上げる」「η を 0.0001 まで下げる」のどれかをやると R̂ が 1.2 を切るよ。やってみて。
🙋
η を 0.0001 にしたら R̂=1.36 まで下がりました。でも今度は混合時間が 10000 iter になって、5000 iter じゃ全然足りない…完璧な設定にするのって難しいんですね。
🎓
それが SGLD の bias-variance トレードオフの本質だよ。η を小さくすると bias は減るけど、混合時間 τ_mix=1/η が伸びてサンプル間の相関が高くなり、ESS(有効サンプル数)が稼げない。実務では η_t = a/(b+t)^γ で時間とともに減衰させる「polynomial decay」を使う。最初は大きな η で広く探索し、後半で小さな η で正確に分布を捉える。γ∈(0.5,1] が理論的な収束保証つきの範囲で、Pereyra-Vono らがその選び方を詳しく研究しているよ。
🙋
2D 損失曲面のキャンバスで青い SGLD ウォーカーがフワフワ動いているのが可愛いです。赤い SGD は中心の最尤点に張り付いてますね。これって何の絵ですか?
🎓
あれは「事後分布の風景」のイラストだよ。中心の濃い色が最頻値(MAP)、薄い同心円が事後分布 p(θ|D) の等高線。SGD はその風景の谷底に向かって最短距離で滑り落ちる「点推定」をしている。一方 SGLD は Brownian 雑音のおかげで谷底にとどまらず、確率の高い領域全体をフラフラと巡回する。たくさんのサンプルを集めて平均すれば「予測の不確かさ」が出る。例えば医療診断 AI で「90% の確率でガン陽性、95% 信頼区間は…」みたいに言えるようになるのが Bayesian 深層学習の旨味なんだ。
🙋
なるほど、点推定じゃ「自信なし」って言えないですもんね。実装って大変なんですか? PyTorch とかで使えます?
🎓
超簡単だよ。PyTorch なら標準の torch.optim.SGD のあとに for p in model.parameters(): p.data += torch.randn_like(p) * math.sqrt(2*lr) を足すだけ。それで SGLD になる。Edward2 や Pyro、TensorFlow Probability にも組み込みクラスがある。深層モデルだと収束が遅いので、pSGLD(前処理つき、Li 2016)や SGHMC(運動量つき、Chen 2014)を併用するのが現代の定番。Mandt-Hoffman らの研究では SGD 自体も「定常分布つきサンプラー」とみなせることが分かっていて、SGLD はその拡張という見方もできる。一行のコード変更で「世界の見方」が変わる、というのが SGLD の魅力だね。

よくある質問

SGD は θ_{t+1} = θ_t − η·∇L で「最尤解」に向かって降下するアルゴリズムですが、SGLD は同じ更新式に sqrt(2η)·ξ_t(ξ_t は標準正規乱数)を毎ステップ加えます。この Brownian 雑音のおかげで反復解はランジュバン拡散方程式の離散化となり、η→0 の極限で Bayesian 事後分布 p(θ|D) からのサンプリングと等価になります。1 行のコード変更で「最適化アルゴリズム」が「サンプリングアルゴリズム」に変わるのが SGLD の魅力で、深層モデルの不確かさ定量化や強化学習の探索に広く使われます。
SGLD には bias と variance のトレードオフがあります。η を大きくすると 1 ステップで遠くまで動けて混合時間 1/η は短くなりますが、確率的バイアス(≈ η·grad_var·N/B/2)が増えて事後分布から外れます。逆に η を小さくすると bias は減るが ESS が伸びず収束に時間がかかります。Welling-Teh の原論文は η_t = a/(b+t)^γ(γ∈(0.5,1]) で減衰させる方式を推奨。実務では 1e-4 〜 1e-3 程度から始め、R̂ < 1.2 と posterior coverage > 80% を満たす最大の η を探すのが定石です。
R̂ は複数チェーンの「鎖間分散 / 鎖内分散」の平方根に近い量で、定常分布に達していれば 1 に近づきます。R̂ > 1.1 〜 1.2 のときは、まだチェーンが事後分布全体を探索しきっておらず posterior 推定が偏っている目安。Gelman ら (2013) の Bayesian Data Analysis では R̂ < 1.1 を要求していますが、SGLD のような有限 η のサンプラーでは bias の影響でやや高く出るため、本ツールでは緩めに R̂ < 1.2 を OK ラインとしています。実プロジェクトでは複数チェーン・複数初期値で確認するのが原則です。
SGHMC (Chen et al. 2014) は Hamiltonian dynamics に friction を加え、慣性で局所最適を脱出しやすくしたもの。pSGLD (Li et al. 2016) は RMSprop 風の前処理行列で各パラメータの曲率に適応し、深層ネットでの収束を加速します。SVGD (Liu & Wang 2016) はカーネル法で複数粒子を同時に更新する deterministic な変分推論で、SGLD よりサンプル効率が高いが計算コストも増えます。深層ベイズ学習では、まず SGLD/pSGLD でベースラインを取り、必要に応じて SGHMC や Stein 系に拡張する流れが一般的です。

実世界での応用

医療診断 AI の不確かさ定量化:放射線科の CT 画像分類や病理画像セグメンテーションでは、「90% で陽性、95% 信頼区間は 80〜97%」のように予測の自信を返す必要があります。Kendall-Gal (2017) は SGLD/MC-Dropout で得た事後分布から aleatoric / epistemic 不確かさを分離し、確信度の低いケースを医師にフラグする「自己診断付き AI」を実装。FDA 承認の医療 AI でもこのタイプの不確かさ提示が標準になりつつあります。

強化学習の探索戦略:Bayesian DQN や PSRL(Posterior Sampling for RL)は、Q 関数の事後分布から毎エピソード 1 サンプルを引いて「楽観的に」行動選択します。SGLD はこの事後分布サンプリングの実装基盤で、Atari ベンチマークや自動運転シミュレーションで ε-greedy より少ない試行回数で最適方策に到達できることが Osband-Russo らの研究で示されています。

ベイズ最適化と材料・新薬探索:分子の量子計算 (DFT) や材料の合成実験は 1 サンプルに数時間〜数週間かかります。代理モデル(ガウス過程 / ベイズ NN)の事後を SGLD でサンプリングし、Expected Improvement や Thompson sampling で次の実験を選ぶ「能動学習」が標準。Hernández-Lobato らの研究で、医薬品リード化合物の発見が従来比 1/10 の実験回数で達成されています。

敵対的攻撃に対する防御:Adversarial example(人間には見えないが AI を誤分類させる微小ノイズ)に対し、点推定モデルは弱いですが、SGLD で得た事後分布から複数モデルを平均する Bayesian アンサンブルは攻撃成功率を大きく下げます。Gal-Smith (2018) や Carmon らの研究で、Bayesian 深層学習が adversarial robustness のベースラインの一つになっています。

よくある誤解と注意点

まず最大の落とし穴が、「SGLD は MCMC だから burn-in も収束診断も MH-MCMC と同じでよい」という思い込み。SGLD は有限ステップサイズで「ターゲット分布」からズレた近似分布をサンプリングするため、Metropolis-Hastings 補正が無く、bias が原理的に残ります。η を 0 に近づけるか、Vollmer-Zygalakis らが提案した MALA 補正版 SGLD を使わない限り、得られたサンプルは厳密な事後分布のものではない点に注意。Welling-Teh 流の「η_t→0 の漸近的厳密性」は理論的保証であって、有限ステップの実装では bias を残したまま使うのが普通です。

次に、「事後分布カバレッジが 90% を超えたから信用していい」という誤解。本ツールの coverage はイテレーション数の対数に基づく経験的指標で、未探索のモードがあると過大評価になります。深層ネットの損失曲面はマルチモーダル(複数の谷)で、SGLD は近傍モードしか巡回できないことが多い。複数の初期値から並列にチェーンを走らせ、R̂ を多変量で評価する「complete pooling」テストや、Replica Exchange (parallel tempering) で温度を上げたチェーンと交換するなどの工夫が必要です。Mode collapse は Bayesian 深層学習の最も深刻な未解決問題の一つです。

最後に、「バッチサイズを大きくすれば bias が減るからいいことづくめ」という落とし穴。式上は B↑で bias≈η·σ²_g·N/B↓ですが、1 ステップあたりの計算コストは B に比例して増え、ESS/秒は B=N(フルバッチ)で頭打ち。逆に B が極端に小さいと(B=1 など)勾配雑音が爆発的に増えて bias が支配的になります。Welling-Teh は「B は VRAM が許す範囲で大きく、η は B の増加に合わせて線形に小さく」を推奨。pSGLD のような前処理付き手法では B のスイートスポットがさらに広がります。実プロジェクトでは η と B を同時にグリッドサーチするのが鉄則です。

使い方ガイド

  1. ステップサイズ(初期値0.01)とバッチサイズ(初期値32)を設定し、データセットサイズ(例:10000)を入力する
  2. 反復回数(例:5000)を指定してシミュレーション開始ボタンをクリック、SGLDアルゴリズムが確率的勾配ランジュバンダイナミクスによる事後分布サンプリングを実行
  3. リアルタイムで有効サンプル数ESS、混合時間、Gelman-Rubin R̂、確率的バイアス、ランジュバンノイズを監視し、R̂ < 1.1達成時に収束判定

具体的な計算例

ロジスティック回帰モデル(次元d=20)でSGLD実行時、ステップサイズα=0.001、バッチサイズm=64、データセットN=5000、反復回数10000の条件下で、ランジュバンノイズスケール β^(-1)=0.1を設定。結果として確率的バイアス0.0045、ESS約2800(有効率56%)、混合時間約1200反復、R̂=1.08を観測。ステップサイズをα=0.0005に低下させるとR̂=1.04に改善。

実務での注意点

  1. 高次元ベイズ推定(d>50)ではステップサイズ過大設定時にランジュバンノイズが支配的となり事後平均推定量が0.015以上のバイアス発生、バッチサイズNに対しm≤N/20を推奨
  2. 混合時間がデータセット規模N増加時に O(log N)ではなく O(N)で悪化する場合、学習率スケジュール α_t = α_0 / t^(2/3)適用で改善可能
  3. 複数チェーン実行(4~8並列)でR̂計算精度向上、単一チェーンではESS<1000時にR̂推定値の信頼性低下