月影

日々の雑感

【AI技術解説】拡散モデルとは?仕組み・歴史・数学的背景を徹底解説

 

【AI技術解説】拡散モデルとは?仕組み・歴史・数学的背景を徹底解説

2025年現在、MidjourneyやStable Diffusion、Soraといった画像・動画生成AIの進化は、私たちの創造性の概念を大きく変えようとしています。これらの革新的なAIの心臓部で動いているのが、「拡散モデル(Diffusion Model)」と呼ばれる技術です。

この記事では、「そもそも拡散モデルって何?」という初心者の方から、「その背後にある数学的理論を知りたい」という専門家の方まで、幅広い読者に向けて拡散モデルの全てを詳しく解説します。

1. 拡散モデルの簡単な説明:ノイズから芸術は生まれる

まず、専門的な話に入る前に、拡散モデルが何をしているのか、直感的なイメージを掴んでみましょう。

拡散モデルの仕事は、一言で言えば「完全なノイズ(砂嵐のような画像)から、意味のある美しい画像を復元する」ことです。

このプロセスは、大きく2つのステップで構成されています。

ステップ1:拡散過程(Forward Process)- ひたすら画像を壊す練習

AIはまず、世界中の膨大な「きれいな画像」(例えば、猫の写真)を使って練習を始めます。ただし、その練習方法は少し変わっています。きれいな画像に、ほんの少しだけノイズを加え、さらにノイズを加え…という作業を何百、何千ステップと繰り返し、最終的に元の画像が何だったのか全く分からない、ただのノイズ画像にしてしまうのです。

インクを一滴ずつ水に垂らして、最終的に完全に拡散させてしまうイメージに似ているため、「拡散モデル」と呼ばれます。この過程で、AIは「画像がどのように壊れていくのか」そのパターンを徹底的に学習します。

ステップ2:逆拡散過程(Reverse Process)- 壊し方の逆をたどって復元する本番

ここからが本番です。AIは、今度は完全なノイズ画像からスタートします。そして、ステップ1で学習した「画像の壊れ方のパターン」を、まるでビデオを逆再生するように、一歩一歩遡っていきます。

上の猫の図が右からスタートして、最終的に左の猫の図が出来上がると考えるといいです。

「このノイズパターンなら、その一歩手前はきっとこんな感じだったはず…」という推測を何千回も繰り返し、ノイズを丁寧に取り除いていくのです。

この気の遠くなるようなノイズ除去作業の末、最終的に私たちの目には、まるで魔法のように現れたリアルな画像が見える、というわけです。

彫刻家が、ただの石の塊からノミで不要な部分を削り取って美しい像を掘り出すように、拡散モデルはノイズの塊から不要なノイズを削り取って画像を「創造」するのです。


2. 拡散モデルの歴史:物理学の理論からAIの主役へ

これほど強力な拡散モデルですが、その誕生はAI分野の華々しい表舞台からではありませんでした。

黎明期(2015年):物理学からの着想

拡散モデルの根源的なアイデアは、2015年にJascha Sohl-Dickstein氏らの論文で提唱されました。彼らの着想元は、AIではなく物理学の「非平衡熱力学」でした。

「インクが水の中でランダムに広がっていく(拡散する)現象を逆再生できれば、元の一滴の状態に戻せるはずだ。この物理現象の考え方を、データ(画像)がノイズに変わっていく過程に応用し、それを逆再生するAIを作れないだろうか?」

このアイデアは、拡散モデルの数学的な基礎を築くという偉大な一歩でした。しかし、この時点ではまだ理論が複雑で計算コストも高く、生成される画像の品質も低かったため、当時のAI研究の主流とはなりませんでした。

ブレークスルー(2020年):DDPMの登場

状況が一変したのは2020年です。Google Brainに所属していたJonathan Ho氏らが「DDPM (Denoising Diffusion Probabilistic Models)」という論文を発表しました。

彼らは、2015年の複雑な理論を「ノイズ除去(Denoising)」というよりシンプルな問題として捉え直し、アーキテクチャを大幅に改良しました。これにより、以下のような劇的な進化が起こります。

  • 学習が非常に安定した
  • 当時の画像生成の王者であったGAN(敵対的生成ネットワーク)に匹敵、あるいはそれ以上の高品質な画像を生成できることを証明した

