15  生成モデル II ── ノイズから像を作り出す

前章で、我々は一つの戦略に辿り着いた。単純な分布 p(z) を、写像を通して押し出し、複雑なデータ分布を作る。VAE はその実装だった。

だが VAE には不満もある。生成される画像がぼやけるのだ。原因の一端は ELBO の再構成項にある—\log p_\theta(x\mid z) をガウス分布で書けば、それは二乗誤差になり、二乗誤差を最小化する画像は「ありうる画像の平均」になってしまう。平均は、どの一枚にも似ていない。

本章では、この不満に対する三つの異なる応答を見る。

第一の応答(GAN)は、尤度を諦める。そもそも p_\theta(x) を書き下そうとするから無理が来る。「本物らしいか」を判定する別のネットワークを立て、それを騙せればよいことにする。

第二の応答(正規化フロー)は、写像を可逆に制限する。逆が計算できるなら、変数変換の公式で尤度が厳密に計算できる。ここで第5章第2節のヤコビアン行列式が、いよいよ主役になる。

第三の応答(拡散モデル)は、写像を少しずつにする。一気に z から x へ飛ぶのではなく、ノイズを少しずつ取り除く。各ステップが易しければ、全体も学習できる。

この三つ目が、いま最も広く使われている。だが順を追って見ていこう—それぞれが何を諦め、何を得たのかが見えるようにしたい。

ヒント本章のガイド

第1〜3節が GAN、第4〜5節がフロー、第6〜8節が拡散、第9〜10節が逆問題への応用である。

第4〜5節が本章の数学的な核である。第5章第2節の変数変換の公式が、ここで完全に回収される。フローを先に理解しておくと、拡散モデルの連続時間版(第7節)が「同じ話の別の書き方」に見えてくる。

第7節では、第7章のギブス分布がもう一度顔を出す。\log を取ると分配関数が消える—第7章で我々を苦しめた Z が、スコアを使うと問題にならなくなる。ここは気持ちがよいところである。

第10節は脳活動からの画像再構成を扱う。第12章の測定論が効いてくる場面である。


1. GAN ── 生成器と識別器のゲーム

発想

Goodfellow ら (2014) の敵対的生成ネットワーク(generative adversarial network, GAN)は、生成の問題を二人のゲームとして定式化する。

生成器 G は、ノイズ z \sim p(z) を受け取って偽物の画像 G(z) を作る。贋作者である。

識別器 D は、画像を受け取って「本物か偽物か」を判定する。D(x) \in [0,1] が「本物である確率」を表す。鑑定人である。

両者は反対の目的を持つ。識別器は正しく見分けたい。生成器は見分けられたくない。目的関数は

\min_G \max_D \; V(D,G) = \mathbb{E}_{x \sim p_{\text{data}}}\big[\log D(x)\big] + \mathbb{E}_{z\sim p(z)}\big[\log\big(1 - D(G(z))\big)\big]

第一項は「本物を本物と判定したい」、第二項は「偽物を偽物と判定したい」。識別器はこれを最大化し、生成器は最小化する。

尤度がどこにも出てこないことに注目してほしい。p_\theta(x) を書き下していない。だから GAN は暗黙的生成モデル(implicit generative model)と呼ばれる。サンプルは作れるが、そのサンプルの確率は計算できない。

最適識別器を求める

このゲームの均衡はどこにあるのか。まず、G を固定したときの最適な D を求めよう。

生成器が誘導する分布を p_g と書く。目的関数を積分の形に書き直す。

V(D,G) = \int \Big[\, p_{\text{data}}(x) \log D(x) + p_g(x)\log\big(1-D(x)\big) \,\Big] dx

x について独立に最大化すればよい。D(x) = t と置いて、被積分関数を

h(t) = a\log t + b\log(1-t), \qquad a = p_{\text{data}}(x),\; b = p_g(x)

とする。微分してゼロと置く。

h'(t) = \frac{a}{t} - \frac{b}{1-t} = 0 \quad\Longrightarrow\quad a(1-t) = bt \quad\Longrightarrow\quad t = \frac{a}{a+b}

つまり最適識別器は

D^*(x) = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_g(x)}

読み方を確認しよう。本物の密度が高いところでは D^* は 1 に近く、偽物の密度が高いところでは 0 に近い。そして両者が一致する点では D^* = 1/2 である—鑑定人が「五分五分」としか言えなくなる。

目的関数の正体

この D^* を代入すると、生成器が最小化している量の正体が見える。

\begin{aligned} V(D^*, G) &= \mathbb{E}_{p_{\text{data}}}\!\left[\log \frac{p_{\text{data}}}{p_{\text{data}}+p_g}\right] + \mathbb{E}_{p_g}\!\left[\log \frac{p_g}{p_{\text{data}}+p_g}\right] \\ &= \mathbb{E}_{p_{\text{data}}}\!\left[\log \frac{p_{\text{data}}}{(p_{\text{data}}+p_g)/2}\right] + \mathbb{E}_{p_g}\!\left[\log \frac{p_g}{(p_{\text{data}}+p_g)/2}\right] - 2\log 2 &&\textsf{(分母に }2\textsf{ を出し入れした)}\\ &= \mathrm{KL}\!\left(p_{\text{data}} \,\Big\|\, \tfrac{p_{\text{data}}+p_g}{2}\right) + \mathrm{KL}\!\left(p_g \,\Big\|\, \tfrac{p_{\text{data}}+p_g}{2}\right) - 2\log 2 &&\textsf{(KL の定義)}\\ &= 2\, \mathrm{JS}(p_{\text{data}} \,\|\, p_g) - 2\log 2 &&\textsf{(JS ダイバージェンスの定義)} \end{aligned}

