高次元の闇に浮かぶ「1枚の点」 ── 画像生成と確率分布
私たちは今、生成AIが当たり前のように美しい絵を描き、写真と見紛うほどリアルな画像を生み出す時代に生きています。
では、そのときAIの中では、一体何が起きているのでしょうか。
「AIが人間の画家のように絵を描いている」
「キャンバス上のノイズを少しずつ消しながら、画像を完成させている」
そんな説明を一度は耳にしたことがあるかもしれません。
もちろん、こうした説明には直感的な分かりやすさがあります。しかし、それだけでは画像生成AIの数理的な本質には届きません。
なぜ、画像生成AIに「確率」が登場するのか。
なぜ、そこに微分や積分が必要になるのか。
そして、なぜ流体力学や熱力学、確率微分方程式といった、一見すると画像とは無関係に思える数学や物理学が登場するのでしょうか。
この連載では、理工学の扉を叩いたばかりの読者に向けて、こうした疑問を一つずつ追いかけていきます。
数式を必要以上に難しくするつもりはありません。
しかし、数式で表した方が正確に伝わるものについては、あえて数式を使います。
目指すのは、単なる「AIの使い方」の解説ではありません。
画像生成AIが、どのような数学的な問題に直面し、それをどのような発想で乗り越えてきたのか。
その知の流れをたどることです。
そのすべての出発点となる第一話のテーマは、
「そもそも画像とは何なのか。そして、なぜ画像を生成するのに確率分布が必要なのか」
です。
画像とは、超高次元空間に浮かぶ「たった1つの点」である
「画像データとは何ですか?」
そう聞かれたら、あなたはどう答えるでしょうか。
おそらく、
「ピクセル(画素)が縦横に並んだデータです」
と答えるでしょう。
もちろん、それは正しい答えです。
ところが、この画像を数学の目で眺め直してみると、まったく違った景色が見えてきます。
できるだけ簡単な例から始めましょう。
縦16ピクセル、横16ピクセルのカラー画像を考えます。
ピクセルの数は、
$$
16 \times 16 = 256
$$
です。
カラー画像では、通常、それぞれのピクセルが赤(R)、緑(G)、青(B)の3つのチャンネルを持っています。
したがって、この画像を表す数字の個数は、
$$
16 \times 16 \times 3 = 768
$$
となります。
つまり、この小さなカラー画像は、768個の数字を並べたものだと考えることができます。
ここで、数学の「座標」を思い出してください。
数直線上の一点は1つの数字で表せます。
平面上の一点は、
$$
(x,y)
$$
という2つの数字で表せます。
私たちが暮らしている3次元空間の一点なら、
$$
(x,y,z)
$$
という3つの数字で表せます。
では、768個の数字が並んでいたらどうでしょう。
それも、同じことです。
768個の数字を一列に並べれば、それは768次元空間の中の1つの点を表します。
画像をベクトルとして、
$$
\mathbf{x} \in \mathbb{R}^d
$$
と表すことにしましょう。
このとき、画像の縦、横、チャンネル数をそれぞれ $H,W,C$ とすれば、
$$
d = H \times W \times C
$$
です。
つまり、先ほどの16×16のカラー画像なら、
$$
\mathbf{x} \in \mathbb{R}^{768}
$$
となります。
これは、画像を眺めるときの視点を大きく変えてくれます。
私たちは普段、画像を「猫」や「風景」や「人物」として見ています。
しかし数学から見れば、それは768個の数値からなる、768次元空間中の1点にすぎません。
この見方は、画像生成AIを理解するうえで極めて重要です。
そして画像の解像度が上がれば、この次元数は一気に増えていきます。
たとえばフルHD、1920×1080ピクセルのRGB画像なら、
$$
1920 \times 1080 \times 3=
6,220,800
$$
です。
一枚の画像が、622万800個の数値からなる高次元ベクトルになる。
私たちの目には一枚の写真にしか見えないものが、数学の世界では、数百万次元の座標ベクトルなのです。
この視点に立つと、「画像生成」という言葉の意味も少し違って見えてきます。
「画像らしさ」は、どこにあるのか
ここで、恐ろしい実験を考えてみましょう。
先ほどの16×16ピクセル・RGB画像は、768個の数からなるベクトル
$$
\mathbf{x}=(x_1,x_2,\ldots,x_{768})
$$
として表すことができました。
では、この768個の値を、それぞれ0から255までの整数からランダムに選んでみます。
そうしてできた768個の数字を、16×16のRGB画像として並べて表示してみるのです。
すると、何が現れるでしょうか。
おそらく、私たちが「画像」と呼びたくなるようなものではありません。
色の点が無秩序に並んだ、意味のないノイズです。
では、なぜそうなるのでしょう。
理由は簡単です。
「自然な画像」というものは、画像として数学的に可能なすべての組み合わせの中で、ほんの一部しか占めていないからです。
たとえば、768個の画素値を自由に選べるなら、取り得る画像の総数は、
$$
256^{768}
$$
にもなります。
その中には、猫も、風景も、人物も、そして私たちが意味のある画像として認識できない無数の組み合わせも含まれています。
ところが、実際に人間が作ったり、現実の世界から得られたりした画像は、その巨大な空間を均等に埋め尽くしているわけではありません。
「猫の画像」には猫の画像らしい構造があります。
「人間の顔」には顔らしい構造があります。
「青空」には青空らしい構造があります。
つまり、現実の画像データには強い偏りがあります。
数学的に言えば、
画像データは、高次元空間のいたるところに均等に存在しているわけではない。
この事実が、画像生成AIの出発点になります。
画像を連続的なベクトルとして捉えると、この「現れやすさ」を確率密度
$$
p_{\mathrm{data}}(\mathbf{x})
$$
として表すことができます。
多様体仮説と「データの山」
画像データが高次元空間の一部に集中しているという考え方を直感的に説明するのが、「多様体仮説(Manifold Hypothesis)」です。
ここでいう「多様体」は、簡単に言えば、
高次元空間の中に埋め込まれた、比較的低次元の構造
と考えてください。
たとえば、私たちの住む3次元空間の中に、一枚の紙が置かれているとします。
空間全体は3次元ですが、紙そのものはおおむね2次元の構造を持っています。
同じように、数百万次元という巨大な画像空間の中にも、自然な画像が集中して存在する、より低次元の構造があるのではないか、と考えるわけです。
もちろん、これは画像データの構造を理解するための仮説であり、「すべての画像が文字通り一枚の薄い膜の上に載っている」という意味ではありません。
重要なのは、
画像には、ランダムな数字の組み合わせにはない強い構造がある
ということです。
ここで、もう一つ重要な数学的概念が登場します。
それが確率分布です。
たとえば、画像を表すベクトルを $\mathbf{x}$ とすると、実際のデータがどのような場所に現れやすいのかを、
$$
p_{\mathrm{data}}(\mathbf{x})
$$
という確率密度で表すことができます。
この $p_{\mathrm{data}}(\mathbf{x})$ を、巨大な山の地形だと思ってみてください。
自然な画像が現れやすい場所では「山」が高くなり、ほとんどデータが存在しない場所では低くなる。
もちろん、この「山」は実際に目で見られる地形ではありません。
数百万次元の空間に定義された、数学的な地形です。
そして画像生成AIが目指していることを極端に単純化して言えば、
この「画像データがどこに存在しやすいのか」という確率分布を学習し、そこから新しい画像を取り出すこと
だと考えることができます。
これが「サンプリング」です。
$$
\mathbf{x}_{\mathrm{new}}
\sim
p_{\mathrm{data}}
$$
この記号は、
「確率分布 $p_{\mathrm{data}}$ に従って、新しい画像 $\mathbf{x}_{\mathrm{new}}$ を一つ取り出す」
という意味です。
ここで、画像生成AIに対する見方が大きく変わります。
AIが「猫の絵を一枚描く」のではありません。
数学的には、
画像が存在する巨大な空間上の確率分布の構造を学び、そこから新しい一点をサンプリングする。
これが、画像生成の一つの本質的な見方になります。
しかし、確率分布を直接記述するのは簡単ではない
ここで、素朴な疑問が生まれます。
「それなら $p_{\mathrm{data}}(\mathbf{x})$ をそのまま学習すればいいのではないか?」
その通りです。
問題は、
それがとてつもなく難しい
ことです。
確率密度として扱うなら、空間全体で積分した値が1になるように規格化されていなければなりません。
$$
\int p(\mathbf{x})\ d\mathbf{x}=1
$$
この条件を「規格化」と呼びます。
そこで、ニューラルネットワークが、確率密度に比例する量を計算できたとしましょう。
それを、
$$
\tilde{p}(\mathbf{x};\theta)
$$
とします。
これは、まだ全体として1に規格化されているとは限らない、非正規化密度です。
ここで $\theta$ は、ニューラルネットワークの学習によって決まるパラメータです。
もし、
$$
p(\mathbf{x};\theta)=
\frac{\tilde{p}(\mathbf{x};\theta)}
{Z_\theta}
$$
としたければ、規格化定数
$$
Z_\theta=
\int
\tilde{p}(\mathbf{x}';\theta)
\ d\mathbf{x}'
$$
を計算しなければなりません。
このような高次元空間全体にわたる積分は、一般に計算が非常に困難になります。
しかも、ここで重要なのは「画像だから難しい」ということだけではありません。
本質的には、
高次元空間全体にわたって確率を扱うことそのものが難しい
のです。
そして、これが生成モデル研究における大きな問題の一つでした。
ただし、ここで一つ注意が必要です。
この「規格化定数の計算困難性」は、すべての生成モデルにそのまま当てはまるわけではありません。
後に登場するNormalizing Flowでは、座標変換とヤコビアンを利用することで、確率密度や尤度を扱いやすくする工夫が登場します。
つまり、
「確率分布を直接扱うことは難しい」
という問題に対して、研究者たちは最初からさまざまな方法で立ち向かってきたのです。
そして、その試行錯誤の先に、今回の連載でたどる長い物語があります。
では、どうやって「新しい画像」を作るのか
ここまでの話を整理しましょう。
一枚の画像は、高次元空間中の一点として表すことができます。
そして、現実の画像データは、その巨大な空間のどこにでも均等に存在するわけではありません。
そこには、「画像らしいデータが存在しやすい領域」という構造があります。
それを確率密度として表せば、
$$
p_{\mathrm{data}}(\mathbf{x})
$$
となります。
理想的には、ここから新しい一点をサンプリングすればよい。
ところが、肝心の分布そのものを直接扱うのは難しい。
そこで研究者たちは、別の考え方を探しました。
その一つが、
「分布そのものを直接記述するのではなく、そこから別の分布へ変化させる仕組みを学習してしまえばいいのではないか」
という発想です。
ここで、冒頭とは少し違う「画像生成」の姿が見えてきます。
画像を「点」として動かす
生成の出発点として、私たちが簡単に扱える確率分布を用意します。
代表的なのが標準ガウス分布です。
これを、
$$
p_0(\mathbf{x})
$$
としましょう。
そこからランダムに一点、
$$
\mathbf{x}_0
\sim
p_0
$$
を選びます。
ピクセル空間で考えれば、これはノイズのような画像として見ることができます。
そして最終的には、実際の画像データが存在する分布、
$$
p_1
$$
へと到達させたい。
そこで、
$$
\mathbf{x}_0
\longrightarrow
\mathbf{x}_1
$$
という「旅」を考えます。
この旅を、もう少し数学的に表してみましょう。
時間 $t$ によって点の位置が変化するとして、
$$
\mathbf{x}(t)
$$
と書きます。
そして、その点をどちらへ、どれくらいの速さで動かすのかを表すベクトル場を、
$$
\mathbf{v}_t(\mathbf{x})
$$
とします。
すると、決定論的な流れなら、基本的には
$$
\frac{d\mathbf{x}(t)}{dt}=
\mathbf{v}_t(\mathbf{x}(t))
$$
という常微分方程式(ODE:Ordinary Differential Equation)で点の動きを表せます。
この式が意味していることは単純です。
「今この場所にいる点を、風 $\mathbf{v}_t$ に従って動かせ」
ということです。
ここで、今回の連載で何度も登場する重要な比喩が生まれます。
AIが学習するのは、単なる「画像の描き方」ではない。
画像空間の中で、点をどちらへ動かせばよいのかを示す「風」を学習する。
もちろん、これはこの連載で扱う連続時間生成モデルを理解するための比喩です。
実際のモデルによって学習対象は異なります。
拡散モデルでは「どちらへ進めばデータらしくなるか」を表すスコア関数を学習しますし、Flow Matchingでは速度ベクトル場を直接学習します。
しかし、これらを「確率分布を別の分布へ変化させるための方向情報」という視点から眺めると、互いの関係が見えてきます。
動いているのは「画素」ではない
ここは、画像生成AIを理解するときに特に注意してほしいところです。
「ノイズから猫の画像が生まれる」と聞くと、
「ノイズを構成している小さな画素が、それぞれ移動して猫の形に集まっていく」
ようなイメージを持ってしまうかもしれません。
しかし、ここで動いているのは、画素が空間の中を飛び回るようなものではありません。
画像全体を表す一つのベクトル $\mathbf{x}$ が、高次元空間の中を移動していると考えます。
先ほどの16×16カラー画像なら、768個の数値からなるベクトルです。
その768個の数値が一組になって、一つの点を構成しています。
その点が、
$$
\mathbf{x}_0
\longrightarrow
\mathbf{x}(t)
\longrightarrow
\mathbf{x}_1
$$
と、高次元空間の中を移動していく。
私たちがその途中のベクトルを画像として表示すれば、
「ノイズだったものが、だんだん画像らしくなってきた」
ように見えます。
しかし数学的には、
高次元空間中の一点の座標が連続的に変化している
だけです。
画素同士が空間を飛び回って集合し、一枚の絵を組み立てているわけではありません。
ここは画像生成AIを理解するうえで、とても重要な視点です。
私たちが「画像」と呼んでいるものを、一度「点」として見る。
すると、その点をどう動かすかという問題が生まれます。
そして、その「どう動かすか」を決めるのが、確率分布やスコア関数、ベクトル場、微分方程式なのです。
「確率の流れ」という発想
ここまで来ると、次の問題が見えてきます。
一つの点を動かすだけなら、それほど難しそうには思えません。
しかし、生成AIが扱っているのは一つの画像だけではありません。
私たちが本当に変化させたいのは、
$$
p_0(\mathbf{x})
\longrightarrow
p_1(\mathbf{x})
$$
という確率分布そのものです。
つまり、ノイズの分布を、画像の分布へ変化させたい。
一つ一つの点を動かした結果として、空間全体の確率密度も変化します。
ここで、流体力学との驚くべき接点が現れます。
水の入った容器を想像してください。
水を流せば、水の一部が集まって密度が高くなる場所もあれば、逆に水が流れ出して密度が低くなる場所もあります。
しかし、何もないところから突然水が生まれたり、水が途中で勝手に消滅したりするわけではありません。
全体としての水の量は保存されます。
確率分布についても、よく似た考え方が現れます。
局所的な確率密度 $p_t(\mathbf{x})$ は、流れによって増えたり減ったりします。
しかし、確率密度が正しく規格化されている限り、空間全体の確率は1です。
$$
\int p_t(\mathbf{x})\ d\mathbf{x}=1
$$
この「確率を流体のように扱う」という発想が、次の話で極めて重要な役割を果たします。
そして、その数学的なルールとして登場するのが、流体力学でおなじみの連続の式です。
ここから始まる「知の螺旋」
ここまでの話だけでも、画像生成AIが単純な「お絵描き」ではないことが見えてきたのではないでしょうか。
一枚の画像は、高次元空間中の一点として表せる。
画像データには偏りがあり、その構造を確率分布として捉えることができる。
そして、生成とは、その確率分布から新しい一点を取り出すことだと考えられる。
問題は、その確率分布をどうやって扱い、どうやってノイズからデータへ変化させるのかということです。
この問題に対して、研究者たちは一つの方法で一直線に進んだわけではありません。
むしろ、何度も方向を変えています。
この連載では、まずNormalizing Flowから見ていきます。
確率分布を座標変換によって別の分布へ移し替えるという、美しく決定論的な発想です。
そこでは、ヤコビアンや確率密度の変換が重要になります。
しかし、より複雑なデータを扱おうとすると、別の計算上の問題が立ちはだかります。
そこで研究者たちは、確率的な過程を利用する方向へ進みます。
データに少しずつノイズを加え、最終的に簡単な分布へ近づける。
そして、その逆向きの過程を利用して、ノイズからデータを生成する。
これが、拡散モデルへとつながっていきます。
さらに、その確率的な拡散過程を連続時間の確率微分方程式(SDE:Stochastic Differential Equation)として捉えることで、新たな統一的枠組みが現れます。
そしてここで、非常に興味深い発見が登場します。
確率的に揺れ動くSDEと、ランダムな揺らぎを持たない決定論的なODEが、同じ確率分布の時間発展を実現できるのです。
それがProbability Flow ODEです。
つまり、物語は再び「流れ」へ戻ってきたのです。
そして、その先で登場するのがFlow Matchingです。
曰く、「それなら、最初からノイズとデータを結ぶ流れを直接学習すればいいのではないか」
この発想によって、連続時間生成モデルは再び、決定論的な流れへと大きく舵を切ります。Flow Matchingでは、設定した確率経路に沿った速度ベクトル場を、シミュレーションなしで直接学習します。
この連載では、この一連の発展を一つの「知の螺旋」として眺めてみたいと思います。
$$
\boxed{
\text{Normalizing Flow}
\rightarrow
\text{Diffusion}
\rightarrow
\text{SDE}
\rightarrow
\text{Probability Flow ODE}
\rightarrow
\text{Flow Matching}
}
$$
もちろん、実際の研究史はこの一本の矢印ほど単純ではありません。
それぞれの研究には独立した問題意識があり、数多くの研究者による異なる流れが存在します。
それでも、このような視点から眺めると、一つの非常に美しい問いが浮かび上がってきます。
「複雑な確率分布を、どうやって簡単な確率分布から生み出すのか?」
この問いに答えるために、研究者たちは、確率論、微分積分、流体力学、熱力学、確率微分方程式といった、さまざまな知恵を持ち寄ってきました。
画像生成AIの歴史とは、単にAIの性能が上がってきた歴史ではありません。
「確率分布をどう動かすか」という一つの数学的な問題に対して、人類が異なる道を試し続けてきた歴史
でもあるのです。
次回、「確率を水のように流す」
ここで、第一話の最後に一つだけ問いを残しておきましょう。
高次元空間の中を、一枚の画像を表す点が動いていく。
そのとき、その点の集合として表される確率分布は、どのように変化しているのでしょうか。
点を移動させれば、当然、ある場所には点が集まり、別の場所からは点が減っていきます。
つまり、確率密度は変化します。
では、その変化を数学的にどう記述すればよいのでしょう。
局所的な確率密度は増えたり減ったりする。
しかし、全体の確率は1のままでなければならない。
これはまさに、水や空気などの流体を扱うときに現れる「質量保存」の問題とよく似ています。
そこで次回からは、画像生成AIの数学的な旅を少し遡ります。
最初に登場する重要な考え方、
Normalizing Flow(正規化フロー)
です。
確率分布を「流体」のように扱い、ある分布を別の分布へと滑らかに変形させる。
そのとき、確率密度はどのように変化するのか。
なぜヤコビアンが登場するのか。
そして、そこからどうして流体力学の「連続の式」が現れるのか。
次回は、画像生成AIと流体力学が一本の数式でつながる瞬間を見ていきましょう。
第二話「水を運ぶように確率を変形せよ ── 正規化フローと『連続の式』」へ続きます。
参考文献
- 岡野原大輔『生成AIのしくみ』技術評論社、2024年。
- 岡野原大輔『拡散モデル』岩波書店、2023年。
- J. Sohl-Dickstein et al., “Deep Unsupervised Learning using Nonequilibrium Thermodynamics,” ICML, 2015.
- J. Ho et al., “Denoising Diffusion Probabilistic Models,” NeurIPS, 2020.
- Y. Song et al., “Generative Modeling by Estimating Gradients of the Data Distribution,” NeurIPS, 2019.
- Y. Song et al., “Score-Based Generative Modeling through Stochastic Differential Equations,” ICLR, 2021.
- Y. Lipman et al., “Flow Matching for Generative Modeling,” ICLR, 2023.
- X. Liu et al., “Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow,” ICLR, 2023.
専門用語の簡単な解説
- 確率密度関数:データがある場所にどれくらい現れやすいかを、空間上の密度として表した関数。
- 多様体(Manifold):高次元空間の中に存在する、比較的低次元の構造を持った領域。
- 多様体仮説:高次元のデータ空間に存在する実データが、より低次元の構造の近くに集中していると考える仮説。
- サンプリング:確率分布に従って、そこから具体的なデータを一つ取り出す操作。
- スコア関数:確率密度の対数の勾配 $\nabla_{\mathbf{x}}\log p(\mathbf{x})$ であり、確率密度が増加する方向を示すベクトル。
- ベクトル場:空間のそれぞれの場所に、方向と大きさを持つベクトルを割り当てたもの。
- ヤコビ行列(Jacobian matrix):多変数の写像の1階偏微分を並べた行列。局所的な空間の変形を記述する。
- ヤコビアン(Jacobian determinant):ヤコビ行列の行列式。局所的な体積要素がどの程度変化するかを表す。
- SDE(確率微分方程式):ランダムな揺らぎを含む連続時間の変化を記述する微分方程式。
- ODE(常微分方程式):ランダムな揺らぎを含まず、決定論的な時間発展を記述する微分方程式。
- Probability Flow ODE:対応するSDEと同じ確率密度の時間発展を与える決定論的なODE。
- Flow Matching:ノイズの分布からデータの分布へ変化させる速度ベクトル場を、直接学習する手法。
- Normalizing Flow:可逆な座標変換によって、扱いやすい確率分布から複雑なデータ分布を構成する生成モデル。
- 規格化:確率密度を空間全体で積分した値が1になるようにすること。
【本記事におけるAI(生成AI)の活用について】
本連載(および本記事)は、著者が約4ヶ月間にわたり積み重ねてきた専門論文の精読・数理的考察と、AIとの徹底的なディスカッションを経て構築したプロットに基づいています。
記事内の本文記述および見出しの言語化・構造化にあたっては、論理の透明性と読みやすさを高めるパートナーとしてAI(LLM)を活用・編集しています。数理的な構想や文脈の意図はすべて筆者の思索に基づくものです。