この論文がAI研究界に与えたインパクトは絶大で、ここから一気に拡散モデルの研究開発が加速。OpenAIのDALL-E 2、GoogleのImagen、そしてオープンソースのStable Diffusionなど、現在の主要な画像生成AIは、すべてこのDDPMのアイデアを発展させたものです。

物理学の片隅で生まれたアイデアの種が、5年の時を経てAI研究者によって花開かせられ、現在の生成AI革命へと繋がったのです。


3. 拡散モデルの仕組みを数式で理解する(専門家向け)

ここからは、拡散モデルの挙動を数式を用いてより厳密に解説します。

3.1. 前方過程(Forward Process)

前方過程は、元のデータ x₀ に、微小なガウスノイズを T ステップかけて付加していくマルコフ連鎖として定義されます。

各ステップ t でのデータ xₜ は、その一つ前の状態 xₜ₋₁ から以下の式でサンプリングされます。1ステップのノイズ追加を定義するという役割です。

q(xₜ | xₜ₋₁) = N(xₜ; sqrt(1 - βₜ)xₜ₋₁, βₜI)

ここで N正規分布ガウス分布)、I単位行列βₜt ステップ目で加えるノイズの分散を制御するハイパーパラメータ(0 < βₜ < 1)です。

この式の素晴らしい点は、αₜ = 1 - βₜ 及び ᾱₜ = Π[s=1 to t]αₛ と定義することで、任意のステップ t の状態 xₜ を、元のデータ x₀ から一回の計算で直接導出できることです。

初心者用解説が必要な方は左の+のボタンを押してください。

料理のレシピに例えてみよう!

まず、この数式全体を「きれいな猫の写真を、1ステップだけ"砂嵐"に近づけるためのレシピ」だと考えてみてください。

q(xₜ | xₜ₋₁) = N(xₜ; sqrt(1 - βₜ)xₜ₋₁, βₜI)

1. q(xₜ | xₜ₋₁) : 「次の画像」はどうなる?

  • xₜ₋₁ (エックス・ティーマイナスいち): 1ステップ前の画像(材料となる画像)

  • xₜ (エックス・ティー): の画像(出来上がった画像)

  • q( ... | ... ): 確率を表す記号。「 | 」の右側が条件(材料)で、左側が結果です。

つまり q(xₜ | xₜ₋₁) は、「1ステップ前の画像(xₜ₋₁)があったとき、今の画像(xₜ)はどんな風になりますか?」 という意味になります。レシピのタイトルみたいなものですね。

2. N(...) : 「だいたいこんな感じ」という正規分布

N正規分布 (Normal Distribution) というものを表します。難しく聞こえますが、「だいたい真ん中あたりになるけど、ちょっとだけズレることもあるよ」 という、自然界でよく起こるランダムな現象のことです。

正規分布

例えば、身長の分布のように、平均身長の人が一番多く、すごく背が高い人や低い人は少なくなりますよね。あの「山なりのグラフ(ベルカーブ)」のイメージです。

このレシピでは、「出来上がる画像は、だいたいある画像のようになるけど、毎回ちょっとだけランダムに変わるよ」ということをNで表現しています。

3. Nの中身:具体的な調理方法

Nの中には2つのパートがあり、セミコロン ; で区切られています。これは「山の中心(平均)」と「山の広がり具合(分散)」を決めています。

パート①: sqrt(1 - βₜ)xₜ₋₁ (山の中心:画像をちょっとだけ薄くする)

  • xₜ₋₁: 材料となる1ステップ前の画像です。

  • βₜ (ベータ): 新しく加えるノイズ(砂嵐)の量です。すごく小さな数字(例: 0.001)だと思ってください。

  • (1 - βₜ): 1からすごく小さな数を引くので、0.999 のような「1よりほんの少しだけ小さい数」になります。

  • sqrt(...): ルート(平方根)です。1より少し小さい数なので、ルートをつけてもやっぱり1より少し小さい数になります。

つまり、このパートは「前の画像 × 0.99...」という計算をしています。元の画像を1倍するより少しだけ小さくするので、画像をほんのちょっぴりだけ薄く(不鮮明に)する効果があります。これが出来上がる画像の「中心」になります。

パート②: βₜI (山の広がり具合:新しい砂嵐を振りかける)

  • βₜ: 先ほどと同じ、新しく加えるノイズ(砂嵐)の量です。

  • I: これはあまり気にしなくて大丈夫です。「画像全体にまんべんなく」くらいの意味です。