イェンセン・シャノン(JS)ダイバージェンスが出てきた。二つの分布の中点との KL を平均したもので、KL と違って対称であり、常に有限である。

だから GAN の学習は、p_gp_{\text{data}} に JS ダイバージェンスの意味で近づけている。最小値 -2\log 2 を取るのは p_g = p_{\text{data}} のときで、そのとき D^* \equiv 1/2 になる。理論的には、望ましい均衡に到達する。

ここがポイント

GAN は尤度を書き下さない。だが最適識別器を代入すると、生成器が最小化しているのが JS ダイバージェンスだと分かる。尤度なしでも、分布間の距離を縮めているわけである。


2. GAN の困難 ── モード崩壊と表現誤差

理論はきれいだが、実際の GAN は扱いにくいことで知られている。主な困難を三つ挙げる。

モード崩壊

モード崩壊(mode collapse)とは、生成器がデータ分布の一部の峰(モード)しか再現しなくなる現象である。手書き数字を学習させたのに、生成されるのが「1」ばかりになる、といったことが起きる。

なぜ起きるのか。生成器の目的は「識別器を騙すこと」だけである。多様性を出すことは、目的関数のどこにも書かれていない。もし「1」を完璧に作れば識別器を騙せるなら、他の数字を作る動機がない。

理論上の JS ダイバージェンスは多様性の欠如を罰するはずだが、それは識別器が最適であるという前提の上での話だ。有限のネットワークと有限のステップでは、識別器は最適から遠い。すると生成器は、識別器の弱点だけを突く解に落ち込みうる。

学習の不安定性

\min\max 問題は、単なる最小化より扱いが難しい。

通常の勾配降下法なら、目的関数の値が単調に下がっていく。ゲームではそうならない。生成器と識別器が交互に更新されると、値が振動したり、循環したりする。じゃんけんのように「グー→パー→チョキ→グー」と回り続ける状況が、連続的な設定でも起こる。

さらに、識別器が強くなりすぎると勾配が消える。D(G(z)) \approx 0(完全に見破られている)のとき、\log(1-D(G(z))) の勾配はほとんどゼロになる。生成器が学習できない。実装では \log(1-D(G(z))) を最小化する代わりに \log D(G(z)) を最大化する(non-saturating loss)という工夫が使われる。

表現誤差

三つ目は、GAN に限らず生成モデル一般の限界である。

生成器 G が到達できる画像の集合を \mathrm{Range}(G) = \{ G(z) : z \in \mathcal{Z}\} と書く。zd 次元なら、\mathrm{Range}(G) は高々 d 次元の集合である。画像空間の中の、薄い多様体にすぎない。

だから、真のデータがこの多様体の上にないなら、どんなに頑張っても届かない。この届かなさを表現誤差(representation error)と呼ぶ。Bora ら (2017) が逆問題の文脈で定式化した概念である。

\min_{z} \|x - G(z)\| > 0

この量は、第9節・第10節で決定的に効いてくる。生成モデルを事前分布として使って何かを復元するとき、復元結果は必ず \mathrm{Range}(G) の中に落ちる。真実がその外にあれば、決して届かない。


3. 条件付き生成と画像変換

素の GAN は、ノイズから画像を作るだけである。実用には「何を作るか」を指定したい。

条件付き GAN(cGAN)は、生成器と識別器の両方に条件 c を与える。G(z, c)D(x, c) とするだけである。c がクラスラベルなら「猫の画像を作れ」と指定できる。

pix2pix は、c を画像そのものにする。線画から写真、航空写真から地図—画像から画像への変換になる。ただし対応するペアのデータが必要である。

CycleGAN はペアなしで変換を学ぶ。馬の画像の集合とシマウマの画像の集合があればよく、「この馬がこのシマウマに対応する」という情報は要らない。鍵となるのが巡回一貫性(cycle consistency)である。

F(G(x)) \approx x, \qquad G(F(y)) \approx y

馬をシマウマにして、それをまた馬に戻したら、元の馬に戻ってほしい。この制約が、意味のある対応を選び出す。

なぜ制約が要るのか。ペアなしの設定では、「馬の集合をシマウマの集合に写す写像」は無数にある。すべての馬を同じ一枚のシマウマに写しても、分布としては(識別器を騙せる限り)構わない。巡回一貫性は、この退化を防ぐ—元に戻せるということは、情報を捨てていないということだからだ。

第13章の言葉で言えば、G の核を小さく保つ制約である。


4. 正規化フロー ── ヤコビアン行列式が主役になる

GAN は尤度を諦めた。諦めない道はないのか。

ある。写像を可逆に制限すればよい。

変数変換の公式(第5章の回収)

第5章第2節で、確率密度の変数変換を扱った。可逆な写像 x = g(z) に対し、

p_X(x) = p_Z(z)\, \left| \det \frac{\partial g}{\partial z} \right|^{-1} = p_Z\big(g^{-1}(x)\big)\, \left| \det \frac{\partial g^{-1}}{\partial x} \right|

対数を取ると、

\log p_X(x) = \log p_Z\big(g^{-1}(x)\big) + \log\left| \det \frac{\partial g^{-1}}{\partial x} \right|

これが尤度である。厳密に。近似も下界もない。g が可逆で、ヤコビアン行列式が計算できさえすれば、データの対数尤度がそのまま書ける。

第5章では、この公式を「なぜ変換でモードが動くのか」を説明するために使った。いまは生成モデルの設計原理として使う。同じ式が、二度違う役目を果たしている。

