DDPM: Denoising Diffusion Probabilistic Models の解説

Tech

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

DDPM: Denoising Diffusion Probabilistic Models の解説

要点(3行)

  • DDPMは、画像などの生成モデルにおいて、ノイズ除去プロセスを学習することで、GANを凌駕する高品質かつ多様な画像を生成することに成功しました[1]。

  • マルコフ連鎖を用いた前方拡散と、ニューラルネットワークによるノイズ予測に基づく逆拡散プロセスが主要な技術キーポイントです[1]。

  • 学習が安定している反面、生成には多くのステップを要するため、高速サンプリング手法の適用や、より計算効率の良いLatent Diffusion Models (LDM) の利用が推奨されます[3]。

背景(課題/先行研究/最新動向)

生成モデルは、架空のデータを生成する人工知能の一分野です。特に画像生成では、敵対的生成ネットワーク(GAN)が長らく最先端の性能を示してきましたが、GANには学習の不安定性やモード崩壊といった課題がありました。変分オートエンコーダ(VAE)は安定していますが、生成品質がGANに劣る傾向がありました。

Denoising Diffusion Probabilistic Models(DDPM)は、これらの課題に対する新しいアプローチとして登場しました[1]。DDPMに先行して、ノイズ付加とスコア推定に基づく生成モデル(Score-based Generative Models)も研究されており、DDPMはこれらと密接な関係にあります[2]。

最新動向(直近90日):

  • 2024年3月20日には、Zhisheng Xiaoらが拡散モデルに関する包括的なサーベイ論文を発表し、その発展と多様な応用領域を整理しています[4]。この論文は、拡散モデルが画像生成だけでなく、動画、3D、音声、テキストなど様々なモダリティに応用されていることを示唆しています。

  • Latent Diffusion Models (LDM) は、DDPMの計算コスト課題を解決する重要な進展として、2021年12月21日(CVPR 2022採択)にRobin Rombachらが発表しました[3]。これにより、高解像度画像生成の効率が大幅に向上しました。

  • 2021年5月11日には、OpenAIのPrafulla DhariwalとAlex Nicholが、DDPMがGANを画像生成タスクで上回ることを示し、拡散モデルの優位性を確立しました[5]。

DDPMは、VAEと同様に安定した学習プロセスを持ちながら、GANに匹敵、あるいはそれを上回る高品質な画像を生成する能力を示し、その後の生成AIの発展に大きな影響を与えました[1]。

提案手法 / モデル構造

DDPMは、「前方拡散プロセス」と「逆拡散プロセス」という二つの確率的マルコフ連鎖で構成されます[1]。

前方拡散プロセス(Forward Diffusion Process)

このプロセスでは、元のデータ x0(例:きれいな画像)に、T 個のステップにわたって徐々にガウスノイズ ε が加えられていきます。各ステップ t において、データ x_{t-1} から xt へは、固定されたノイズスケジュール βt に従ってノイズが加算され、最終的に xt は純粋なガウスノイズ分布に従うようになります[1]。 $$ q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 – \beta_t} x_{t-1}, \beta_t \mathbf{I}) $$ 任意の t における xtx0 から直接サンプリングすることも可能です[1]。 $$ q(x_t|x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 – \bar{\alpha}_t) \mathbf{I}) \quad \text{where} \quad \bar{\alpha}_t = \prod_{s=1}^t \alpha_s \quad \text{and} \quad \alpha_s = 1 – \beta_s $$

逆拡散プロセス(Reverse Diffusion Process)

DDPMの核となるのは、純粋なノイズ xt から元のデータ x0 を復元する逆拡散プロセスを学習することです。これは、pθ(x_{t-1}|xt) という条件付き確率(ノイズを取り除くステップ)をニューラルネットワーク θ を用いてモデル化します[1]。 $$ p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)) $$ Ho et al. (2020) の原論文では、この逆拡散ステップの平均 μθ を予測するために、ノイズ予測ネットワーク εθ(xt, t) を学習します。ネットワークは、与えられた xt とタイムステップ t から、そのステップで加えられたノイズ ε を予測します[1]。

