15 分布と生成 ── ノイズから像を作り出す
前章で、われわれは一つの戦略に辿り着いた。単純な分布 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〜7節が拡散、第8節がその一般化、第9〜10節が逆問題への応用である。
第4〜5節が本章の数学的な核である。第5章第2節の変数変換の公式が、ここで完全に回収される。第7〜8節ではノイズ除去と移動を学ぶ発想をつなぎ、連続時間の詳しい式は発展編Cで扱う。
第7節では、第7章のギブス分布がもう一度顔を出す。\log を取って画像の値で微分すると分配関数が消える—第7章でわれわれを苦しめた Z が、スコアを使うと問題にならなくなる。ここは気持ちがよいところである。
第10節は脳活動からの画像再構成を扱う。第12章の測定理論が効いてくる場面である。
1. GAN ── 生成器と識別器のゲーム
発想
Goodfellow ら (2014) の敵対的生成ネットワーク(generative adversarial network, GAN)は、生成の問題を二人のゲームとして定式化する。
画像の成分を一列に並べて x \in \mathbb{R}^n、生成の出発点になるノイズを z \in \mathbb{R}^d とする(n が画像の成分数、d が潜在変数の次元である)。
生成器 G: \mathbb{R}^d \to \mathbb{R}^n は、ノイズ z \sim p(z) を受け取って偽物の画像 G(z) を作る。贋作者である。
識別器 D: \mathbb{R}^n \to [0,1] は、画像を受け取って「本物か偽物か」を判定する。D(x) \in [0,1] が「本物である確率」を表す。鑑定人である。
両者は反対の目的を持つ。識別器は正しく見分けたい。生成器は見分けられたくない。この競争を、一つの実数 V(D, G) で表す。\mathbb{E}_{x \sim p_{\text{data}}} は本物の画像についての平均、\mathbb{E}_{z \sim p(z)} は出発点のノイズについての平均である。\max_D は「生成器を固定して、V が最大になるように識別器のパラメータを選ぶ」、外側の \min_G は「その最大値が小さくなるように生成器のパラメータを選ぶ」という意味だ。生成器が動かせるのは第二項だけで、偽物に対する D(G(z)) を大きくして識別器を騙そうとする。目的関数は
\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_g を p_{\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}\} と書く。z が d 次元なら、\mathrm{Range}(G) は高々 d 次元の集合である。画像空間の中の、薄い多様体にすぎない。だから、真のデータがこの多様体の上にないなら、どんなに頑張っても届かない。この届かなさを表現誤差(representation error)と呼ぶ。Bora ら (2017) が逆問題の文脈で定式化した概念である。
\varepsilon_{\text{rep}}(x) = \inf_{z} \|x - G(z)\|
\mathrm{Range}(G) の点を x に任意に近づけられなければ \varepsilon_{\text{rep}}(x) > 0 である。像の外でも、像の点を任意に近づけられるなら下限は0になる(最小値が達成されない場合があるため、\min ではなく下限を書く)。この量は、第9節・第10節で決定的に効いてくる。生成モデルを事前分布として使って何かを復元するとき、復元結果は必ず \mathrm{Range}(G) の中に落ちる。真実がその外にあれば、決して届かない。
3. 条件付き生成と画像変換
素の GAN は、ノイズから画像を作るだけである。実用には「何を作るか」を指定したい。
条件付き GAN(cGAN)は、生成器と識別器の両方に条件 c を与える。G(z, c)、D(x, c) とするだけである。c がクラスラベルなら「猫の画像を作れ」と指定できる。
pix2pix は、c を画像そのものにする。線画から写真、航空写真から地図—画像から画像への変換になる。ただし対応するペアのデータが必要である。
CycleGAN はペアなしで変換を学ぶ。馬の画像の集合とシマウマの画像の集合があればよく、「この馬がこのシマウマに対応する」という情報は要らない。鍵となるのが巡回一貫性(cycle consistency)である。片道の変換で元の内容を失わないように、別の領域へ変換してから戻した画像が、出発点の画像に近くなることを求める。
記号を決めておく。馬の画像を x、シマウマの画像を y とし、馬からシマウマへの変換を G、戻す方向の変換を F と書く。G と F の二つを同時に学習するのであって、はじめから互いの逆写像だと仮定するわけではない。
F(G(x)) \approx x, \qquad G(F(y)) \approx y
馬をシマウマにして、それをまた馬に戻したら、元の馬に戻ってほしい。この制約が、退化した対応を排除する。ただし、意味の上で正しい対応を一つに選ぶとまでは言えない—逆変換のための情報を出力にこっそり埋め込む解も、巡回一貫性を満たしうるからである。
なぜ制約が要るのか。ペアなしの設定では、「馬の集合をシマウマの集合に写す写像」は無数にある。すべての馬を同じ一枚のシマウマに写しても、分布としては(識別器を騙せる限り)構わない。巡回一貫性は、この退化を防ぐ—元に戻せるということは、情報を捨てていないということだからだ。
第13章第6節の言葉で言えば、G が情報を捨てないようにする—核を自明に保つ—制約である。
4. 正規化フロー ── ヤコビアン行列式が主役になる
GAN は尤度を諦めた。諦めない道はないのか。
ある。写像を可逆に制限すればよい。
変数変換の公式(第5章の回収)
第5章第2節で、確率密度の変数変換を扱った。z と x が同じ次元 d で、g: \mathbb{R}^d \to \mathbb{R}^d が微分可能な全単射、逆写像も微分可能、ヤコビアン行列式がゼロでないとする。ここで使うヤコビアンは J(z) = \partial g/\partial z \in \mathbb{R}^{d \times d} で、行が出力画像の成分、列が入力の潜在変数の成分に対応する。成分 J_{ij} = \partial x_i/\partial z_j は「潜在変数の第 j 成分を少し動かすと、画像の第 i 成分がどれだけ動くか」である。第11章第4節では同じヤコビアンから J^\top J を作って長さの測り方(引き戻し計量)を得たが、ここでは行列式を使って微小な体積が何倍になるかを測る。同じ局所的な伸縮を、長さと体積のそれぞれから見ているのである。このとき 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|
これが尤度である。厳密に。ここで「厳密」というのは、VAE のように下界で置き換えたりせず、モデルの密度そのものを評価しているという意味である(数値計算の誤差は別の話だ)。上の条件を満たす g で、ヤコビアン行列式が計算できさえすれば、データの対数尤度がそのまま書ける。
第5章では、この公式を「なぜ変換でモードが動くのか」を説明するために使った。いまは生成モデルの設計原理として使う。同じ式が、二度違う役目を果たしている。
|\det J| は「体積が何倍になったか」だから、密度はその逆数倍になる—引き伸ばせば薄く、押し縮めれば濃い。単峰の p_Z から多峰の p_X が作れるのは、写像が場所によって違う伸縮をするからである。第5節で詳しく見る。
設計の困難と解決
尤度が厳密に書ける—だが代償がある。三つの条件を同時に満たす写像を作らねばならない。
- 可逆であること
- ヤコビアン行列式が高速に計算できること
- 表現力が十分あること
2 が厳しい。一般の d\times d 行列の行列式を通常の消去法で計算すると、演算回数は O(d^3) になる。この記号は、次元 d が大きくなるときに、必要な演算回数が定数倍を除いて高々 d^3 の速さで増える、という意味である。画像なら d は数万だから、絶望的である。
どう逃げるか。先に二成分の例で感じを掴んでおこう。前半はそのまま通し、後半だけを2倍して4を足す変換を考える。入力 (1, 3) は出力 (1, 10) になる。出力から戻すには、後半について (10 - 4)/2 = 3 と計算すればよい—割り算と引き算だけで逆が書ける。この変換のヤコビアンは対角成分が 1 と 2、それ以外がゼロの行列なので、行列式は 1 \times 2 = 2 である。体積が2倍に広がる分、対応する点での密度は半分になる。次に見る工夫は、後半に掛ける倍率と足す量を、前半の値から決めるところだけが違う。
カップリング層(coupling layer)という工夫が、これを解決する(Dinh ら 2017)。入力の成分を二組に分ける。z = (z_1, z_2) とし、z_1 \in \mathbb{R}^k、z_2 \in \mathbb{R}^{d-k} である(添字の 1、2 は成分の組を区別する番号で、出力も同じ長さの x_1、x_2 に分ける)。前半から後半の伸縮と移動を決める二つの関数を s, t: \mathbb{R}^k \to \mathbb{R}^{d-k} とし、s(z_1) が後半の各成分に掛ける倍率の対数、t(z_1) が各成分に足す量である(\exp は成分ごとに取り、\odot は対応する成分どうしの積を表す)。変換はこう書ける。
\begin{aligned} x_1 &= z_1 \\ x_2 &= z_2 \odot \exp\big(s(z_1)\big) + t(z_1) \end{aligned}
前半はそのまま通し、後半だけを前半に依存した形で変換する。s と t は任意のニューラルネットでよい(可逆である必要すらない)。
可逆性を確かめよう。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 が線形なら必ず対応するが、非線形でも対応する場合はある(第5章第2節で見た g(z)=z+z^3 がその例だった)。当てにできない、というのが正しい言い方である。
含意はこうである。潜在空間で「もっともらしい」点を選んでも、データ空間で最頻の出力が得られるとは限らない。潜在空間の原点(標準正規分布のモード)をデコードした画像が、「もっとも典型的な画像」だとは言えないのである。
モード崩壊の幾何
第2節のモード崩壊を、この視点から見直そう。生成器 G が誘導する分布 p_g は、p_Z を G で押し出したものである。データ分布が K 個の峰を持つなら、G はそれを再現するために K 箇所で「傾きを緩やかに」しなければならない。
もし G が滑らかすぎると、峰を作り分けられない。逆に無理に作り分けようとすると、峰と峰の間で G が急峻になり、そこは学習が不安定になる。
そしてもう一つ。峰の間の低密度領域を、G は必ず通らねばならない。潜在空間 \mathcal{Z} が一つながりである(連結である)とし、G が連続なら \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) である。ここで \mathrm{sech}\,u = 1/\cosh u = 2/(e^u+e^{-u}) と定義する。
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, ppx = 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 |
この五通りでは、単峰から二峰へ移り変わっている。なお (a,b)=(1,1) は、このあと導く条件のちょうど境目にあたる。等号のところでは二次の項が効かず、より高次の項が単峰の側へ倒している。ただし「ab が大きければ二峰になる」とは言えない。表は a と b を同時に動かしているので、ab だけの効果を取り出せていないのだ。実際、ab = 2 に揃えても (a,b) = (1, 2) は二峰、(4, 0.5) は単峰になる(g'(0) = 1+ab = 3 はどちらも同じである)。中央が谷になる条件を計算すると
\frac{2ab^3}{1+ab} > 1
となり、b が三乗で効いている。手を動かして確かめてほしい—同じ ab のまま a と b を振り替えると、結論が変わる。
a=3, b=2 のときを詳しく見よう。峰は x \approx \pm 3.95 に立ち、z=0(p_Z のモード)の行き先 g(0)=0 は、密度 0.057 の谷になっている。モードが谷に写ったのだ。そしてその谷こそ、g' がいちばん大きい場所である(g'(0) = 1+ab = 7)。p_X = p_Z/|g'| だから、g' が大きいところで密度は薄くなる。
「峰を作るには、どこかで急峻にならねばならない」—本文の主張が、数字で見えたことになる。
6. 拡散モデル(離散時間)
三つ目の応答である。
発想 ── 壊すのは易しい
生成は難しい。だが壊すのは易しい。
画像に少しずつノイズを足していけば、やがて純粋なノイズになる。この過程は学習など要らない—ただノイズを足すだけである。
ならば、その逆をたどればよい。純粋なノイズから始めて、少しずつノイズを取り除いていけば画像になる。各ステップで取り除くノイズはわずかだから、その一歩ずつなら学習できるかもしれない。これが拡散モデルの発想である。一気に飛ぶ代わりに、易しい一歩を何百回も繰り返す。
全体の流れを 図 1 に示す。
前向き過程
画像の画素値を一列に並べて x_0 \in \mathbb{R}^n とする(n は色の成分も含めた画像の成分数である)。このデータ x_0 から始めて、T ステップかけてノイズを足す。T が総ステップ数、x_t \in \mathbb{R}^n が t 回目の操作後の画像である。各ステップでは画像を少し縮め、各成分に独立な正規ノイズを足す。その分散を決める実数が 0 < \beta_t < 1 で、\beta_1, \dots, \beta_T という列をノイズスケジュールと呼ぶ。q(x_t \mid x_{t-1}) は一つ前の画像を与えたときの次の画像の条件付き密度、\mathcal{N}(x; \mu, \Sigma) は平均 \mu、共分散 \Sigma の正規分布の密度を x で評価する記法である。I \in \mathbb{R}^{n \times n} は単位行列なので、\beta_t I は「全成分の分散が \beta_t で、成分どうしは無相関」を表す。
q(x_t \mid x_{t-1}) = \mathcal{N}\big(x_t;\; \sqrt{1-\beta_t}\, x_{t-1},\; \beta_t I\big)
この過程には学習パラメータがなく、完全に手で決めてしまう。
便利な性質がある。何ステップも合成した結果が、途中の画像を順に作らなくても閉じた形で書ける。一歩で画像に掛ける係数は \sqrt{1-\beta_t} だった。その二乗を \alpha_t = 1-\beta_t と置き(つまり \alpha_t は「一歩で残る割合」である)、それを t 歩ぶん掛け合わせたものを \bar\alpha_t = \prod_{s=1}^{t}\alpha_s と置く(\prod は \alpha_1 から \alpha_t までの積、s はその積の中だけで使うステップ番号である)。すると元画像に掛かる係数は \sqrt{\bar\alpha_t}、加わったノイズの各成分の分散は 1-\bar\alpha_t になり、
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)
一成分だけで数を入れてみよう。見やすくするため実用よりも大きめに \beta_1 = \beta_2 = 0.36 を選び、元の値を x_0 = 2 とする。一歩では画像に \sqrt{1-0.36} = 0.8 が掛かり、標準正規ノイズに \sqrt{0.36} = 0.6 が掛かる。引いたノイズが -1 なら x_1 = 0.8 \times 2 + 0.6 \times (-1) = 1 である。二歩後はどうか。\alpha_1 = \alpha_2 = 0.64 だから \bar\alpha_2 = 0.64^2 = 0.4096 で、元の値に掛かる係数は \sqrt{\bar\alpha_2} = 0.64、加わったノイズの分散は 1 - \bar\alpha_2 = 0.5904 になる。一歩ぶんのノイズが次の一歩で 0.8 倍に縮められる(0.8^2 \times 0.36 = 0.2304)ぶんと、新しく足したノイズ 0.36 ぶんの和である。画像は縮み、ノイズは積み上がっていく。
t が大きくなると \bar\alpha_t \to 0 となり、x_T はほぼ標準正規分布になる。この式の形に見覚えがあるはずだ。前章の再パラメータ化トリック z = \mu + \sigma\odot\epsilon と同じ構造である。だから微分可能であり、学習に使える。
逆向き過程
生成は逆をたどる。いまの画像 x_t から一歩前の画像 x_{t-1} がどんな値を取りうるかを、条件付き密度 p_\theta(x_{t-1}\mid x_t) で表してニューラルネットで学習する(\theta は学習するパラメータの集まりである)。\beta_t が十分小さければ、逆向きの遷移もガウス分布で近似できることが知られている。その平均を \mu_\theta(x_t, t) \in \mathbb{R}^n—いまの画像とステップ番号から予測する量—とし、\sigma_t^2 > 0 を各成分に加える揺らぎの分散(ステップごとに決めておく)とする。だから
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_{0:T} = (x_0, \dots, x_T) は画像の道筋の全体、x_{1:T} = (x_1, \dots, x_T) はそこから元画像を除いたものである。前向きの道筋の条件付き密度は一歩ごとの密度の積 q(x_{1:T}\mid x_0) = \prod_{t=1}^{T} q(x_t \mid x_{t-1})、生成の側の同時密度も一歩ごとの積 p_\theta(x_{0:T}) = p(x_T)\prod_{t=1}^{T} p_\theta(x_{t-1}\mid x_t) である。\mathbb{E}_q は、元画像 x_0 を固定したうえで、前向き過程が作る道筋 x_{1:T} について平均するという意味である。拡散過程を潜在変数モデル(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) が実際に使ったのは、その重みを外して単純化した次の形である(だから以下は ELBO そのものではなく、実用上の代理の目的関数である。この置き換えが経験的にうまくいく、というのが彼らの発見だった)。
式に入る量を先にそろえよう。x_0 はデータから選ぶ画像、\epsilon \in \mathbb{R}^n は標準正規分布 \mathcal{N}(0, I) から引くノイズ、t は 1, \dots, T から一様に選ぶステップ番号である。\epsilon_\theta(x_t, t) \in \mathbb{R}^n は、ノイズを加えた画像とステップ番号を受け取って「加えられたノイズ」を予測するネットワークで、出力は画像と同じ成分数を持つ。\|\epsilon - \epsilon_\theta\|^2 は各成分の予測誤差の二乗和であり、期待値はこの三つの選び方について取る。
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_\theta に x_t と t を渡し、「足されたノイズは何だったか」を当てさせる。その二乗誤差を最小化する。
たったこれだけである。GAN のような敵対的学習も、フローのような可逆性の制約も要らない。単なる回帰問題になった。これが拡散モデルの学習が安定している理由である。
ここがポイント
拡散モデルの学習は「ノイズを当てる回帰」に帰着する。生成という難しい問題を、易しい一歩の繰り返しに分解したことの帰結である。敵対的なゲームも可逆性の制約もないので、学習が安定する。
生成の手順
学習が済んだら、x_T \sim \mathcal{N}(0,I) から始めて、t = T, T-1, \dots, 1 と逆にたどる。各ステップで \epsilon_\theta(x_t, t) を計算し、それを使って x_{t-1} をサンプルする。\mu_\theta と \epsilon_\theta を結ぶのは次の式である。
\mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}}\Big( x_t - \frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\, \epsilon_\theta(x_t,t) \Big)
読み方はこうである。いまの x_t から、予測したノイズを少しだけ引く。それを \sqrt{\alpha_t} で割って、一歩前の大きさに戻す。あとは \sigma_t^2 I のゆらぎを足せば x_{t-1} の標本になる。「ノイズを当てる回帰」がどうやって生成になるのか—その答えがこの一行である。次節では、このノイズ予測が、画像の密度が増える向きを表す「スコア」とどう結びつくかを見よう。
代償もある。生成に T 回(典型的には数百〜千回)のネットワーク評価が要る。GAN が一回で済むのに比べて、はるかに遅い。この高速化が近年の研究の一大テーマである。
7. スコアと連続時間の定式化
拡散モデルには、もう一つの見方がある。こちらのほうが数学的には見通しがよい。
スコアとは何か
画像の各成分を少し変えると、その画像の密度は増えるだろうか、減るだろうか。これを調べるために、画像の値そのもので対数密度を微分する。分布 p(x) のスコア(score)とは、対数密度の勾配である。p(x) > 0 の領域で、各成分についての偏微分 \partial \log p(x)/\partial x_i を並べた \mathbb{R}^n のベクトルであり、\nabla_x はその「全成分について偏微分を並べる」という記号である。微分するのはモデルのパラメータではなく、画像の値 x だという点に注意してほしい。
s(x) = \nabla_x \log p(x)
この s は、第4節でカップリング層のスケールに使った s とは別物である。本節では \epsilon_\theta が三つの顔で現れる。先に並べておく。
| どこで | \epsilon_\theta が何を表すか |
|---|---|
| 第6節 | 足されたノイズ \epsilon の推定 |
| 本節の前半 | 条件付き期待値 \mathbb{E}[\epsilon \mid x_t] |
| 本節の後半 | 周辺スコアの定数倍 -\sqrt{1-\bar\alpha_t}\,\nabla_{x_t}\log q_t(x_t) |
同じネットワークが、見る角度によって別のものを計算しているように見える。以下でこれを繋ぐ。これがなぜ嬉しいのか。第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 Z は x によらない定数だから、微分で落ちる。これは大きい。スコアを使えば、正規化定数を知らなくても分布を扱える。第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 を固定したときの条件付き分布のスコアが計算できる。
その前に、元画像を知っている場合と知らない場合の違いを数で見ておこう。一次元で、元データが x_0 = 1 と x_0 = -1 を半々に取るとし、\bar\alpha_t = 0.64 とする。途中の値が x_t = 0 だったとき、元が 1 ならノイズは \epsilon = -4/3、元が -1 ならノイズは \epsilon = 4/3 である(0.8 \times (\pm 1) + 0.6\epsilon = 0 を解いた)。ところが x_t = 0 という入力だけからは、どちらだったか決められない。対称なので二つの可能性は同じ重みを持ち、二乗誤差を最小にする予測はその平均、すなわち 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 が、そのまま条件付き分布のスコアになっている(符号と定数倍を除いて)。ただし、生成のときに必要なのは x_0 を知らない状態でのスコア、つまり周辺分布 q_t(x_t) のスコアである。一つの x_t には、それを生みうる x_0 と \epsilon の組が無数にある。ではなぜノイズを当てる学習でよいのか—二乗誤差の最小化が返すのは条件付き平均だからである。
\nabla_{x_t}\log q_t(x_t) = -\frac{\mathbb{E}\big[\epsilon \mid x_t\big]}{\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 らの見方である。
連続した移動として見る
ノイズを取り除く一歩をさらに細かくすれば、画像が連続的に動く過程としても書ける。そこでも進む向きを教えるのは、いま求めたスコアである。適切な条件のもとでは、ランダムな揺らぎを伴う動きと、揺らぎを伴わない動きが、各時刻で同じ分布を作るように対応づけられる—Song ら (2020) の統一的な見方はここにある。ただし、同じ分布を作ることと、一枚ずつの画像が同じ道を通ることは違う。
連続時間の式と、その条件・時間を逆に進めるときの符号は、発展編C.3 拡散を連続時間で書くで追うことにしよう。
ここがポイント
スコアを使うと、分配関数 Z が微分で消える。ノイズを当てる回帰は、このスコアを学ぶ手続きでもあった。第7章のエネルギーモデルと、画像を作る拡散モデルがここでつながる。
8. Flow Matching と Rectified Flow
ノイズから画像へ、もっと少ない歩数でたどり着けないだろうか。一つの方向は、途中の位置ごとに「どちらへどれだけ動くか」という速度を、直接学ぶことである。これが Lipman ら (2022) の Flow Matching の発想だ。
ノイズの点とデータの点を組にし、直線で結ぶ。線の途中の点と時刻を見せて、その線に沿う速度を当てさせる。同じ場所と時刻を違う線が通ることもあるので、学ぶのは個々の線の速度そのものではなく、その場所での平均的な速度になる。前節で、個々のノイズと条件付き平均を分けたのと同じ注意である。
Rectified Flow(Liu ら 2022)は、学習したモデルで両端の組を作り直し、再学習する方法である。生成時の道を直線に近づけ、少ない歩数で進めることを狙う。両端を直線で結んで学習しても、生成される道まで自動的に直線になるわけではない。
経路の選び方も、生成モデルの設計の一部になった。速度を学ぶ目的関数や連続時間のフローとの関係は、発展編C.4 移動の速度を学ぶに譲り、次は、こうして得た生成モデルを観測の復元に使ってみよう。
9. 生成モデルを事前分布とした逆問題
ここから応用に移る。そして脳の話に戻る道でもある。
逆問題という設定
画像の一部しか観測できないとき、残りも含めた画像を復元したい。未知の画像を x \in \mathbb{R}^n、観測値を並べたベクトルを y \in \mathbb{R}^m とする(m は観測値の数で、多くの場合 m < n である)。画像から観測への既知の線形写像を A \in \mathbb{R}^{m \times n} と書く。行が観測値、列が画像の成分に対応し、A_{ij} は「画像の第 j 成分が第 i 観測値にどれだけ寄与するか」を表す。この観測 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 か、事後サンプリングか
上の定式化は点推定である。一つの答えを返す。ただし呼び名には注意がいる—目的関数に潜在変数の事前分布 p_Z(z) が入っていないので、これは MAP 推定ではなく、生成器の像の上でデータへの当てはまりを最大にする推定である。ここで \sigma^2 > 0 は観測に加わるノイズの各成分の分散で、第6節の生成途中の揺らぎ \sigma_t^2 とは役割が違う。観測ノイズが平均ゼロ・分散 \sigma^2 の正規分布なら、負の対数尤度は z によらない定数を除いて \|y - AG(z)\|^2/(2\sigma^2) になる。MAP にしたければ \frac{1}{2\sigma^2}\|y - AG(z)\|^2 - \log p_Z(z) のように事前分布の項を足す必要がある。ただしこれは潜在変数 z の事後密度を最大にする推定であって、その結果を G で画像に写したものが画像空間での MAP になるとは限らない—第5節で見たように、密度のモードは変換で動きうるからである。だが本来、逆問題の答えは分布であるべきだ。同じ観測に整合する x が複数あるなら、その全体を示すほうが誠実である。
拡散事後サンプリング(DPS, Chung ら 2022)は、拡散モデルの各ステップに観測との整合性を組み込むことで、事後分布からのサンプリングを近似的に行う(厳密に事後分布から引く手続きではない)。追加の学習が不要で、既存の拡散モデルをそのまま使えるのが利点である。
使い分けの目安
不確実性の定量化が要るなら事後サンプリング、速度が要るなら点推定。ただし注意が要る—サンプルが散ることと、不確実性が正しく較正されていることは別である。多様な出力が出るからといって、その分布が正しいとは限らない。ここで較正とは、たとえば90%の確率で含むとした範囲に、繰り返し試したとき実際に約90%の割合で正解が入る、という対応をいう。この対応は別途検証しなければならない。
10. 脳活動からの画像再構成
本章の締めくくりとして、本書がここまで積み上げてきたものが合流する場所を見る。第12章第10節では、デコーディング精度に「神経集団の情報」「測定装置の写像」「デコーダの能力」の三つが混じると整理した。本節では第四の要素—生成器が持っている知識—が加わる。
まず、言葉を整理する
脳活動から見ている画像を復元する。この問題を語る前に、用語を整理しておかねばならない。ここは混乱しやすい場所である。
第6章でわれわれは、神経科学の意味での符号化と復号を定義した—刺激から脳活動へが符号化、脳活動から刺激へが復号である。基準は刺激と応答のあいだの因果の向きだった。一方、本章と前章で使ってきた機械学習の言葉では、符号化器が観測から潜在表現へ、復号器が潜在表現から観測へ写す。基準は因果ではなく、表現の抽象度である。
さて、ここからが本題だ。現代の再構成研究が扱うのは、脳活動と DNN の特徴量の関係である。この二つを結ぶ写像を、慣例では「エンコーディングモデル」(DNN 特徴量 → 脳活動)「デコーディングモデル」(脳活動 → DNN 特徴量)と呼んできた。だが—この呼び名は、二つの言葉遣いのどちらから来ているのだろうか。
二つとも、同じ対象の潜在特徴である
Kamitani、Tanaka ら (2025) のレビューと Shirakawa ら (2025) が、ここに整理を与えている。後者は現代の再構成手法を翻訳器と生成器の二段のパイプラインとして並べ直し、どの手法がどちらの段に何を任せているのかを見比べられるようにした。着眼点はこうだ。
脳活動も DNN 特徴量も、同じ視覚的対象から作られた潜在特徴である(図 2)。刺激 s を見たとき、脳はそれを処理して活動パターン b を作る(この b は脳活動のパターンで、第5節の「手を動かす」で分布の形を決めるパラメータに使った b とは別物である)。同じ刺激を DNN に入れれば、特徴量 z が出てくる。b と z は、どちらも s という同じ原因から生じた結果である。
だとすれば、b と z のあいだに因果の向きはない。脳活動が DNN 特徴量を引き起こすわけでも、その逆でもない。二つは兄弟なのである。
にもかかわらず「符号化/復号」と呼ぶと、あたかも一方が原因で他方が結果であるかのような非対称性が、言葉のうえで密輸入されてしまう。これが慣例の呼び名の問題点である。そこで提案されるのが、次の呼び分けである。
Translator(翻訳器) — 脳潜在(脳側の潜在特徴)と機械潜在(機械側の潜在特徴)のあいだを翻訳する写像。脳潜在を b \in \mathbb{R}^m、機械潜在を z \in \mathbb{R}^d とすれば、翻訳器は T: \mathbb{R}^m \to \mathbb{R}^d と T': \mathbb{R}^d \to \mathbb{R}^m である(この T は第6節の総ステップ数とは別の記号であり、T' の印も微分ではなく逆向きの翻訳器を区別するためのものである。T' が T の数学的な逆写像だという仮定は置かない)。どちらの向きも「翻訳」である。z = T(b) も b = T'(z) も、対等な二つの言語のあいだの翻訳と見る。
Generator(生成器) — 機械潜在から画像を作る写像 x = G(z)。本章で扱ってきた生成モデルがここに入る。これは翻訳とは別の段である。
b \;\overset{T}{\underset{T'}{\longleftrightarrow}}\; z \;\overset{G}{\longrightarrow}\; x
ここがポイント
「翻訳」という言い換えは、単なる用語の趣味ではない。三つの効き目がある。
第一に、密輸入された非対称性を外す。b と z は同じ刺激の兄弟であって、どちらかが原本ということはない。
第二に、二つの分野の「デコーダ」が別物であることが見える。神経科学の「デコーディング」は脳活動から刺激までの全体を指すが、機械学習の「デコーダ」は潜在表現から観測を作る生成器を指す。翻訳器と生成器を分ければ、この取り違えが起きない。
第三に、評価が切り分けられる。翻訳がどれだけ効いたのかと、生成器がどれだけ効いたのかを、別々に問える。この節の後半で見るとおり、これが決定的に重要になる。
紛らわしいのは、「エンコード/デコード」という語が分野ごとに別のものを指していることである。神経科学は因果の向きを、機械学習は抽象度の向きを基準にしている。
| 「符号化」が指すもの | 「復号」が指すもの | |
|---|---|---|
| 神経科学 | 刺激 → 脳活動 | 脳活動 → 刺激 |
| 機械学習 | 観測 → 潜在(符号化器) | 潜在 → 観測(復号器) |
| 本書の枠組み | 潜在 ↔︎ 潜在(翻訳器) | 潜在 → 画像(生成器) |
なぜ二段に分けるのか
用語の話から実務の話に戻ろう。なぜ翻訳と生成を分けるのか。
脳活動から直接ピクセルを予測しようとすると、データが足りない。fMRI の試行数は、多くの実験で数千の桁である。一人あたり一万を超える標本を集めた大規模なデータセットも現れているが、それでも画像生成モデルの訓練に使われる量には遠く及ばない。一方、生成モデルは大量の自然画像で事前に訓練できる。「自然画像とはどういうものか」の知識を生成器に任せ、脳から翻訳するのは潜在特徴だけにする—この分業が効く。そして翻訳器は、驚くほど単純でよい。典型的には線形回帰である。標本が少ないときに頑健だから、という実務上の理由が大きい。
ここから何が言えるかは、慎重に見ておきたい。線形回帰がうまくいくということは、脳側の特徴から DNN 側の特徴が線形に読み出せるということである。第6章第8節で見たとおり、これは「その情報が線形に明示されている」という一方向の主張であって、二つの表現の幾何が一致しているとか、互いに変換し合えるとかいうことまでは言えない。第11章で測っていた表現幾何の「似ている度合い」とは、関係はするが同じものではない。
Miyawaki ら (2008) は、この分業の原型にあたる手続きを用いている。局所的な画像要素のデコーダを組み合わせ、訓練時に提示していない図形を再構成できることを報告した。
「訓練時に提示していない」ことの重み
いま何気なく書いたこの条件が、実は決定的である。もし訓練データに含まれる画像しか再構成できないなら、それは再構成ではなく分類である。「見ている画像は、この100枚のうちのどれか」を当てているにすぎない。
真に再構成と呼べるのは、訓練で見ていない刺激を復元できるときだけである。これは Miyawaki ら以来の要件であり、いまも有効な判定基準である。
第6章第5節で触れた、VGG19 の高次の層から画像を復元する例を、ここで見直そう。Shirakawa ら (2025) は、元画像から計算した特徴量に近づくように画像の画素値を調整し、比較的高い層からも画像を復元できることを示した。画像の統計的な性質を制約として加えると、さらに高い層からの復元も改善した。高次の特徴だから画像の細部が失われている、と決めつけることはできない。ただし、これは元画像の特徴量を与えた場合の確認である。脳活動から予測した特徴量がその情報を保っているか、そして生成器がどこまで補っているかは、別々に確かめる必要がある。
生成事前分布は諸刃の剣
ここで第12章の測定理論が効いてくる。以下は Shirakawa ら (2025) の分析に沿って進める。
生成モデルを事前分布に使うことの利点は、第9節で見た。少ない観測から、もっともらしい画像を復元できる。だがその「もっともらしさ」は、どこから来ているのか。
- 脳活動から読み取った情報から来ているのか
- 生成モデルが持っている「自然画像らしさ」の知識から来ているのか
この後者の出どころは具体的である。拡散モデルの多くは LAION-5B(画像とテキストの組を50億以上集めたデータ。Schuhmann ら 2022)のような巨大なデータで学習されている。だから脳の情報がほとんど無くても、もっともらしい画像を作れる—そして学習データの偏りも一緒に持ち込む(Shirakawa ら 2025)。
この二つが混ざる。そして後者の寄与が大きいほど、出力は「きれい」になる。人間の目には説得力が増す。だが脳から読み取れた情報は、増えていない。
極端な場合を考えれば分かりやすい。Translator の出力を完全に無視して、生成モデルにランダムな潜在変数を与えたとしよう。出てくるのは、鮮明で自然な画像である。説得力はある。だが脳とは何の関係もない。
現実の再構成は、この極端な場合と「完全に脳由来」の間のどこかにある。どこにあるのかを測る手続きが必要である。
出力次元崩壊
Shirakawa らはさらに、翻訳器の側にある構造的な限界を指摘している。翻訳器は、限られた数の脳画像ペアで学習させる線形写像である。ここで訓練刺激が特徴空間の中で固まっていると、翻訳器が出力できる方向がその固まりの張る部分空間に潰れる。 これが出力次元崩壊(output dimension collapse)である(第13章第10節)。
線形回帰の予測は、訓練標的が張る空間の中にしか出られない。だから訓練集合がその刺激に必要な方向を張っていなければ、その方向は出力できない。 逆に言えば、必要な方向さえ張られていれば、訓練で見ていない刺激でも再構成できる—「崩壊すればゼロショットが一切できない」のではなく、張れていない方向についてできない、というのが正確なところである。
張れていないとき、出力は訓練で見た側へ引き寄せられる。そこに強力な生成器が付くと、引き寄せられた特徴からもっともらしい画像が作られる—分類と幻覚の組み合わせが、再構成のように見えてしまう。 実際、クラスタ化したデータで訓練したテキスト誘導型の手法を別のデータセットで試すと、再構成は大きく崩れることが報告されている。
処方箋は二つの方向にある。 一つは訓練データの側で、特徴空間を広く覆うように刺激を選ぶこと。もう一つは翻訳器と特徴表現の側である。Otsuka、Nagano と Kamitani (2026) は、脳から特徴への写像がスパースであるときに変数選択が効くことを示し、データスケールが小さい領域での予測誤差を解析的に与えた。あわせて、脳活動を使わずに崩壊の程度を測る診断も提案されている。
構成性が効くのはここである。 必要な特徴の方向が、別々に予測して組み立て直せる成分に分かれていれば、少ない訓練の組み合わせからでも、成分の組み合わせとして新しい出力を作れる。第13章で対称性の側から述べた構成的汎化が、再構成という具体的な課題で、そのまま実務上の要求になっている。
どう切り分けるか
いくつかの対照条件が使われる。どの段を疑っているかで整理すると、見通しがよい。
| 疑う段 | 対照 | 分かること |
|---|---|---|
| 翻訳器 | 脳活動と刺激の対応をシャッフルする | 脳活動に由来しない寄与が混じっているか |
| 翻訳器の汎化 | 訓練に使っていないカテゴリの刺激で試す | 見たことのある刺激に寄りかかっていないか |
| 生成器 | 生成器の訓練データに含まれないもので試す | 事前分布がどれだけ形を作っているか |
| 評価 | 識別課題と再構成課題を分けて測る | 「似て見える」ことと情報が戻っていることを分ける |
一つの対照で全部は切り分けられない。 シャッフル対照が示すのは寄与の存在であって、どの段で入り込んだかではない。段ごとに別の対照が要る。
シャッフル対照
脳活動と刺激の対応をランダムに入れ替えて同じ手続きを回す。それでも「もっともらしい」画像が出るなら、脳活動に由来しない寄与が混じっていることが分かる。ただしこれは寄与の存在を示す診断であって、「再構成のうち何割が生成器によるものか」を定量的に分ける手続きではない。
訓練分布外での検証
生成モデルの訓練データに含まれないカテゴリの刺激で試す。事前分布に頼っている部分は、ここで崩れるはずである。
再構成と分類の分離
候補画像の中から選ぶ課題(識別)と、ゼロから作る課題(再構成)を区別して評価する。
評価の見た目への依存を減らす。人間が「似ている」と判断することと、脳の情報が復元されていることは、同じではない。これは第12章の言葉で言えば、「デコーディング精度は何の測定か」という問いの、生成モデル版である。本節の冒頭で予告した第四の要素—生成器が持っている知識—が、ここまで見てきた切り分けの対象そのものだったことになる。
説得力と妥当性は別物である。生成モデルが強力になるほど、両者の乖離は広がりうる。これは技術の進歩がそのまま解決してくれる類の問題ではない—むしろ進歩によって深刻になる問題である。
次章へ
前章の VAE に続き、本章では GAN、フロー、拡散を見た。Flow Matching の発想にも触れ、連続時間の詳しい式は発展編Cに置いた。そして生成モデルが、逆問題として脳のデコーディングにつながることを見た。
残っているのは、この道具立てを脳の理論として読み直すことである。前章で導いた ELBO は、符号を反転させれば「自由エネルギー」と呼ばれる量になる。そしてその量を最小化することが脳のやっていることだ、という壮大な主張がある。次章はそこから始めてこの主張を検討し、表現をめぐる本書全体の問い—脳とAIの表現は一致するのか、そもそも表現とは何か—を第17〜18章へ渡す。
確認問題
[導出]GAN の目的関数において、生成器を固定したときの最適識別器 D^*(x) = p_{\text{data}}/(p_{\text{data}}+p_g) を導出せよ。(第1節)
[導出]D^* を代入した目的関数が JS ダイバージェンスで書けることを示せ。(第1節)
[確認]モード崩壊が起きる理由を、GAN の目的関数の観点から説明せよ。(第2節)
[確認]表現誤差 \varepsilon_{\text{rep}}(x) = \inf_z \|x - G(z)\| とは何か。潜在変数の次元が d のとき、\mathrm{Range}(G) について何が言えるか。(第2節)
[導出]カップリング層 x_1 = z_1、x_2 = z_2\odot\exp(s(z_1)) + t(z_1) について、(a) 逆写像を明示的に書け、(b) ヤコビアンが三角行列になることを示し、(c) その対数行列式を求めよ。(第4節)
[導出]p_Z のモード z^* が p_X のモードに写らないことを示せ。写るのはどんな場合か。(第5節)
[導出]スコア \nabla_x \log p(x) を使うと分配関数 Z が問題にならない理由を、第7章のギブス分布から出発して示せ。(第7節・第7章第3節)
[考える]脳活動と DNN 特徴量を結ぶ写像を「符号化/復号」ではなく「翻訳」と呼ぶ理由を述べよ。そのうえで、再構成画像の「もっともらしさ」が脳由来か生成事前分布由来かを切り分ける方法を、一つ考案せよ。(第10節・第6章第1節)
参考文献
- Goodfellow, I. J., et al. (2014). Generative adversarial networks. arXiv:1406.2661. — GAN の原典[1節]
- Rezende, D. J., & Mohamed, S. (2015). Variational inference with normalizing flows. arXiv:1505.05770. https://doi.org/10.48550/arxiv.1505.05770 — フロー[4節]
- Dinh, L., Sohl-Dickstein, J., & Bengio, S. (2017). Density estimation using real NVP. In International Conference on Learning Representations (ICLR). — カップリング層の出典。第4節の x_2 = z_2\odot\exp(s(z_1))+t(z_1) はこの論文の形[4節]
- Ho, J., Jain, A., & Abbeel, P. (2020). Denoising diffusion probabilistic models. arXiv:2006.11239. https://doi.org/10.48550/arxiv.2006.11239 — DDPM[6節]
- Song, Y., et al. (2020). Score-based generative modeling through stochastic differential equations. arXiv:2011.13456. https://doi.org/10.48550/arxiv.2011.13456 — スコアと SDE[7節]
- Lipman, Y., et al. (2022). Flow matching for generative modeling. arXiv:2210.02747. https://doi.org/10.48550/arxiv.2210.02747 / Liu, X., Gong, C., & Liu, Q. (2022). Flow straight and fast: learning to generate and transfer data with rectified flow. arXiv:2209.03003. https://doi.org/10.48550/arxiv.2209.03003 —
- 岡野原大輔(2023)『拡散モデル:データ生成技術の数理』岩波書店. — 日本語での標準的な解説
- Miyawaki, Y., et al. (2008). Visual image reconstruction from human brain activity using a combination of multiscale local image decoders. Neuron, 60(5), 915–929. https://doi.org/10.1016/j.neuron.2008.11.004 — 再構成の初期の仕事[10節]
- Kamitani, Y., Tanaka, M., & Shirakawa, K. (2025). Visual image reconstruction from brain activity via latent representation. Annual Review of Vision Science, 11, 611–634. https://doi.org/10.1146/annurev-vision-110423-023616 — 本章第10節の枠組みの出典。Translator–Generator
- Shirakawa, K., et al. (2025). Spurious reconstruction from brain activity. Neural Networks, 190, 107515. https://doi.org/10.1016/j.neunet.2025.107515 — 見せかけの再構成と出力次元崩壊[10節]。評価の落とし穴を具体的に示している
- Schuhmann, C., et al. (2022). LAION-5B: An open large-scale dataset for training next generation image-text models. In Proceedings of the 36th International Conference on Neural Information Processing Systems. https://dl.acm.org/doi/10.5555/3600270.3602103 — 拡散モデルの学習データ。「自然画像らしさ」がどこから来ているか[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. Transactions on Machine Learning Research. https://doi.org/10.48550/arxiv.2509.15832 — 崩壊の数学的解析と処方[10節]
- Bora, A., Jalal, A., Price, E., & Dimakis, A. G. (2017). Compressed sensing using generative models. arXiv:1703.03208. https://doi.org/10.48550/arxiv.1703.03208 — 表現誤差の定式化と、生成モデルを事前分布に使う逆問題[2節・9節]
- Chung, H., et al. (2022). Diffusion posterior sampling for general noisy inverse problems. arXiv:2209.14687. https://doi.org/10.48550/arxiv.2209.14687 — 拡散モデルの各ステップに観測との整合性を組み込む[9節]