|\det J| は「体積が何倍になったか」だから、密度はその逆数倍になる—引き伸ばせば薄く、押し縮めれば濃い。単峰の p_Z から多峰の p_X が作れるのは、写像が場所によって違う伸縮をするからである。第5節で詳しく見る。

設計の困難と解決

尤度が厳密に書ける—だが代償がある。三つの条件を同時に満たす写像を作らねばならない。

  1. 可逆であること
  2. ヤコビアン行列式が高速に計算できること
  3. 表現力が十分あること

2 が厳しい。一般の d\times d 行列の行列式は O(d^3) かかる。画像なら d は数万だから、絶望的である。

カップリング層(coupling layer)という工夫が、これを解決する。入力を二つに分ける。z = (z_1, z_2) として、

\begin{aligned} x_1 &= z_1 \\ x_2 &= z_2 \odot \exp\big(s(z_1)\big) + t(z_1) \end{aligned}

前半はそのまま通し、後半だけを前半に依存した形で変換する。st は任意のニューラルネットでよい(可逆である必要すらない)。

可逆性を確かめよう。x_1 から z_1 はそのまま。z_1 が分かれば s(z_1), t(z_1) が計算でき、z_2 = (x_2 - t(z_1))\odot\exp(-s(z_1)) で復元できる。逆写像が明示的に書ける。

ヤコビアンを見よう。ブロックで書くと

\frac{\partial x}{\partial z} = \begin{pmatrix} I & 0 \\ \dfrac{\partial x_2}{\partial z_1} & \mathrm{diag}\big(\exp(s(z_1))\big) \end{pmatrix}

下三角行列である。三角行列の行列式は対角成分の積だから、

\log\left|\det \frac{\partial x}{\partial z}\right| = \sum_j s_j(z_1)

O(d^3)O(d) になった。左下のブロックがどんなに複雑でも、行列式には効かない—これがカップリング層の妙味である。

あとは、どの成分を「前半」にするかを層ごとに入れ替えながら積み重ねればよい。可逆写像の合成は可逆であり、ヤコビアン行列式は積(対数なら和)になる。

ここがポイント

正規化フローは、可逆性と引き換えに厳密な尤度を手に入れる。カップリング層はヤコビアンを三角行列にすることで、行列式の計算を O(d^3) から O(d) に落とす。左下ブロックが行列式に効かないという三角行列の性質が、設計全体を支えている。

限界

フローには構造上の制約がある。潜在変数と観測変数の次元が同じでなければならない。可逆なのだから当然だが、これは「低次元の潜在表現を得る」という目的とは相容れない。VAE のように情報を圧縮することができない。

また、可逆性の制約はアーキテクチャの自由度を大きく削る。同じパラメータ数なら、GAN や拡散モデルのほうが表現力が高いことが多い。

それでも尤度が厳密に計算できることの価値は大きい。モデルの比較ができる。異常検知に使える。そして次節で見るように、密度がどう歪むかを正確に議論できる。


5. ヤコビアンが密度をどう歪めるか

前節の |\det J| を、もう少し掘り下げる。ここは生成モデル全般の理解に効く。

単峰から多峰へ

素朴な疑問から始めよう。p_Z が単峰(標準正規分布)なのに、p_X が多峰になれるのはなぜか。

一次元で考える。p_Z = \mathcal{N}(0,1)、写像を x = g(z) とする。密度は

p_X(x) = \frac{p_Z(z)}{|g'(z)|}, \qquad z = g^{-1}(x)

|g'(z)| が小さいところで、密度が大きくなる。g の傾きが緩やかな区間は、z の広い範囲を x の狭い範囲に押し込むから、そこに確率が集中する。

だから、g が「緩やか → 急 → 緩やか」という形をしていれば、p_X は二つの峰を持つ。写像の傾きの変化が、峰を作る。

逆に言えば—峰を作るには、写像がどこかで急峻でなければならない。これがフローの学習が難しくなる一因である。急峻な写像は数値的に不安定で、\log|\det J| が発散しかける。

モードは変換で動く

第5章第2節で導いたもう一つの事実が、ここで実務的な意味を持つ。変換するとモードの位置が動く。 p_X = p_Z/|g'| を微分してゼロと置くと g'' の項が残るので、p_Z のモード z^*p_X のモードに写らない—g が線形のときだけ対応する。

含意はこうである。潜在空間で「もっともらしい」点を選んでも、データ空間で最頻の出力が得られるとは限らない。潜在空間の原点(標準正規分布のモード)をデコードした画像が、「もっとも典型的な画像」だとは言えないのである。

モード崩壊の幾何

第2節のモード崩壊を、この視点から見直そう。

生成器 G が誘導する分布 p_g は、p_ZG で押し出したものである。データ分布が K 個の峰を持つなら、G はそれを再現するために K 箇所で「傾きを緩やかに」しなければならない。

もし G が滑らかすぎると、峰を作り分けられない。逆に無理に作り分けようとすると、峰と峰の間で G が急峻になり、そこは学習が不安定になる。

そしてもう一つ。峰の間の低密度領域を、G は必ず通らねばならない。\mathcal{Z} が連結なら \mathrm{Range}(G) も連結だから、二つの峰をつなぐ経路の上に、データにはない中間的な画像が生成されてしまう。「馬と鳥の中間のような画像」が出てくるのは、この位相的な制約による。

モード崩壊とは、生成器がこの困難から逃げて、一つの峰だけを作る解に落ち着くことである。目的関数がそれを許してしまう、というのが第2節の議論だった。

ヒント手を動かす

一次元で、単峰から二峰を作る写像を構成しよう。コードは コード/15_bimodal.py にある。

p_Z = \mathcal{N}(0,1)g(z) = z + a\tanh(bz)a,b>0)とする。g'(z) = 1 + ab\,\mathrm{sech}^2(bz) である。