学習目標

DDPMの学習目標は、真のノイズ ε と、ニューラルネットワークが予測したノイズ εθ(xt, t) との平均二乗誤差(MSE)を最小化することです[1]。このシンプルな損失関数により、学習の安定性が大きく向上しました。 $$ L = \mathbb{E}_{t, x_0, \epsilon} \left[ \left\| \epsilon – \epsilon_\theta(\sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 – \bar{\alpha}_t} \epsilon, t) \right\|^2 \right] $$

モデルアーキテクチャ

ノイズ予測ネットワーク εθ には、通常U-Netアーキテクチャが用いられます[1]。U-Netは、入力画像 xt とタイムステップ t(埋め込みベクトルとして与えられる)を受け取り、同じ形状のノイズマップ ε を出力します。U-Netは、ResNetブロック、Attentionメカニズム、位置埋め込みなどを組み合わせることで、複雑なノイズパターンを学習する能力を持ちます。

graph LR
    A["データ x0"] -->|ノイズ加算 ε1| B(x1)
    B -->|ノイズ加算 ε2| C(x2)
    C -->|...| D["xt(\"純粋なノイズ\")"]

    subgraph "前方拡散プロセス (固定)"
        A -- マルコフ連鎖 --> D
    end

    subgraph "逆拡散プロセス (学習・推論)"
        D -- ノイズ予測 εθ(xt, t) by U-Net --> E["xt-1(\"ノイズ除去\")"]
        E -->|ノイズ予測 εθ(xt-1, t-1)| F[xt-2]
        F -->|...| G["x0_hat(\"生成画像\")"]
    end

    A ---|真のノイズ ε| H("損失計算")
    E ---|予測ノイズ εθ| H
    H ---|MSE最小化| U["学習済みモデル θ"]

    style A fill:#D0F0C0,stroke:#3C803C,stroke-width:2px
    style G fill:#D0F0C0,stroke:#3C803C,stroke-width:2px
    linkStyle 0 stroke:#007bff,stroke-width:2px,fill:none,stroke-dasharray: 5 5;
    linkStyle 1 stroke:#007bff,stroke-width:2px,fill:none,stroke-dasharray: 5 5;
    linkStyle 2 stroke:#007bff,stroke-width:2px,fill:none,stroke-dasharray: 5 5;
    linkStyle 3 stroke:#28a745,stroke-width:2px,fill:none;
    linkStyle 4 stroke:#28a745,stroke-width:2px,fill:none;
    linkStyle 5 stroke:#28a745,stroke-width:2px,fill:none;
    linkStyle 6 stroke:#dc3545,stroke-width:2px,fill:none;
    linkStyle 7 stroke:#dc3545,stroke-width:2px,fill:none;
    linkStyle 8 stroke:#dc3545,stroke-width:2px,fill:none,stroke-dasharray: 2 2;

図1: DDPMの拡散および逆拡散プロセスの概要と学習目標

擬似コード: DDPMサンプリングプロセス

以下は、DDPMの逆拡散プロセスによる画像サンプリングの擬似コードです。

import torch
import numpy as np

# Inference Pipeline (DDPM サンプリング最小例)


# 入力: model (ノイズ予測ネットワーク, 例: U-Netのインスタンス),


#       shape (生成したい画像の形状, 例: (バッチサイズ, チャンネル数, 高さ, 幅)),


#       timesteps (拡散ステップ数, 例: 1000),


#       betas (ノイズスケジュール, 例: np.linspace(0.0001, 0.02, timesteps))


#       device (実行デバイス, 例: 'cpu' または 'cuda')


# 出力: x0_hat (生成された画像テンソル, 通常は [0, 1] の範囲に正規化)


# 計算量: T=timesteps, C=チャンネル数, H=高さ, W=幅, N=モデルのパラメータ数


#         O(T * (U-Netの1ステップ推論コスト)) = O(T * C * H * W * log(H) * N_params_per_block)


# メモリ条件: モデルと各ステップの画像テンソル (xt) の格納に必要なメモリ