このパートは「どれくらいの強さで、新しい砂嵐をランダムに振りかけますか?」を決めています。βₜが大きければ、それだけ激しい砂嵐が加わります。

まとめ

もう一度、数式全体を見てみましょう。

q(xₜ | xₜ₋₁) = N(xₜ; sqrt(1 - βₜ)xₜ₋₁, βₜI)

このレシピを日本語に翻訳すると、こうなります。

「"今の"画像(xₜ)は、"前の"画像(xₜ₋₁)をちょっとだけ薄くしたもの(sqrt(1-βₜ)xₜ₋₁)をベースにして、そこに新しい砂嵐(βₜI)をランダムにちょっとだけ加えたものになりますよ」

この「ちょっと薄くして、砂嵐をちょっと加える」という1ステップを何百回も繰り返すことで、元のきれいな猫の写真が、だんだんと完全な砂嵐に変わっていくわけです。

次は、『この式の素晴らしい点は、αₜ = 1 - βₜ 及び ᾱₜ = Π[s=1 to t]αₛ と定義することで、任意のステップ t の状態 xₜ を、元のデータ x₀ から一回の計算で直接導出できることです。』の説明です。

面倒な問題:500回もレシピを繰り返すの?

先ほどのレシピは、画像を1ステップだけ砂嵐に近づけるものでした。

前の画像 → (レシピ) → 今の画像

もし、完全に砂嵐になった500ステップ後の画像が見たいと思ったら、このレシピを律儀に500回も繰り返さないといけないのでしょうか?

画像₀ → 画像₁ → 画像₂ → ... → 画像₄₉₉ → 画像₅₀₀

これは非常に面倒で、時間がかかりますよね。料理で言えば、「1分煮込む」という作業を500回繰り返すようなものです。

素晴らしい解決策:未来へジャンプする「魔法の公式」

ここで登場するのが、ご質問の文章です。数学者たちは、この面倒な繰り返し計算をすっ飛ばして、一気に未来の結果を知るための**「魔法の公式(ショートカット)」**を考え出しました。

この式の素晴らしい点は、αₜ = 1 - βₜ 及び ᾱₜ = Π[s=1 to t]αₛ と定義することで、任意のステップ t の状態 xₜ を、元のデータ x₀ から一回の計算で直接導出できることです。

これを分解していきましょう。

1. 新しいニックネームをつけよう! αₜ (アルファ)

  • βₜ は「新しく加える砂嵐の量」でしたね。

  • αₜ = 1 - βₜ

これは単に新しいニックネームをつけただけです。αₜは「画像の鮮明さがどれくらい残るか」という割合を表します。

もし砂嵐の量(βₜ)が0.01なら、鮮明さが残る割合(αₜ)は 1 - 0.01 = 0.99 になります。つまり、1ステップ進むと、画像の鮮明さが99%になる、ということです。

2. 全部かけ合わせよう! ᾱₜ (アルファ・バー)

  • ᾱₜ = Π[s=1 to t]αₛ

Π (パイ)という記号は、「全部かけ算しなさい」という意味です。 つまりᾱₜは、1ステップ目から私たちが知りたいtステップ目までの**「鮮明さが残る割合 (α)」を、全部かけ合わせたもの**です。

例えば、3ステップ後のᾱ₃を知りたければ...

ᾱ₃ = α₁ × α₂ × α₃

これは、「tステップ後までに、元の画像の鮮明さが合計でどれくらい残っているか」 を一発で計算できる、とても便利な数値です。

結論:なぜこれが素晴らしいのか?

このᾱₜ(アルファ・バー)という「合計の鮮明度」を発明したおかげで、私たちは次のような魔法の公式が使えるようになります。

(tステップ後の画像) = (元の画像) × (合計の鮮明度) + (合計の砂嵐)

わざわざ1ステップずつ計算しなくても、

  • 元のきれいな猫の画像 (x₀)

  • 知りたいステップ数 (t)

この2つさえあれば、ᾱₜを使って一回の計算で、指定した未来のステップの画像 (xₜ) がどんな状態になっているかを直接作り出すことができるのです!

例えるなら、毎日1gずつ塩を足していくスープの100日後の味を知りたいときに、100回塩を足すのではなく、「100日後なら合計100gの塩が入っているはずだ」と計算して、一気に100gの塩を入れて味を確かめるようなものです。

xₜ の正体は「画像の設計図」