def density(a, b, xs):
    """g(z) = z + a tanh(bz) による p_X を数値で作る。"""
    z = np.linspace(-8, 8, 200_001)
    x = z + a*np.tanh(b*z)
    gp = 1 + a*b/np.cosh(b*z)**2      # g'(z)
    pz = np.exp(-z**2/2)/np.sqrt(2*np.pi)
    px = pz/gp                        # p_X = p_Z/|g'|
    return np.interp(xs, x, px)

def n_modes(a, b):                    # 峰の数を数える
    xs = np.linspace(-6, 6, 4001)
    p = density(a, b, xs)
    d = np.diff(np.sign(np.diff(p)))  # 傾きの符号の変化
    return int((d < 0).sum()), xs, p

px = pz/gp の一行が、本文の変数変換の式そのものである。割り算になっているので、g' が大きいほど密度は薄くなる。

a 0.5 1.0 1.0 2.0 3.0
b 1.0 1.0 2.0 2.0 2.0
p_X の峰の数 1 1 2 2 2
g'(0) = 1+ab 1.5 2.0 3.0 5.0 7.0

ab がある大きさを超えると、峰が二つになる。境目は g'(0) が 2.0 と 3.0 のあいだにある。

a=3, b=2 のときを詳しく見よう。峰は x \approx \pm 3.94 に立ち、z=0p_Z のモード)の行き先 g(0)=0 は、密度 0.057 の谷になっている。モードが谷に写ったのだ。

そしてその谷こそ、g' がいちばん大きい場所である(g'(0) = 1+ab = 7)。p_X = p_Z/|g'| だから、g' が大きいところで密度は薄くなる。

「峰を作るには、どこかで急峻にならねばならない」—本文の主張が、数字で見えたことになる。


6. 拡散モデル(離散時間)

三つ目の応答である。そして現在、画像生成の主流はこれである。

発想 ── 壊すのは易しい

生成は難しい。だが壊すのは易しい。

画像に少しずつノイズを足していけば、やがて純粋なノイズになる。この過程は学習など要らない—ただノイズを足すだけである。

ならば、その逆をたどればよい。純粋なノイズから始めて、少しずつノイズを取り除いていけば画像になる。各ステップで取り除くノイズはわずかだから、その一歩ずつなら学習できるかもしれない。

これが拡散モデルの発想である。一気に飛ぶ代わりに、易しい一歩を何百回も繰り返す。

全体の流れを 図 1 に示す。

図 1: 拡散モデルの前向き過程と逆向き過程(模式)。前向きはノイズを足していくだけで、学習するパラメータを持たない。逆向きだけを学習する。しかもその学習は「足されたノイズは何だったか」を当てる回帰に帰着する。

前向き過程

データ x_0 から始めて、T ステップかけてノイズを足す。

q(x_t \mid x_{t-1}) = \mathcal{N}\big(x_t;\; \sqrt{1-\beta_t}\, x_{t-1},\; \beta_t I\big)

\beta_t は小さな正の数(ノイズスケジュール)である。\sqrt{1-\beta_t} を掛けて少し縮め、分散 \beta_t のノイズを足す。

この過程には学習パラメータがない。完全に手で決めてしまう。

便利な性質がある。何ステップも合成した結果が、閉じた形で書ける。\alpha_t = 1-\beta_t\bar\alpha_t = \prod_{s=1}^{t}\alpha_s と置くと、

q(x_t \mid x_0) = \mathcal{N}\big(x_t;\; \sqrt{\bar\alpha_t}\, x_0,\; (1-\bar\alpha_t) I\big)

つまり任意の t について、一発でサンプルできる。

x_t = \sqrt{\bar\alpha_t}\, x_0 + \sqrt{1-\bar\alpha_t}\, \epsilon, \qquad \epsilon \sim \mathcal{N}(0,I)

t が大きくなると \bar\alpha_t \to 0 となり、x_T はほぼ標準正規分布になる。

この式の形に見覚えがあるはずだ。前章の再パラメータ化トリック z = \mu + \sigma\odot\epsilon と同じ構造である。だから微分可能であり、学習に使える。

逆向き過程

生成は逆をたどる。p_\theta(x_{t-1}\mid x_t) をニューラルネットで学習する。

\beta_t が十分小さければ、逆向きの遷移もガウス分布で近似できることが知られている。だから

p_\theta(x_{t-1}\mid x_t) = \mathcal{N}\big(x_{t-1};\; \mu_\theta(x_t, t),\; \sigma_t^2 I\big)

とおいて、\mu_\theta を学習すればよい。

目的関数がノイズ予測になる

学習の目的関数は、前章と同じ ELBO である。拡散過程を潜在変数モデル(x_1, \dots, x_T が潜在変数)と見なせば、

\log p_\theta(x_0) \ge \mathbb{E}_q\left[ \log \frac{p_\theta(x_{0:T})}{q(x_{1:T}\mid x_0)} \right]

前章の道具がそのまま使える。拡散モデルは、階層的な潜在変数を持つ VAE の一種として理解できる。

この ELBO を整理していくと、各ステップでの KL 項の和になる。そして Ho ら (2020) が示したのは、適当な再パラメータ化のもとで、目的関数が驚くほど単純な形になるということだった。