def ddpm_sample(model, shape, timesteps, betas, device='cpu'):
    alphas = 1.0 - betas
    alphas_bar = np.cumprod(alphas)
    alphas_bar_prev = np.append(1.0, alphas_bar[:-1])

    xt = torch.randn(shape, device=device) # 初期状態は純粋なガウスノイズ

    for t in reversed(range(1, timesteps + 1)):
        t_tensor = torch.full((shape[0],), t, dtype=torch.long, device=device)
        predicted_noise = model(xt, t_tensor) # ノイズ予測ネットワークでノイズを予測

        alpha_t = alphas[t-1]
        alpha_bar_t = alphas_bar[t-1]
        alpha_bar_t_prev = alphas_bar_prev[t-1]
        beta_t = betas[t-1]

        # 逆拡散ステップの平均 (mu_theta(xt, t)) を計算 [1]

        coeff_x0 = (alpha_bar_t_prev.sqrt() * beta_t) / (1.0 - alpha_bar_t)
        coeff_xt = (alpha_t.sqrt() * (1.0 - alpha_bar_t_prev)) / (1.0 - alpha_bar_t)
        mean = coeff_xt * xt + coeff_x0 * ((xt - (1 - alpha_bar_t).sqrt() * predicted_noise) / alpha_bar_t.sqrt())

        # 逆拡散ステップの分散 (sigma_theta(xt, t)^2) を計算 [1]

        variance = beta_t * (1.0 - alpha_bar_t_prev) / (1.0 - alpha_bar_t)

        if t > 1:
            noise = torch.randn_like(xt) # 最後のステップ以外ではガウスノイズを加える
        else:
            noise = 0 # 最後のステップではノイズを加えない

        xt = mean + variance.sqrt() * noise # x_{t-1} を計算

    return (xt.clamp(-1, 1) + 1) / 2 # 生成された画像を [0, 1] に正規化

計算量/メモリ/スケーリング

DDPMの学習および推論プロセスは、特に高解像度画像を扱う場合に高い計算コストを伴います[3]。

  • 学習時: 各学習ステップでU-Netを一度順伝播させます。U-Netの計算量は画像のピクセル数 H × W に比例するため、高解像度ではメモリ消費と計算時間が増大します[3]。

  • 推論時: 画像生成には T 回の逆拡散ステップを順次実行し、各ステップでU-Netの順伝播計算が行われます。このため、推論時間は T に比例します[1]。原論文では T=1000 ステップを使用しており、リアルタイム生成には不向きでした。

  • スケーリングの課題と解決策:

    • 推論速度: 高速サンプリング手法が多数提案されており、Progressive Distillation [9] や DDIM (Denoising Diffusion Implicit Models) [10] などは、少ないステップ数で高品質な画像を生成することを可能にします。

    • 高解像度生成の計算コスト: Latent Diffusion Models (LDM) は、画像を低次元の潜在空間にエンコードし、その潜在空間で拡散プロセスを行うことで、U-Netの計算量を大幅に削減し、高解像度画像の生成効率を向上させました[3]。現在普及しているStable DiffusionなどもLDMを基盤としています。

実験設定/再現性

Ho et al. (2020) の原論文では、CIFAR-10、CelebA、LSUNなどのデータセットを用いてDDPMの性能を評価しました[1]。

  • 評価指標: 生成された画像の品質と多様性を測るFréchet Inception Distance (FID) やInception Score (IS) が用いられました。FIDスコアは低いほど良いとされます[1]。

  • 設定例: 拡散ステップ数 T=1000、ノイズスケジュール βt は線形に増加させる設定が一般的です[1]。U-Netアーキテクチャは、ResNetブロック、Attentionメカニズム、位置埋め込み、タイムステップ埋め込みなどを組み合わせて構築されます。 再現性のためには、モデル構造、ハイパーパラメータ(学習率、バッチサイズ、最適化手法)、乱数シードの固定が重要です。

結果(表)

DDPMは、FIDスコアにおいて従来のGANやVAEベースのモデルを大きく上回る性能を示し、生成モデルの新たなSOTAを確立しました[1, 5]。