xₜが何かを理解するために、デジタル画像の仕組みを考えてみましょう。

  1. 画像は点の集まり: パソコンやスマホの画面に表示される画像は、非常に小さな色の点(ピクセル)が集まってできています。

  2. 点は数字で表される: 各ピクセルは、「赤(R)がどれくらい、緑(G)がどれくらい、青(B)がどれくらい」という3つの数字の組み合わせで色が決まります。(例: (R:255, G:100, B:80)

  3. 数字の巨大なリスト: 画像全体は、この「3つの数字のセット」が、画像の縦×横のピクセル数だけズラーっと並んだ、巨大なリスト(設計図)になります。

この画像の設計図(数字の巨大なリスト)こそが、xₜの正体です。 専門用語では、このような多次元の数字の配列を**「テンソル (Tensor)」**と呼びます。そして、計算をしやすくするために、この巨大なリストを一本の長い列に並べ直したものを**「ベクトル (Vector)」**と呼びます。

つまりxₜは、画像一枚をまるごと表現した、たくさんの数字の集まりなのです。

この「計算のショートカット」ができるようになったことで、拡散モデルの学習が非常に効率的になり、大きなブレークスルーに繋がったのです。任意のtステップ後の状態を直接計算する役割があります。

xₜ = sqrt(ᾱₜ)x₀ + sqrt(1 - ᾱₜ)ε   (ただし ε ~ N(0, I))

この式は、xₜ が「元の画像を sqrt(ᾱₜ) 倍に縮小(情報を減衰)したもの」と、「標準正規分布からサンプリングしたノイズ εsqrt(1 - ᾱₜ) 倍に拡大したもの」の線形和で表せることを示しています。

初心者用解説が必要な方は左の+ボタンを押してください。

右の式の2つのデータはどう計算されるのか。具体例を挙げてわかりやすく説明します。

舞台設定:非常に小さなモノクロ画像で考えよう

計算をイメージしやすくするため、巨大なカラー画像ではなく、たった4ピクセルしかない、超小型のモノクロ画像 x₀ を例にします。

  • モノクロなので、各ピクセルの色は「明るさ」を示す0〜255の一つの数字で表せます。(0が真っ黒、255が真っ白)

これが私たちの元のきれいな画像 x₀ です。

x₀ = | 200 | 80 | | :-- | :- | | 150 | 0 |

そして、今回は**t=50ステップ後の画像 x₅₀ を作る**とします。 計算の結果、50ステップ後の鮮明度 ᾱ₅₀ は 0.6 になったと仮定しましょう。

工程1:sqrt(ᾱₜ)x₀ の計算 (元の画像をフェードアウトさせる)

このパートは**「元の画像をどれくらい薄めるか」**を決める計算です。

  1. 係数を計算する:

    • ᾱ₅₀ = 0.6

    • sqrt(ᾱ₅₀) = sqrt(0.6)0.775

  2. 画像の全ピクセルに係数を掛け算する: 0.775 という一つの数字を、x₀全てのピクセル掛け算します。これをスカラーと言います。

    0.775 × | 200 | 80 | | :-- | :- | | 150 | 0 |

    = | 200 × 0.775 | 80 × 0.775 | | :---------- | :---------- | | 150 × 0.775 | 0 × 0.775 |

    = | 155 | 62 | | :---- | :--- | | 116 | 0 |

    これで、うっすらと元の画像の面影が残った、フェードアウトした画像が完成しました。

工程2:sqrt(1 - ᾱₜ)ε の計算 (砂嵐を生成し、適切な強さにする)

このパートは**「加える砂嵐(ノイズ)をどれくらいの強さにするか」**を決める計算です。

  1. 砂嵐の素 ε を用意する: まず、元の画像と**全く同じサイズ(2x2)**の、ランダムな数字の集まり ε を生成します。ε ~ N(0, I) というのは、「平均0、標準偏差1の正規分布からランダムな数字を持ってきてね」という意味です。今回は、例えば以下のような数字が選ばれたとします。

    ε = | 0.5 | -1.2 | | :-- | :--- | | 1.8 | 0.2 |

  2. 係数を計算する:

    • 1 - ᾱ₅₀ = 1 - 0.6 = 0.4

    • sqrt(1 - ᾱ₅₀) = sqrt(0.4)0.632

  3. 砂嵐の素の全ピクセルに係数を掛け算する: 先ほどと同様に、0.632 という一つの数字を、ε全ての数字に掛け算します。

    0.632 × | 0.5 | -1.2 | | :-- | :--- | | 1.8 | 0.2 |

    = | 0.5 × 0.632 | -1.2 × 0.632 | | :---------- | :----------- | | 1.8 × 0.632 | 0.2 × 0.632 |

    = | 0.32 | -0.76 | | :----- | :------ | | 1.14 | 0.13 |

    これで、50ステップ後の状態にふさわしい「強さ」に調整された砂嵐が完成しました。

最終工程:2つのデータを合体させる

最後に、工程1と工程2で出来上がった2つの画像(数字の集まり)を足し算します。 画像の足し算はとても簡単で、同じ位置にあるピクセル同士を足すだけです。これを要素ごとの和と言います。

| 155 | 62 | | :---- | :--- | | 116 | 0 |

+

| 0.32 | -0.76 | | :----- | :------ | | 1.14 | 0.13 |

=

| 155 + 0.32 | 62 + (-0.76) | | :--------- | :----------- | | 116 + 1.14 | 0 + 0.13 |

= x₅₀ | 155.32 | 61.24 | | :------- | :------ | | 117.14 | 0.13 |

これが、50ステップ後のノイズが乗った画像 x₅₀ の最終的なデータです。元の画像の明るさの値に、ノイズの値が加わっているのが分かりますね。

xₜ = sqrt(ᾱₜ)x₀ + sqrt(1 - ᾱₜ)ε で平方根をとっていることには、「信号とノイズのエネルギーバランスを完璧に保つ」という、非常に重要で数学的に美しい意義があります。

💡 核心は「分散の足し算」というルール

この式の背景には、統計学の**「独立な確率変数の和の分散は、それぞれの分散の和に等しい」**という大原則があります。難しく聞こえますが、大丈夫です。

  • 分散 (Variance): データのばらつき具合を示す指標。この文脈では、画像の「エネルギー」や「パワー」のようなものだと考えてください。

  • 標準偏差 (Standard Deviation): 分散の平方根。データのばらつきの「平均的な大きさ」や、信号の「振幅」のようなイメージです。

重要なルールはこれだけです。 エネルギー(分散)は足し算できるが、振幅(標準偏差)は単純に足し算できない。

🏛️ 信号におけるピタゴラスの定理

この関係は、直角三角形のピタゴラスの定理三平方の定理)にそっくりです。