L_{\text{simple}} = \mathbb{E}_{x_0,\, \epsilon,\, t} \Big[\; \big\| \epsilon - \epsilon_\theta\big(\sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon,\; t\big) \big\|^2 \;\Big]

読み下そう。x_0 にノイズ \epsilon を足して x_t を作る。ネットワーク \epsilon_\thetax_tt を渡し、「足されたノイズは何だったか」を当てさせる。その二乗誤差を最小化する。

たったこれだけである。GAN のような敵対的学習も、フローのような可逆性の制約も要らない。単なる回帰問題になった。これが拡散モデルの学習が安定している理由である。

ここがポイント

拡散モデルの学習は「ノイズを当てる回帰」に帰着する。生成という難しい問題を、易しい一歩の繰り返しに分解したことの帰結である。敵対的なゲームも可逆性の制約もないので、学習が安定する。

生成の手順

学習が済んだら、x_T \sim \mathcal{N}(0,I) から始めて、t = T, T-1, \dots, 1 と逆にたどる。各ステップで \epsilon_\theta(x_t, t) を計算し、それを使って x_{t-1} をサンプルする。

代償もある。生成に T 回(典型的には数百〜千回)のネットワーク評価が要る。GAN が一回で済むのに比べて、はるかに遅い。この高速化が近年の研究の一大テーマである。


7. スコアと連続時間の定式化

拡散モデルには、もう一つの見方がある。こちらのほうが数学的には見通しがよい。

スコアとは何か

分布 p(x)スコア(score)とは、対数密度の勾配である。

s(x) = \nabla_x \log p(x)

これがなぜ嬉しいのか。第7章を思い出してほしい。ギブス分布は

p(x) = \frac{1}{Z} e^{-E(x)}

だった。分配関数 Z が計算できないことが、我々を苦しめた。ところが対数を取ると、

\log p(x) = -E(x) - \log Z

そして x で微分すると、

\nabla_x \log p(x) = -\nabla_x E(x)

Z が消えた。\log Zx によらない定数だから、微分で落ちる。

これは大きい。スコアを使えば、正規化定数を知らなくても分布を扱える。第7章で我々を苦しめた壁が、微分を一回するだけで消えてしまう。

スコアの意味も直感的である。\nabla_x \log p(x) は「密度が増える方向」を指す。この方向に少しずつ動けば、確率の高い領域に登っていける—生成に使えそうだ、と思えてくる。

スコアマッチング

スコアをどう学習するか。真の \nabla_x \log p_{\text{data}}(x) は分からない(p_{\text{data}} を知らないのだから)。

だがノイズを加えた分布については、話が変わる。x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t}\epsilon という関係から、x_0 を固定したときの条件付き分布のスコアが計算できる。

\nabla_{x_t} \log q(x_t \mid x_0) = -\frac{x_t - \sqrt{\bar\alpha_t}x_0}{1-\bar\alpha_t} = -\frac{\epsilon}{\sqrt{1-\bar\alpha_t}}

ノイズ \epsilon が、そのままスコアになっている(符号と定数倍を除いて)。

だから前節の「ノイズを予測する」ネットワーク \epsilon_\theta は、スコアを予測しているのと同じである。

s_\theta(x_t, t) = -\frac{\epsilon_\theta(x_t,t)}{\sqrt{1-\bar\alpha_t}}

前節の単純な回帰目的関数が、実は「スコアマッチング」という原理的な手続きだった—これが Song らの見方である。

確率微分方程式として

ステップ幅を無限小にすると、拡散過程は確率微分方程式(SDE)になる。

前向き過程は

dx = f(x,t)\,dt + g(t)\,dw

と書ける。dw はブラウン運動の増分である。第一項が決定的な流れ(ドリフト)、第二項がノイズ(拡散)である。

そして Song ら (2020) が用いたのは、この過程には逆時間版が存在するという結果である。

dx = \Big[ f(x,t) - g(t)^2\, \nabla_x \log p_t(x) \Big] dt + g(t)\, d\bar{w}

逆向きの SDE には、スコアが現れる。つまり—スコアさえ分かれば、時間を逆に流せる。ノイズから画像へ戻れる。

さらに、この SDE と同じ周辺分布を持つ決定的な常微分方程式(確率フロー ODE)も存在する。

\frac{dx}{dt} = f(x,t) - \tfrac{1}{2}g(t)^2\, \nabla_x \log p_t(x)

ノイズ項がない。決定的な軌道で生成できる。そしてこれは可逆だから—第4節の正規化フローと同じ枠組みに入る。尤度が(数値積分の精度の範囲で)計算できるのである。

三つの応答が、ここで一つにつながった。拡散モデルは、いま導いた確率フロー ODE として見ればフローの一種であり(逆時間 SDE そのものは確率過程なので、フローと呼べるのは決定的なこちらの形である)、その学習はスコアマッチングであり、そしてスコアはエネルギー関数の勾配だった—第7章のギブス分布に戻る。

ここがポイント

スコア \nabla_x\log p(x) を使うと、分配関数 Z が微分で消える。第7章の壁が回避される。そして逆時間 SDE にはスコアが現れるので、スコアを学習すればノイズから画像へ戻れる。拡散・フロー・エネルギーモデルは、この視点で一つになる。


8. Flow Matching と Rectified Flow

拡散モデルの弱点は生成の遅さだった。近年の一つの方向は、確率パスをもっと直接的に設計することである。

速度場を直接学習する

前節の確率フロー ODE は、dx/dt = v(x,t) という形の常微分方程式だった。ならば—この速度場 v を、直接学習してしまえばよいのではないか。