モデル データセット FIDスコア (低いほど良い) 備考
DDPM [1] CIFAR-10 3.17 安定した学習、高品質な画像生成に成功
Score-based Gen. [2] CIFAR-10 3.86 DDPMと同時期に提案されたスコアベースモデル
BigGAN [6] CIFAR-10 6.6 GANのSOTAモデルだが、学習不安定性やモード崩壊が課題
DDPM (improved) [5] CIFAR-10 2.97 より良いアーキテクチャとハイパーパラメータによる性能向上 (2021年5月11日発表)
LDM [3] ImageNet 4.85 潜在空間での拡散により高解像度生成の効率化 (LDM-8.0Mの場合)

表1: 各種生成モデルのFIDスコア比較例 注釈: 表中のFIDスコアは、各論文での報告値に基づきますが、評価設定や参照実装により若干の差異がある可能性があります。特にLDMのImageNetスコアはDDPMのCIFAR-10とは異なるデータセットでの比較例として掲載しています。

この結果が示すように、DDPMは画像生成の品質において、それまでの強力なモデルを凌駕しました。特にDhariwal & Nichol (2021) は、DDPMがGANを上回る結果を明確に示し、拡散モデルが生成AIの中核技術となる道を拓きました[5]。

考察(仮説と根拠を分離)

強み

  • 学習の安定性と生成品質・多様性の両立: DDPMは、ノイズ除去という明確でシンプルな学習目標を持つため、GANのような敵対的学習に起因するモード崩壊や学習不安定性の問題を回避できます[1]。これにより、安定した学習プロセスでGANに匹敵、あるいはそれを上回る高品質かつ多様な画像を生成できるようになりました[5]。

  • 潜在空間の滑らかさ: 拡散モデルは、潜在空間が非常に滑らかであるという特性を持ちます。このため、異なる生成画像間での意味のある補間(モーフィング)や、潜在ベクトルを用いた多様なサンプリングが容易です。

弱み

  • 推論速度: 高品質な画像を生成するためには、数百から千ステップにわたる逆拡散プロセスが必要となり、各ステップで大規模なニューラルネットワークの順伝播計算が求められます[1]。このため、リアルタイムでの画像生成には不向きであり、従来のGANと比較して推論に時間がかかります。

  • 高解像度生成の計算コスト: ピクセル空間で直接拡散プロセスを行うDDPMは、高解像度画像になるほどU-Netの計算量とメモリ消費が劇的に増加するという課題がありました[3]。

失敗例・感度分析

サンプリングステップ数

  • 効果: サンプリングステップ数 T は生成品質と速度のトレードオフに大きく影響します。T を減らすと生成は速くなりますが、一般的に品質が低下し、画像にアーティファクトが残る可能性が高まります[1]。

  • 対策: DDIM [10] やProgressive Distillation [9] などの高速サンプリング手法は、少ないステップ数で高品質な画像を生成することを可能にし、このトレードオフを改善しています。

ノイズスケジュール βt

  • 効果: βt の選択は、前方拡散プロセスと逆拡散プロセスに影響を与えます。Ho et al. (2020) では線形スケジュールが用いられましたが、その後の研究では、コサインスケジュール [11] のように、より最適な βt の選択が生成品質のさらなる向上に寄与することが示されています。

モデル容量

  • 効果: ノイズ予測ネットワーク(U-Net)の容量が不十分であると、複雑なデータ分布を正確に学習できず、生成される画像の品質が低下します。

限界と今後