a² + b² = c²

  • 辺の長さ ab は、単純に足しても c にはなりません (a + b ≠ c)。

  • 足し算できるのは、辺の長さを**2乗した面積(エネルギー)**です。

これを今回の式に当てはめてみましょう。

  • sqrt(ᾱₜ): 元の画像(x₀)の**「振幅」**に相当。

  • sqrt(1 - ᾱₜ): ノイズ(ε)の**「振幅」**に相当。

  • xₜ: 出来上がった画像の**「振幅」**に相当。

この式は、2つの「振幅」を混ぜて、最終的な「振幅」を作っています。このとき、それぞれの**エネルギー(振幅の2乗)**がどうなっているか見てみましょう。

  1. 元の画像のエネルギー: (sqrt(ᾱₜ))² = ᾱₜ

  2. ノイズのエネルギー: (sqrt(1 - ᾱₜ))² = 1 - ᾱₜ

そして、この2つの独立した信号を足し合わせた最終的な画像 xₜ のエネルギー(分散)は、それぞれのエネルギーの足し算になります。

最終的なエネルギー = ᾱₜ + (1 - ᾱₜ) = 1

平方根の真の意義:エネルギーを「1」に保存する

計算結果が**「1」**になったことが、最も重要なポイントです。

これは、**「どの時点 t であっても、元の画像とノイズをどれだけ混ぜ合わせても、出来上がる画像の総エネルギー(分散)は常に1に保たれる」**ということを意味します。

もし平方根を使わなかったら、例えば (ᾱₜ)x₀ + (1 - ᾱₜ)ε のように単純に混ぜてしまうと、総エネルギーは (ᾱₜ)² + (1 - ᾱₜ)² となってしまい、「1」にはなりません。これでは、ステップが進むごとに画像のエネルギーがどんどん変わってしまい、AIは何を基準にノイズを除去すればいいのか分からなくなってしまいます。