Lipman ら (2022) の Flow Matching はこの発想による。ノイズ x_0 \sim p_0 とデータ x_1 \sim p_1 を結ぶ経路をあらかじめ決め、その経路に沿った速度をネットワークに回帰させる。

もっとも単純な選択は直線である。

x_t = (1-t)\, x_0 + t\, x_1, \qquad t \in [0,1]

この経路の速度は dx_t/dt = x_1 - x_0 で、定数である。だから目的関数は

L = \mathbb{E}_{t, x_0, x_1}\Big[ \big\| v_\theta(x_t, t) - (x_1 - x_0) \big\|^2 \Big]

また回帰である。拡散モデルの「ノイズを当てる」と同じくらい単純だ。

何が嬉しいのか

直線経路の利点は、生成が速いことである。学習された速度場が本当に定数に近ければ、ODE を数ステップ—極端には一ステップ—で解ける。拡散モデルの数百ステップと比べて桁違いに速い。

Rectified Flow(Liu ら 2022)は、これをさらに推し進める。一度学習したモデルでノイズとデータのペアを作り直し、そのペアで再学習する。これを繰り返すと経路がどんどん真っ直ぐになっていく—「rectify(真っ直ぐにする)」の名の由来である。

一般化として見る

Flow Matching の枠組みは、拡散モデルを特別な場合として含む。確率パスの取り方を変えれば、拡散もフローも同じ式で書ける。

つまり、設計の自由度が「経路の選び方」に移った。どんな経路がよいかは課題に依存する。この自由度をどう使うかが、現在の研究の焦点の一つである。


9. 生成モデルを事前分布とした逆問題

ここから応用に移る。そして脳の話に戻る道でもある。

逆問題という設定

観測 y から、未知の x を復元したい。

y = A x + \text{noise}

A は既知の測定行列である。MRI の再構成、画像の超解像、欠損の補完—どれもこの形をしている。そして脳活動から知覚内容を復元する問題も、この形に書ける。

問題は、A が情報を落とすことである。y の次元が x より小さければ、解は一意に決まらない。無数の x が同じ y を生む。

だから何らかの事前知識が要る。古典的な圧縮センシングは「x はスパースである」という仮定を使った。

生成モデルを事前分布にする

Bora ら (2017) の提案は、スパース性の代わりに生成モデルを使うことだった。

\hat{z} = \arg\min_z \| y - A\,G(z) \|^2, \qquad \hat{x} = G(\hat{z})

「生成器が作れる画像のうち、観測にいちばん合うもの」を探す。\mathrm{Range}(G) という制約が、事前知識として働く。

利点は、事前知識がずっと具体的なことである。「スパース」より「自然画像らしい」のほうが強い制約であり、少ない観測から復元できる。Bora らは、同じ復元品質を達成するのに必要な測定数が、スパース性を使う場合より少なくて済むことを示した。

限界は第2節で見た表現誤差である。復元結果は必ず \mathrm{Range}(G) に落ちる。真の x がそこになければ、決して到達できない。

MAP か、事後サンプリングか

上の定式化は点推定(MAP 推定)である。一つの答えを返す。

だが本来、逆問題の答えは分布であるべきだ。同じ観測に整合する x が複数あるなら、その全体を示すほうが誠実である。

拡散事後サンプリング(DPS, Chung ら 2022)は、拡散モデルの各ステップに観測との整合性を組み込むことで、事後分布からのサンプリングを実現する。追加の学習が不要で、既存の拡散モデルをそのまま使えるのが利点である。

使い分けの目安。不確実性の定量化が要るなら事後サンプリング、速度が要るなら MAP。ただし注意が要る—サンプルが散ることと、不確実性が正しく較正されていることは別である。多様な出力が出るからといって、その分布が正しいとは限らない。較正は別途検証しなければならない。


10. 脳活動からの画像再構成

本章の締めくくりとして、本書がここまで積み上げてきたものが合流する場所を見る。第12章第10節では、デコーディング精度に「神経集団の情報」「測定装置の写像」「デコーダの能力」の三つが混じると整理した。本節では第四の要素—生成器が持っている知識—が加わる。

まず、言葉を整理する

脳活動から見ている画像を復元する。この問題を語る前に、用語を整理しておかねばならない。ここは混乱しやすい場所である。

第6章で我々は、神経科学の意味での符号化と復号を定義した—刺激から脳活動へが符号化、脳活動から刺激へが復号である。基準は刺激と応答のあいだの因果の向きだった。

一方、本章と前章で使ってきた機械学習の言葉では、符号化器が観測から潜在表現へ、復号器が潜在表現から観測へ写す。基準は因果ではなく、表現の抽象度である。

さて、ここからが本題だ。現代の再構成研究が扱うのは、脳活動と DNN の特徴量の関係である。この二つを結ぶ写像を、慣例では「エンコーディングモデル」(DNN 特徴量 → 脳活動)「デコーディングモデル」(脳活動 → DNN 特徴量)と呼んできた。

だが—この呼び名は、二つの言葉遣いのどちらから来ているのだろうか。

二つとも、同じ対象の潜在特徴である

Kamitani、Tanaka ら (2025) のレビューと Shirakawa ら (2025) が、ここに整理を与えている。後者は現代の再構成手法を翻訳器と生成器の二段のパイプラインとして並べ直し、どの手法がどちらの段に何を任せているのかを見比べられるようにした。着眼点はこうだ。

脳活動も DNN 特徴量も、同じ視覚的対象から作られた潜在特徴である(図 2)。

