JA EN
体系生成モデル
·★ 会員·論文·15分で読めます

拡散モデルの数学 — スコアとSDEで見る生成

拡散モデルを「ノイズを足して引く」の一段下、スコア(対数確率の勾配)の言葉で捉え直す。なぜノイズ除去がスコア推定と同じことなのか、前向き・逆向きSDEと確率フローODEが何を言っているのか、そしてその式が推論設定のつまみにどう化けるかまで。

対象textタスクgeneration

Generative Modeling by Estimating Gradients of the Data Distribution


標高は諦めて、傾きだけを覚える

夜の山中で、地図もGPSもないまま頂上を目指すとします。自分の標高が何メートルかを知る方法はありません。それでも登れます。足元の傾きさえ分かれば、上り坂の方へ一歩ずつ進めばいいからです。

生成モデルが直面しているのは、まさにこの状況です。「それらしい画像」の確率分布 p(x)p(x) を直接学ぼうとすると、必ず正規化定数が邪魔をします。モデルをエネルギー関数 Eθ(x)E_\theta(x) で書くと、確率はこうなります。

pθ(x)=eEθ(x)Zθ,Zθ=eEθ(x)dxp_\theta(x) = \frac{e^{-E_\theta(x)}}{Z_\theta}, \qquad Z_\theta = \int e^{-E_\theta(x)}\,dx
(1)

ZθZ_\theta は「全部足したら1になるように」割るための数で、積分はあらゆる画像にわたって取ります。256×256256\times256 のカラー画像なら約20万次元の空間全体の積分です。誰にも計算できません。

ところが、両辺の対数を取ってから xx で微分すると、ZθZ_\thetaxx を含まない定数なので消えてしまいます。

sθ(x)=xlogpθ(x)=xEθ(x)s_\theta(x) = \nabla_x \log p_\theta(x) = -\nabla_x E_\theta(x)
(2)

これがスコアです。名前は統計学のスコア関数(対数尤度の勾配)から来ていますが、パラメータではなくデータ xx の方で微分するのが拡散モデル流です。x\nabla_x は「xx の各成分で微分して並べたもの」、つまり入力と同じ形のベクトルです。画像なら、画素と同じ枚数・同じ解像度の矢印の場が出てくると思ってください。意味は「この画素をほんの少しどちらへ動かせば、それらしさが上がるか」。標高そのものではなく、傾きだけを覚える作戦です。

拡散モデル全体の流れ(ノイズを足す前向き過程と、引く逆過程)は拡散モデルを1から理解するで扱いました。この記事はその一段下、なぜあの手続きが正しいのかをスコアの言葉で見ていきます。

傾きだけで、どうやって標本を作るのか

スコアが手に入ったとして、そこからサンプルを取り出すのがランジュバン動力学です。式はこれだけです。

xk+1=xk+ε2sθ(xk)+εzk,zkN(0,I)x_{k+1} = x_k + \frac{\varepsilon}{2}\, s_\theta(x_k) + \sqrt{\varepsilon}\, z_k, \qquad z_k \sim \mathcal{N}(0, I)
(3)

ε\varepsilon は歩幅、zkz_k は毎回引き直す標準正規乱数です。言い換えると「濃い方へ半歩進んで、サイコロの分だけよろける」を延々と繰り返すだけ。ε\varepsilon を十分小さく、回数を十分多くすれば、xkx_k の分布は pθp_\theta に近づいていきます。

第2項の揺らぎが本質的です。これを外すと単なる勾配上昇になり、一番確率の高い1点に張り付いて動かなくなります。それは「最頻値を求めること」であって「分布から標本を引くこと」ではありません。ノイズがあるから斜面をうろつき、確率の高い場所には長く、低い場所には短く滞在する——その滞在時間の比が、そのまま確率になります。

具体例で手触りを掴みましょう。p(x)=N(0,σ2)p(x) = \mathcal{N}(0, \sigma^2) のスコアは、logp(x)=x2/(2σ2)+const\log p(x) = -x^2/(2\sigma^2) + \text{const} を微分して

s(x)=xσ2s(x) = -\frac{x}{\sigma^2}
(4)

原点に向かって引き戻すバネです。中心から遠いほど強く引かれ、σ\sigma が小さい(分布が尖っている)ほどバネが硬い。つまりガウス分布に対するランジュバンは、放物線の谷を球が転がるのに、毎回ランダムな小突きを加えたものと完全に同じ運動です。歩幅を上げすぎるとどうなるかも、放物線の話とそっくり同じことが起きます。

FIG 1ガウス分布のスコアは −x/σ²、すなわち谷へ引くバネそのもの。学習率スライダーを歩幅 ε だと思って上げていくと、ランジュバンが発散してサンプラーが壊れる瞬間まで手元で再現できます

「ノイズ除去」と「スコア推定」が同じことである理由

ここで大きな問題があります。スコアの正解ラベルは、どこにもありません。真の xlogp(x)\nabla_x \log p(x) を知っているなら、そもそも生成モデルは要らないのです。

素朴なスコアマッチング(Hyvärinen, 2005)は、部分積分を使って未知の pp を目的関数から消し去り、12sθ(x)2+tr(xsθ(x))\frac{1}{2}\|s_\theta(x)\|^2 + \operatorname{tr}(\nabla_x s_\theta(x)) の期待値を最小化すればよい形に持ち込みます。理論は完璧ですが、右の項はヤコビ行列の対角和で、次元の数だけ逆伝播が要ります。20万次元の画像では話になりません。

突破口は、データをわざと汚すことでした。きれいなデータの分布は分かりませんが、そこにガウスノイズを足した条件付き分布なら、こちらが作ったのだから完全に分かっています。zN(0,I)z \sim \mathcal{N}(0,I) として x~=x+σz\tilde{x} = x + \sigma z と汚せば pσ(x~x)=N(x~;x,σ2I)p_\sigma(\tilde{x}\mid x) = \mathcal{N}(\tilde{x}; x, \sigma^2 I)、そのスコアはさっきのバネの式そのものです。

x~logpσ(x~x)=x~xσ2=zσ\nabla_{\tilde{x}} \log p_\sigma(\tilde{x} \mid x) = -\frac{\tilde{x} - x}{\sigma^2} = -\frac{z}{\sigma}
(5)

つまり「汚れたデータから元へ戻る向き」が、そのまま条件付きスコアです。デノイジングスコアマッチング(Vincent, 2011)が保証するのは、これを教師に回帰すれば最適解が周辺分布 のスコアになる、という事実です。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. Generative Modeling by Estimating Gradients of the Data Distribution. arXiv:1907.05600論文ページ·PDF
  2. Score-Based Generative Modeling through Stochastic Differential Equations. arXiv:2011.13456論文ページ·PDF
  3. Elucidating the Design Space of Diffusion-Based Generative Models. arXiv:2206.00364論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です