平方根は、ピタゴラスの定理が辺の長さの関係を美しく保つように、拡散過程のどのステップにおいても信号とノイズのエネルギーバランスを完璧に保ち、安定した学習を可能にするための、数学的な必然なのです。

このように、計算は「画像全体への掛け算」「画像同士の足し算」という、意外とシンプルな操作の組み合わせで行われています。

3.2. 後方過程(Reverse Process)

後方過程は、前方過程を逆向きにたどるプロセスです。つまり、xₜ ~ N(0, I) からスタートし、xₜ₋₁, xₜ₋₂, ..., x₀ と順番にサンプリングしていきます。

この逆向きの確率 p(xₜ₋₁ | xₜ) を求めたいのですが、これは全データセットに依存するため計算が困難です。そこで、この確率分布をニューラルネットワーク θ を用いて近似します。これがデノイジングモデル p_θ(xₜ₋₁ | xₜ) です。

初心者用解説が必要な方は左の+ボタンを押してください。

例え話:熟練の考古学者になろう!

あなたは、古代の文字が刻まれた石板を発掘する考古学者だと想像してください。

  • 前方過程: 石板が風化していく過程です。きれいな状態から、長い年月をかけて砂や泥がつき、文字がすり減って、最終的にはただの石ころ(ノイズ)になってしまいます。この風化の法則は、物理法則なので予測が簡単です。

  • 後方過程: あなたの仕事です。発掘現場で見つかった、ただの石ころ (xₜ) からスタートします。あなたの目標は、ブラシや道具を使って、ほんの少しだけ前の状態 (xₜ₋₁)、つまり「もう少しだけ文字が読める状態」に復元することです。これを繰り返して、最終的に元のきれいな石板 (x₀) を復元します。

逆向きの確率 p(xₜ₋₁ | xₜ) がなぜ難しいのか?

さて、ここが本題です。あなたが今、目の前にある石ころ (xₜ) を見て、**「1ステップ前の姿 (xₜ₋₁) はどうだっただろう?」**と推測します。これが p(xₜ₋₁ | xₜ) を求めるということです。

しかし、これは絶望的に難しい問題です。なぜなら...

「この石ころになった可能性のある、1ステップ前の石板」は、この世に無限に存在するからです。

  • Aという文字が刻まれた石板が風化したのかもしれない。

  • Bという文字が刻まれた石板が風化したのかもしれない。

  • そもそも何も書かれていない、ただの石ころだったのかもしれない。

この石ころ (xₜ) がどんな姿から来たのか、その「真実の確率」を知るためには、**この世に存在する全ての石板(全データセット)**が、それぞれどのように風化してこの石ころになるのかを全部計算し、平均を取る必要があります。これは現実的に不可能です。

そこで「ニューラルネットワーク」という名の天才助手の登場!

「真実」が分からないなら、「最もそれらしい答え」を推測できる天才を育てればいいじゃないか!というのがAIの考え方です。それがニューラルネットワーク θ です。

  • 訓練: 私たちは、この天才助手(ニューラルネットワーク)に、膨大な量の「風化前 (xₜ₋₁)」と「風化後 (xₜ)」の石板ペアを見せて、徹底的に訓練させます。

    • 「こういう風に砂がついているなら、その前はきっとこうだったはずだ」

    • 「この削れ方なら、元はこういう文字があった可能性が高い」 というパターンを、何百万回も学習させます。

  • 実践: 訓練が終わった天才助手は、もはや熟練の考古学者です。私たちが新しい石ころ (xₜ) を見せると、彼はその膨大な知識と経験から、**「私が知る限り、この石ころの1ステップ前の姿は、"だいたいこんな感じ"だったはずですよ」**と、非常に精度の高い推測をしてくれます。

この天才助手の推測こそが、p_θ(xₜ₋₁ | xₜ) なのです。

θという記号は、この助手の「脳(ニューラルネットワークのパラメータ)」を表しています。真実のpをそのままは使えないので、θの知識で近似した(真似した)p、という意味でp_θと書くのです。

まとめ

  • 後方過程は、ノイズだらけの状態から、少しずつノイズを取り除いていく復元作業。

  • 真の復元方法 (p) は、可能性が無限にありすぎて計算不可能。

  • そこで、訓練されたニューラルネットワーク (p_θ) という専門家が、「最もありえそうな復元方法」を高い精度で推測してくれる。

このニューラルネットワークという名の「ノイズ除去の達人」が、一歩一歩着実にノイズを取り除いてくれるおかげで、私たちは砂嵐から美しい画像を生み出すことができるのです。

p_θ(xₜ₋₁ | xₜ) = N(xₜ₋₁; μ_θ(xₜ, t), Σ_θ(xₜ, t))

DDPMのブレークスルーは、このモデルが予測すべき対象を単純化した点にあります。モデルの目的は、平均 μ_θ や分散 Σ_θ を直接予測するのではなく、前方過程で xₜ を生成するために付加されたノイズ ε を予測することに帰着させました。

初心者用解説が必要な方は左の+ボタンを押してください。

先ほどの考古学者の例えで、もう一度見ていきましょう。

p_θ(xₜ₋₁ | xₜ) = N(xₜ₋₁; μ_θ(xₜ, t), Σ_θ(xₜ, t))

この式を日本語に翻訳すると...

この式全体は、天才助手(θ)のこんなセリフを表しています。

「現在の石ころ(xₜ)を見たところ、その一個前の姿(xₜ₋₁)は、きっと『μ』という画像を中心に、『Σ』くらいのブレ幅でランダムに変化させた感じだったと推測します!(N)」

報告書のフォーマットを分解しよう

1. p_θ(xₜ₋₁ | xₜ) = ... (報告のタイトル)

  • 「現在の石ころ(xₜ)から、一個前の姿(xₜ₋₁)を、私(θ)が推測した報告書です」という意味です。

2. N(...) (報告の形式)

  • これは「正規分布(Normal Distribution)」を表します。

  • 助手の答えは、「これだ!」という断定的なものではありません。「だいたいこんな感じだと思うけど、少しだけランダムなズレはあるかもね」という、確率的な形式で報告することを意味します。一番可能性が高いものを中心に、山なりの確率分布で答えをくれるのです。

3. μ_θ(xₜ, t) (ミュー:最も可能性の高い「復元写真」)

  • μ (ミュー) は、正規分布の**中心(平均)**を表します。

  • これが、助手の**一番自信がある「ベストな推測」**です。

  • μ_θ(xₜ, t) は、「私(θ)が、現在の石ころ(xₜ)と、それがどれくらい風化しているか(t)を考慮して導き出した、最もそれらしい一個前の画像の姿」という意味になります。

  • 例えるなら、助手が私たちに見せてくれる「復元予想図の写真」そのものです。

4. Σ_θ(xₜ, t) (シグマ:推測の「ブレ幅」)

  • Σ (シグマ) は、正規分布の**広がり具合(分散)**を表します。

  • これは、助手の**「自信のなさ」や「推測の不確実さ」**を表します。

  • Σ_θ(xₜ, t) は、「私(θ)が思うに、この復元予想図(μ)の周りには、これくらいの**ランダムなブレ(ノイズ)**があったかもしれない」という、誤差の範囲を示しています。

  • 山が細くて高ければ、ブレが少なく自信がある証拠。山が広くて低ければ、ブレが大きくあまり自信がない証拠です。

まとめ

この式は、ノイズ除去の達人であるニューラルネットワークが、単に一つの答えを出すのではなく、

  1. 最も確からしい復元画像 (μ)

  2. その推測にどれくらいの不確かさが伴うか (Σ)

という、非常にリッチで柔軟な「確率的な予測」を行っていることを示しています。

実際に次の画像を生成するときは、この「復元予想図(μ)」に、「ブレ幅(Σ)」に応じたほんの少しのランダムなノイズを加えてあげることで、毎回少しずつ違う、より自然で多様な画像を生成することができるのです。

3.3. 学習の目的関数

モデルを ε_θ(xₜ, t) とし、これが各ステップで付加された真のノイズ ε を予測するように学習させます。目的関数(損失関数)は、両者の平均二乗誤差 (MSE) を最小化するという非常にシンプルな形になります。

L(θ) = E[ || ε - ε_θ(xₜ, t) ||² ]

ここで、xₜ は前述の式 xₜ = sqrt(ᾱₜ)x₀ + sqrt(1 - ᾱₜ)ε を用いて計算されます。

学習の際には、

  1. データセットからランダムに x₀ を選ぶ。
  2. タイムステップ t{1, ..., T} からランダムに選ぶ。
  3. 標準正規分布からノイズ ε をサンプリングする。
  4. xₜ を計算し、それを入力としてモデル ε_θ(xₜ, t) にノイズを予測させる。
  5. 予測したノイズと真のノイズ ε の誤差を計算し、モデルのパラメータ θ を更新する。
初心者用解説が必要な方は左の+ボタンを押してください。

この式は、AI(ニューラルネットワーク)を賢くするための「AI専用の採点・学習ルール」だと考えてください。

L(θ) = E[ || ε - ε_θ(xₜ, t) ||² ]

例え話:ノイズ当てゲームでAIを訓練する!

この式を、AIに「画像に加えられたノイズ(砂嵐)を当てるゲーム」をさせて、その実力を採点し、成長させるプロセスだと想像してください。

  • 先生(訓練プロセス): あなたです。

  • 生徒(AI): θ という名前の生徒です。

  • ゲームのルール:

    1. 先生は、きれいな猫の画像(x₀)を用意します。

    2. 先生は、ある特定のパターンの砂嵐 (ε) をこっそり画像に加えます。これが**「正解の砂嵐」**です。

    3. 出来上がったノイズまみれの画像 (xₜ) を生徒に見せます。

    4. 生徒(θ)は、ノイズまみれの画像を見て、先生がどんな砂嵐を使ったのかを推測します。この生徒の推測が ε_θ です。

この式は、このゲームの「採点方法」を定めています。

式の各部分の解説

L(θ) (エル・シータ)

  • 「生徒(θ)の成績表」です。LはLoss(損失)の略で、点数が低いほど優秀であることを意味します。目標は、この点数を限りなく0に近づけることです。

E[ ... ] (イー)

  • 「平均点を取る」という意味です。

  • このゲームは1回だけでは意味がありません。何千、何万もの違う画像違う砂嵐のパターンで繰り返しテストを行います。Eは、その全てのテスト結果の平均を取ることを示しています。これにより、AIはどんな状況でも対応できる汎用的な能力を身につけます。

ε - ε_θ(xₜ, t)

  • 「正解と生徒の解答の差」です。

  • ε : 先生だけが知っている「正解の砂嵐」。

  • ε_θ : 生徒が推測した「解答の砂嵐」。

  • この引き算で、生徒がどれだけ間違えたか(=誤差)が分かります。もし完璧に当てられたら、この結果は0になります。

|| ... ||² (二乗ノルム)

  • 「間違いに対するペナルティの付け方」です。

  • || ... || はベクトルの大きさを表し、² はそれを2乗することを意味します。

  • これは、誤差に対して非常に厳しいペナルティを与えるための工夫です。

    1. 間違いをプラスにする: 間違いにはプラスもマイナスもありません。2乗することで、全ての間違いがプラスのペナルティになります。

    2. 大きな間違いはもっと厳しく叱る: 小さな間違い(誤差1)はペナルティも1ですが、大きな間違い(誤差10)をするとペナルティは100になります。これにより、AIは「大きな間違いをするとものすごく怒られる!」と学習し、大きなヘマをしないように賢くなっていきます。

全体を日本語に翻訳すると

この採点ルールを日本語で表現すると、こうなります。

「生徒(θ)の成績(L)は、色々な画像とノイズで何度もテストを行い(E)、その都度、先生の用意した正解の砂嵐(ε)と生徒の解答(ε_θ)の差を計算し、その間違いの大きさに厳しいペナルティ(||...||²)を課した点数の、総合平均点である。」

拡散モデルの学習とは、この「ノイズ当てゲーム」を延々と繰り返し、AIがこの成績(L)を最小化するために、自分の頭の中身(θ)を自己修正していく、壮大な特訓プロセスなのです。

この単純な学習を繰り返すことで、モデルはあらゆるノイズレベルの画像から、的確にノイズ成分だけを見つけ出して除去する能力を獲得していきます。アーキテクチャとしては、入力と出力の解像度が同じU-Netが広く使われています。


まとめ

拡散モデルは、物理学の直感的なアイデアから出発し、数多くの研究者の洗練を経て、現代AIの最もパワフルなツールの一つとなりました。その仕組みは、「ノイズを加えて壊す」という単純なプロセスを逆再生するという、エレガントなものです。

この記事を通して、拡散モデルの魅力とその背後にある深い理論の一端を感じていただけたなら幸いです。AIがノイズから無限の創造性を引き出すこの技術は、私たちの未来をさらに面白く、豊かなものにしてくれるに違いありません。

以下のAI初心者向け仕組みと進化のまとめ記事をご覧ください。

www.namuamidabu.com