刺激 s を見たとき、脳はそれを処理して活動パターン b を作る。同じ刺激を DNN に入れれば、特徴量 z が出てくる。bz は、どちらも s という同じ原因から生じた結果である。

だとすれば、bz のあいだに因果の向きはない。脳活動が DNN 特徴量を引き起こすわけでも、その逆でもない。二つは兄弟なのである。

にもかかわらず「符号化/復号」と呼ぶと、あたかも一方が原因で他方が結果であるかのような非対称性が、言葉のうえで密輸入されてしまう。これが慣例の呼び名の問題点である。

そこで提案されるのが、次の呼び分けである。

Translator(翻訳器)脳潜在(脳側の潜在特徴)と機械潜在(機械側の潜在特徴)のあいだを翻訳する写像。どちらの向きも「翻訳」である。z = T(b)b = T'(z) も、対等な二つの言語のあいだの翻訳と見る。

Generator(生成器) — 機械潜在から画像を作る写像 x = G(z)。本章で扱ってきた生成モデルがここに入る。これは翻訳とは別の段である。

b \;\overset{T}{\underset{T'}{\longleftrightarrow}}\; z \;\overset{G}{\longrightarrow}\; x

図 2: Translator と Generator の枠組み(模式)。上段—刺激 s を原因として、脳は脳潜在 b を、DNN は機械潜在 z を作る。bz のあいだに因果の向きはないので、両者を結ぶ写像は「符号化/復号」ではなく双方向の翻訳と呼ぶ。生成器は、機械潜在から画像を作る別の段である。下段—三つの「エンコード/デコード」の使われ方。神経科学は因果の向き、機械学習は抽象度の向きを基準にしており、両者は同じ言葉で別のことを指している。

ここがポイント

「翻訳」という言い換えは、単なる用語の趣味ではない。三つの効き目がある。

第一に、密輸入された非対称性を外す。bz は同じ刺激の兄弟であって、どちらかが原本ということはない。

第二に、二つの分野の「デコーダ」が別物であることが見える。神経科学の「デコーディング」は脳活動から刺激までの全体を指すが、機械学習の「デコーダ」は潜在表現から観測を作る生成器を指す。翻訳器と生成器を分ければ、この取り違えが起きない。

第三に、評価が切り分けられる。翻訳がどれだけ効いたのかと、生成器がどれだけ効いたのかを、別々に問える。この節の後半で見るとおり、これが決定的に重要になる。

なぜ二段に分けるのか

用語の話から実務の話に戻ろう。なぜ翻訳と生成を分けるのか。

脳活動から直接ピクセルを予測しようとすると、データが足りない。fMRI の試行数はせいぜい数千である。一方、生成モデルは大量の自然画像で事前に訓練できる。「自然画像とはどういうものか」の知識を生成器に任せ、脳から翻訳するのは潜在特徴だけにする—この分業が効く。

そして翻訳器は、驚くほど単純でよい。典型的には線形回帰である。ここには含意がある—脳側とDNN側の潜在特徴が、線形の対応でつながる程度には似た構造を持っている、ということだ。第11章で表現幾何として測っていたのは、まさにこの「似ている度合い」だった。翻訳器が線形で足りるという経験的事実は、その幾何的な近さの、もっとも実用的な現れである。

Miyawaki ら (2008) は、この分業の原型にあたる手続きを用いている。局所的な画像要素のデコーダを組み合わせ、訓練時に提示していない図形を再構成できることを報告した。

「訓練時に提示していない」ことの重み

いま何気なく書いたこの条件が、実は決定的である。

もし訓練データに含まれる画像しか再構成できないなら、それは再構成ではなく分類である。「見ている画像は、この100枚のうちのどれか」を当てているにすぎない。

真に再構成と呼べるのは、訓練で見ていない刺激を復元できるときだけである。これは Miyawaki ら以来の要件であり、いまも有効な判定基準である。

生成事前分布は諸刃の剣

ここで第12章の測定論が効いてくる。以下は Shirakawa ら (2025) の分析に沿って進める。

生成モデルを事前分布に使うことの利点は、第9節で見た。少ない観測から、もっともらしい画像を復元できる。

だがその「もっともらしさ」は、どこから来ているのか。

  • 脳活動から読み取った情報から来ているのか
  • 生成モデルが持っている「自然画像らしさ」の知識から来ているのか

この二つが混ざる。そして後者の寄与が大きいほど、出力は「きれい」になる。人間の目には説得力が増す。だが脳から読み取れた情報は、増えていない。

極端な場合を考えれば分かりやすい。Translator の出力を完全に無視して、生成モデルにランダムな潜在変数を与えたとしよう。出てくるのは、鮮明で自然な画像である。説得力はある。だが脳とは何の関係もない。

現実の再構成は、この極端な場合と「完全に脳由来」の間のどこかにある。どこにあるのかを測る手続きが必要である。

出力次元崩壊

Shirakawa らはさらに、翻訳器の側にある構造的な限界を指摘している。

翻訳器は、限られた数の脳画像ペアで学習させる線形写像である。ここで訓練刺激が特徴空間の中で固まっていると、翻訳器が出力できる方向がその固まりの張る部分空間に潰れる。 これが出力次元崩壊(output dimension collapse)である(第13章第10節)。

崩壊が起きると、ゼロショットの再構成ができなくなる。 訓練で見ていない刺激を見せても、出力は訓練カテゴリのどれかへ引き寄せられる。そこに強力な生成器が付くと、引き寄せられた特徴からもっともらしい画像が作られる—分類と幻覚の組み合わせが、再構成のように見えてしまう。 実際、大規模データセットで訓練したテキスト誘導型の手法を別のデータセットで試すと、再構成は大きく崩れることが報告されている。

処方箋は二つの方向にある。 一つは訓練データの側で、特徴空間を広く覆うように刺激を選ぶこと。もう一つは翻訳器と特徴表現の側である。Otsuka、Nagano と Kamitani (2026) は、脳から特徴への写像がスパースであるときに変数選択が効くことを示し、データスケールが小さい領域での予測誤差を解析的に与えた。あわせて、脳活動を使わずに崩壊の程度を測る診断も提案されている。

構成性が効くのはここである。 特徴が独立な成分に分かれていれば、少ない訓練の組み合わせからでも、成分の組み合わせとして新しい出力を作れる。第13章で対称性の側から述べた構成的汎化が、再構成という具体的な課題で、そのまま実務上の要求になっている。

どう切り分けるか

いくつかの対照条件が使われる。

シャッフル対照。脳活動と刺激の対応をランダムに入れ替えて同じ手続きを回す。それでも「もっともらしい」画像が出るなら、その分は生成事前分布の寄与である。

訓練分布外での検証。生成モデルの訓練データに含まれないカテゴリの刺激で試す。事前分布に頼っている部分は、ここで崩れるはずである。

再構成と分類の分離。候補画像の中から選ぶ課題(識別)と、ゼロから作る課題(再構成)を区別して評価する。

評価の見た目への依存を減らす。人間が「似ている」と判断することと、脳の情報が復元されていることは、同じではない。

これは第12章の言葉で言えば、「デコーディング精度は何の測定か」という問いの、生成モデル版である。あそこでは、測定値に「神経集団の情報」「測定装置の写像」「デコーダの能力」の三つが混じっていると整理した。ここではさらに「生成事前分布の知識」という第四の要素が加わる。

説得力と妥当性は別物である。生成モデルが強力になるほど、両者の乖離は広がりうる。これは技術の進歩がそのまま解決してくれる類の問題ではない—むしろ進歩によって深刻になる問題である。

次章へ

本章で生成モデルの現代形を一通り見た。VAE、GAN、フロー、拡散、Flow Matching。そしてそれらが逆問題として脳のデコーディングにつながることも見た。

残っているのは、この道具立てを脳の理論として読み直すことである。

前章で導いた ELBO は、符号を反転させれば「自由エネルギー」と呼ばれる量になる。そしてその量を最小化することが脳のやっていることだ、という壮大な主張がある。次章はそこから始めて、本書全体の問い—表現とは何か、脳とAIの表現は一致するのか—に着地する。

確認問題

  1. [導出]GAN の目的関数において、生成器を固定したときの最適識別器 D^*(x) = p_{\text{data}}/(p_{\text{data}}+p_g) を導出せよ。(第1節)

  2. [導出]D^* を代入した目的関数が JS ダイバージェンスで書けることを示せ。(第1節)

  3. [確認]モード崩壊が起きる理由を、GAN の目的関数の観点から説明せよ。(第2節)

  4. [確認]表現誤差 \min_z \|x - G(z)\| とは何か。潜在変数の次元が d のとき、\mathrm{Range}(G) について何が言えるか。(第2節)

  5. [導出]カップリング層 x_1 = z_1x_2 = z_2\odot\exp(s(z_1)) + t(z_1) について、(a) 逆写像を明示的に書け、(b) ヤコビアンが三角行列になることを示し、(c) その対数行列式を求めよ。(第4節)

  6. [導出]p_Z のモード z^*p_X のモードに写らないことを示せ。写るのはどんな場合か。(第5節)

  7. [導出]スコア \nabla_x \log p(x) を使うと分配関数 Z が問題にならない理由を、第7章のギブス分布から出発して示せ。(第7節・第7章第3節)

  8. [考える]脳活動と DNN 特徴量を結ぶ写像を「符号化/復号」ではなく「翻訳」と呼ぶ理由を述べよ。そのうえで、再構成画像の「もっともらしさ」が脳由来か生成事前分布由来かを切り分ける方法を、一つ考案せよ。(第10節・第6章第1節)

参考文献

  • Goodfellow, I. et al. (2014) Generative adversarial networks — GAN の原典[1節]
  • Rezende, D. J. & Mohamed, S. (2015) Variational inference with normalizing flows — フロー[4節]
  • Ho, J., Jain, A. & Abbeel, P. (2020) Denoising diffusion probabilistic models — DDPM[6節]
  • Song, Y. et al. (2020) Score-based generative modeling through stochastic differential equations — スコアと SDE[7節]
  • Lipman, Y. et al. (2022) Flow matching for generative modeling; Liu, X. et al. (2022) Rectified flow[8節]
  • 岡野原大輔『拡散モデル』 — 日本語での標準的な解説
  • Miyawaki, Y. et al. (2008) Visual image reconstruction from human brain activity. Neuron — 再構成の初期の仕事[10節]
  • Kamitani, Y., Tanaka, K. et al. (2025) Visual image reconstruction from brain activity via latent representation. Annu Rev Vis Sci — 本章第10節の枠組みの出典。Translator–Generator
  • Shirakawa, K. et al. (2025) Spurious reconstruction from brain activity. Neural Networks見せかけの再構成と出力次元崩壊[10節]。評価の落とし穴を具体的に示している
  • Otsuka, K., Nagano, Y. & Kamitani, Y. (2026) Overcoming output dimension collapse: when sparsity enables zero-shot brain-to-image reconstruction at small data scales. TMLR — 崩壊の数学的解析と処方[10節]