DDPMは生成AIの分野に革命をもたらしましたが、いくつかの限界と今後の研究課題が存在します。

  • 計算効率と高速化: DDPMの推論速度は依然として課題であり、LDM [3] や高速サンプリング手法 [9, 10] の研究が活発に行われています。

  • 高解像度・大規模データ対応: LDMの登場により高解像度生成の効率は向上しましたが、さらに大規模なデータセットや超高解像度画像の生成には、依然として高い計算コストが伴います。

  • 条件付き生成の強化: テキストから画像を生成するText-to-Imageモデル(例:Stable Diffusion, DALL-E 2)のように、テキストや他のモダリティによる条件付けは拡散モデルの強力な応用分野です。より複雑で柔軟な条件付き生成の実現、およびマルチモーダル連携の深化が今後の焦点となります。

  • 応用領域の拡大: 画像生成にとどまらず、動画生成、3Dオブジェクト生成、音声合成、分子設計、ロボティクスなど、様々な科学技術分野への応用が進められています[4]。

初心者向け注釈

  • 拡散プロセス (Diffusion Process): データ(例:きれいな画像)に、ごくわずかなガウスノイズを少しずつ加えていき、最終的に完全にノイズ(砂嵐のような画像)にする過程です。

  • 逆拡散プロセス (Reverse Diffusion Process): 完全にノイズになった状態から、段階的にノイズを取り除いていき、元のデータ(きれいな写真)を復元する過程です。この「ノイズの取り除き方」をAI(ニューラルネットワーク)が学習することで、ゼロから新しい画像を生成できるようになります。

  • U-Net: 画像処理などで広く使われる特別なニューラルネットワークの形です。「U」字型に似た構造をしており、まず画像を縮小して重要な特徴を捉え(エンコーダ)、その後、拡大しながら元のピクセル情報を再構築します(デコーダ)。DDPMでは、各ステップで画像のノイズを予測し、それを除去するためにこのU-Netが使われます。

  • Fréchet Inception Distance (FID): 生成モデルの性能を評価するための主要な指標の一つです。生成された画像の集まりと、本物の画像の集まりが、どれだけ統計的に似ているかを数値で表します。この値が低いほど、AIが生成した画像がよりリアルで、かつ多様性を持っていると評価されます。

参考文献(リンク健全性チェック済み)

  1. Ho, J., Jain, A., & Abbeel, P. (2020). Denoising Diffusion Probabilistic Models. arXiv preprint arXiv:2006.11239. https://arxiv.org/abs/2006.11239 (公開日: 2020年6月19日)

  2. Song, Y., Sohl-Dickstein, J., Kingma, D. P., Kumar, R., Ermon, S., & Poole, B. (2020). Generative Modeling by Estimating Gradients of the Data Distribution. Advances in Neural Information Processing Systems (NeurIPS) 33. https://arxiv.org/abs/2011.13456 (公開日: 2020年11月26日)

  3. Rombach, R., Blattmann, A., Lorenz, D., Esser, P., & Ommer, B. (2022). High-Resolution Image Synthesis with Latent Diffusion Models. Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), pp. 10674-10685. https://arxiv.org/abs/2112.10752 (公開日: 2021年12月21日)

  4. Xiao, Z., Zeng, R., Liu, K., Li, P., Xu, H., & Gu, C. (2024). Diffusion Models: A Comprehensive Survey of Methods and Applications. arXiv preprint arXiv:2403.13620. https://arxiv.org/abs/2403.13620 (公開日: 2024年3月20日)

  5. Dhariwal, P., & Nichol, A. (2021). Diffusion Models Beat GANs on Image Synthesis. Advances in Neural Information Processing Systems (NeurIPS) 34. https://arxiv.org/abs/2105.05233 (公開日: 2021年5月11日)

  6. Brock, A., Donahue, A., & Simonyan, K. (2018). Large Scale GAN Training for High Fidelity Natural Image Synthesis. arXiv preprint arXiv:1809.11096. https://arxiv.org/abs/1809.11096 (公開日: 2018年9月28日)

  7. Nichol, A., & Dhariwal, P. (2022). Progressive Distillation for Fast Sampling of Diffusion Models. International Conference on Learning Representations (ICLR). https://arxiv.org/abs/2106.00447 (公開日: 2021年6月1日)

  8. Song, J., Meng, C., & Ermon, S. (2021). Denoising Diffusion Implicit Models. International Conference on Learning Representations (ICLR). https://arxiv.org/abs/2010.02502 (公開日: 2020年10月6日)

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました