✍️ 필사 모드: Diffusion Models Deep Dive — DDPM、Latent Diffusion、Classifier-Free Guidance、DDIM、Stable Diffusion 完全攻略 (2025)
日本語TL;DR
- Diffusion Modelは「段階的なノイズ除去を学習する」生成モデル。Forward processが画像に徐々にノイズを加え、Reverse process (ニューラルネットワーク) がそれを戻す。
- DDPM (2020, Ho et al.): 現代diffusionの出発点。Variational lower boundをnoise prediction lossひとつに単純化。
- Score Matching: 同じ発想を別の言葉で。Reverse diffusion = score function推定。
- U-Net: Diffusionの標準バックボーン。Skip connection付きencoder-decoder。入力と同じサイズのnoiseを出力。
- Latent Diffusion Model (LDM, 2021): VAEで画像をlatent空間に圧縮し、その中でdiffusion。48倍の計算削減 → コンシューマGPUで可能に。
- Stable Diffusion = LDM + CLIP text encoder + オープンソース公開 (2022 Stability AI)。
- Classifier-Free Guidance: 条件付き/無条件モデルを組み合わせてprompt忠実度を調整。Text-to-image品質の秘訣。
- DDIM: 決定論的sampling。1000 step → 20 stepに加速。
- Consistency Model: 1-4 stepで生成。リアルタイム級。
- Conditional Generation: ControlNet、LoRA、InstructPix2Pixなどで制御可能。
- Video & 3D: Sora、Stable Video Diffusion、DreamFusion。Diffusionが画像を超えて広がる。
1. 生成モデルの進化
1.1 GANの時代 (2014-2020)
2014年 Ian GoodfellowのGAN (Generative Adversarial Network)。Generatorが画像を作り、Discriminatorが「本物 vs 偽物」を判別。2つのネットワークが競争しながら学習。
長所:
- 一度でサンプル生成 (速い)。
- 高品質な画像。
短所:
- Mode collapse: 一部のモードしか生成しない。
- Training instability: ハイパーパラメータに非常に敏感。
- スケーリングが難しい: データを増やしたときに不安定。
StyleGAN (2019) まで進化したが、複雑なシーン (テキストを含む) には限界。
1.2 VAEの限界
VAE (Variational Autoencoder) は安定だが結果がぼやける。Encoderがlatent codeの分布を学習し、Decoderが復元。生成は可能だが品質でGANに劣った。
1.3 Autoregressiveの限界
PixelRNN、PixelCNN、iGPT: ピクセルを順次生成。品質は良いが非常に遅い (ピクセル一つひとつを予測)。1024×1024の画像生成 = 100万回のforward pass。
1.4 Diffusionの登場 (2020)
2020年DDPM (Ho, Jain, Abbeel)。「奇妙なほど単純な」方法:
- 画像に段階的にノイズを追加 (forward)。
- ニューラルネットワークにノイズを予測させる。
- 生成時はランダムノイズから始め、繰り返しノイズ除去。
結果: GANより品質が良く、安定し、多様なサンプル。コミュニティが沸いた。
1.5 スケーリングの成功
2021: Dhariwal & Nicholが「Diffusion Beats GANs」を発表。画像品質SOTA。
2021 GLIDE: OpenAIによるtext-to-image diffusion。ただし遅く重かった。
2021 LDM: Rombach et al.のLatent Diffusion。流れを変えた。ピクセル空間ではなくlatent空間でdiffusion → 50倍高速。
2022 DALL-E 2: OpenAIの強力なtext-to-image。
2022 Stable Diffusion: Stability AIがLDMをオープンソース化。ローカルGPUで実行可能。生成AIの大衆化。
2022 Imagen: Google。text encoderの重要性を証明。
2024 Sora: OpenAIのビデオdiffusion。分単位の高品質ビデオ。
1.6 なぜDiffusionは成功したか
核心: 学習が単純で安定。GANのmin-maxゲームではなく単純なMSE loss。スケールに応じて一貫して改善。より多くのデータ + 大きなモデル = より良い結果。「単純なものがスケールする」。
2. Forward Process — ノイズの追加
2.1 アイデア
画像 x_0 にノイズを段階的に追加:
x_0 (原本) → x_1 → x_2 → ... → x_T (ほぼ純粋なノイズ)
各stepで少しずつガウシアンノイズ。T = 1000 (DDPM)。
2.2 数式
各stepの遷移:
意味:
x_tはsqrt(1 - beta_t) * x_{t-1}を平均、beta_tを分散とするガウシアンからサンプリング。beta_tは noise schedule — 各stepでどれだけノイズを加えるか。- 序盤は小さい
beta(画像を保持)、終盤は大きいbeta(ノイズが支配)。
2.3 Noise Schedule
Linear (DDPM原本):
beta_1 = 0.0001
beta_T = 0.02
beta_t = 線形補間
Cosine (Nichol & Dhariwal, 2021):
alpha_t = cos^2(pi/2 * (t/T + s) / (1 + s))
beta_t = 1 - alpha_t / alpha_{t-1}
Cosineは序盤はゆっくりノイズを加えるため低解像度で有利。現代のほとんどのモデルはcosineまたはその変種。
2.4 Closed Form
連鎖適用時に便利な性質: 任意の t における x_t を直接計算可能。
定義:
すると:
あるいはsamplable form:
Forward processは学習なしに数学で計算される。原本 x_0 とランダムノイズ epsilon さえあれば、任意の時点の x_t を即座に生成できる。
2.5 終端状態
T が十分に大きければ alpha_bar_T はほぼ 0 で x_T はほぼ N(0, I)。原本と無関係な純粋ガウシアンノイズ。
ここが核心: どんな画像から始めても終端状態は同じ。Reverse processは純粋ノイズから始めても画像に到達可能。
3. Reverse Process — 学習が必要な部分
3.1 目標
Forward processを「逆に戻したい」:
真の逆過程はBayesで表現できるが扱いにくい。ニューラルネットが近似する。
3.2 パラメータ化
2つの方法:
1. 平均 mu_theta(x_t, t) を予測:
2. ノイズ epsilon_theta(x_t, t) を予測:
Ho et al.が示した — ノイズを直接予測するほうがはるかに良く機能する。平均は次式で導出:
3.3 Lossの単純化
Variational Lower Boundを導出すると複雑だが、Ho et al.の洞察: 単純なMSE lossでもほぼ同じ効果:
つまり:
- ランダムな原本画像
x_0。 - ランダムな時点 t。
- ランダムなノイズ
epsilon。 - Forwardで
x_tを計算。 - ニューラルネットに
x_tを与えepsilonを予測させる。 - MSEで学習。
驚くほど単純。GANのmin-maxはない。純粋なsupervised learning。
3.4 Sampling (Inference)
学習完了後の生成:
def sample(model, T=1000):
# 開始: 純粋ノイズ
x_t = torch.randn(shape)
for t in reversed(range(T)):
# ノイズ予測
epsilon = model(x_t, t)
# 平均を計算
alpha_t = alphas[t]
alpha_bar_t = alpha_bars[t]
beta_t = betas[t]
mu = (1 / sqrt(alpha_t)) * (x_t - beta_t / sqrt(1 - alpha_bar_t) * epsilon)
# 次stepをサンプル
if t > 0:
z = torch.randn_like(x_t)
sigma = sqrt(beta_t)
x_t = mu + sigma * z
else:
x_t = mu
return x_t # 生成画像
各stepでモデルを1回呼び出す → 次のstep。1000 step = 1000回のforward pass。非常に遅い。
3.5 なぜ機能するのか
直感: クリーンな画像からノイズの多い画像への変換は確率的。逆もまた然り。十分に小さいstepであればガウシアンで近似可能。モデルは「現在のノイズ水準から一歩だけクリーンにする方向」を学べばよい。
数学的には diffusion SDE の離散化。連続SDEの形式:
Reverse SDE (Anderson 1982):
grad_x log p_t(x) が score function — これが次のセクション。
4. Score-Basedの視点
4.1 Score Function
分布 p(x) の score は:
「この点で確率が増える方向」。高確率領域へ向かうgradient。
4.2 Score Matching = Diffusion
驚くべき等価性: DDPMのノイズ予測 = score推定。
証明のスケッチ: x_t ~ N(sqrt(alpha_bar_t) x_0, (1 - alpha_bar_t) I) のとき、
つまり scoreはノイズに比例。ノイズ予測とscore推定は同じ問題の別表現。
4.3 Song & Ermonの視点
Yang Songの研究 (2019-2020) は score-based generative model を先に提案。DDPMとは独立だが数学的には同等。
長所: 連続SDEフレームワークのほうがきれい。ODE形式 (probability flow ODE) でも表現可能。
4.4 統合フレームワーク
Song et al. 2021 "Score-Based Generative Modeling through SDEs": DDPM、NCSNなどはすべて同じSDEフレームワークの特殊ケース。
現代のdiffusion研究は SDE の視点と DDPM の視点を自在に行き来する。実用的には DDPM 表記が直感的、理論的には SDE が優雅。
5. U-Netアーキテクチャ
DiffusionモデルのバックボーンはほとんどがU-Net。
5.1 なぜU-Netなのか
Diffusionモデルの要件:
- 入力と出力が同じ空間サイズ (画像 → ノイズ)。
- マルチスケール特徴が必要 (globally coherent + locally detailed)。
- 位置情報の保存。
U-Net (もともと医療画像セグメンテーション用、2015):
- Encoder: 解像度↓、チャンネル↑。
- Decoder: 解像度↑、チャンネル↓。
- Skip connection: encoderとdecoderの同レベルを直接接続。
完璧な相性。
5.2 構造
Input (例: 64x64x3)
|
v
Conv -> ResBlock -> Attention
| |
| Downsample (-> 32x32)
| |
| ResBlock -> Attention
| |
| Downsample (-> 16x16)
| |
| ResBlock -> Attention <- Bottleneck
| |
| Upsample (-> 32x32)
| ^ (skip from encoder)
| ResBlock -> Attention
| ^
| Upsample (-> 64x64)
| ^ (skip)
v
Output (64x64x3) — 予測されたノイズ
5.3 Timestep Embedding
U-Netは現在の時点 t を知る必要がある。同じ画像でも「初期diffusion (少しノイズ)」vs「後期 (多くのノイズ)」でdenoisingは異なる。
Sinusoidal position embedding:
その後 MLP → ResBlock に bias として加算。
5.4 Attention Layer
Diffusion U-Netには self-attention が含まれる。長距離依存関係 (遠いピクセル間の相関) を捉える。特にbottleneck付近。
5.5 Conditioning
テキスト条件付き生成では cross-attention を追加:
Image features -> Query
Text features (CLIP) -> Key, Value
U-Netがテキストと画像の間を学習する。これが「promptに従う」核心。
5.6 2025: Diffusion Transformer (DiT)
2023年 William Peebles et al. が Diffusion Transformer (DiT) を提案。U-Netの代わりに純粋なTransformer。
- パッチ単位入力 (ViTのように)。
- スケーリング特性が優秀。
- Soraの基盤。
DiTは大規模でU-Netを上回る → 2024-2025のトレンドはDiTへ移行中。
6. DDIM — 高速Sampling
6.1 DDPMの遅さ
DDPMは1000 step sampling。超高品質だが遅すぎる。1分以上。
6.2 DDIMの洞察
Song et al. 2021: DDPMのreverse processを決定論的にしてstepをスキップ可能にできる。
核心の数式 (簡略化):
ここで:
x_hat_0 は「現時点での最良予測」 — 「今すぐクリーンな画像を出すならこれ」。
6.3 高速Sampling
DDPMは1000 stepが必要。DDIMは任意のサブシーケンスが使える:
timesteps = [0, 50, 100, 150, 200, ..., 950] # 20 steps
50倍高速。品質はわずかに落ちるがほぼ同じ。
6.4 各種Sampler
DDIM以降、多くのvariant:
- Euler: ODE視点のEuler integrator。
- Heun: 2次のRunge-Kutta。
- DPM-Solver: diffusion向けの特殊ODE solver。10-25 step。
- DPM-Solver++: さらに改良。現在Stable Diffusionのデフォルト。
- UniPC: unified predictor-corrector。
すべて同じ発想: samplingをODE問題と捉え、効率的なsolverを適用。
7. Classifier-Free Guidance
Text-to-imageの最も重要なトリック。
7.1 問題
素朴な条件付き生成:
x_t -> model(x_t, text) -> noise
問題: モデルがテキストを無視しうる。学習中にテキストは弱いシグナル。
7.2 Classifier Guidance (旧)
元はDhariwal & Nicholの提案。別途classifierを学習して:
grad_x log p(y|x) が classifier gradient。問題: 別のclassifierの学習が必要で複雑。
7.3 Classifier-Free Guidance (新)
Ho & Salimans 2022: classifierなしで同じ効果。
学習時:
- 10-20%の確率でテキストを null (空の条件) に置き換える。
- 同じモデルが条件付きと無条件の両方を学習。
推論時:
noise_cond = model(x_t, text) # 条件付き予測
noise_uncond = model(x_t, null) # 無条件予測
# Extrapolation!
guided_noise = noise_uncond + scale * (noise_cond - noise_uncond)
scale = 1 は単純な条件付き。scale > 1 は条件方向へ強化。一般値: 5-12。
7.4 なぜ機能するのか
直感: 「条件付きから無条件を引けば条件の効果だけが残る」。これを拡大 → 条件を強調。まるで「テキストにもっと忠実であれ」と強制するように。
実用的には text-to-image の prompt忠実度 を決める。これがないと promptは無視される。
7.5 Trade-off
scale を上げると:
- 良い点: promptにより正確。
- 悪い点: 画像の多様性が減少。
- 悪い点: artifactが増加 (scaleが過大だと)。
通常 7-12 が sweet spot。
8. Latent Diffusion Model
8.1 ピクセル空間の問題
原DDPMはピクセル空間でdiffusion。512×512×3 = 786,432 次元。各stepでこのすべての次元を処理 → 非常に高コスト。
8.2 LDMのアイデア (Rombach et al. 2021)
「ピクセル空間は無駄が多い。ほとんどのピクセルは近傍と似ており、意味のある情報はもっと少ない次元にある。VAEで圧縮してその空間でdiffusionしよう」。
構造:
Image (512x512x3)
|
VAE Encoder
|
Latent (64x64x4) <- ここでdiffusion
|
VAE Decoder
|
Image (512x512x3)
Latent空間は 64×64×4 = 16,384 次元。原本の1/48。計算を48倍削減。
8.3 VAEの学習
LDMは事前学習済みのVAEを使う。VAEは別途学習:
- Encoder: 画像 → latent。
- Decoder: latent → 画像。
- Loss: reconstruction + KL + perceptual (LPIPS) + adversarial (discriminator)。
一度学習すればすべてのdiffusionで再利用。
8.4 Diffusion in Latent Space
VAEは固定。その上で標準DDPM:
latent = vae.encode(image) # 画像 -> latent
noisy_latent = forward_diffusion(latent, t)
predicted_noise = unet(noisy_latent, t, text)
# Loss: MSE between predicted_noise and actual noise
生成時:
noise = torch.randn(1, 4, 64, 64) # latent size
for t in reversed(timesteps):
noise = denoise_step(unet, noise, t, text)
image = vae.decode(noise)
8.5 利点のまとめ
- 計算: 48倍高速。
- メモリ: 同じく48倍少ない。
- 高解像度が可能: 1024×1024も現実的。
- Semantic abstraction: latent空間が意味のある表現を学習 → より良い汎化。
8.6 限界
- VAE損失: 細部の情報損失 (テキスト、顔など)。
- VAE artifact: わずかなぼかし、微妙な歪み。
- それでも圧倒的に価値がある。
9. Stable Diffusion
9.1 構成
Stable Diffusion (2022 Stability AI) = LDM + CLIP + オープンソース。
コンポーネント:
- VAE: 画像 ↔ 8倍圧縮されたlatent。
- CLIP text encoder: テキスト → 768次元ベクトル。
- U-Net: latent空間のdiffusion。Cross-attentionでテキスト条件。
- Scheduler: DDIM、DPM-Solverなど。
9.2 CLIP Text Encoder
OpenAI CLIP (Contrastive Language-Image Pre-training, 2021)。大規模な画像-テキストペアで学習されたテキスト/画像encoder。
役割:
- prompt → 高次元embedding。
- U-Netのcross-attentionがこのembeddingを参照。
CLIPが良いほどprompt理解が良い。Stable DiffusionはCLIP ViT-L/14を使用。
9.3 学習データ
LAION-5B: ウェブからクロールした50億の画像-テキストペア。Openなので再現可能。著作権論争もここから。
9.4 バージョンの進化
SD 1.x (2022): 最初のリリース。512×512。OpenAI CLIP。
SD 2.x (2022): aestheticsの改善。OpenCLIPを使用。
SDXL (2023): より大きなモデル、refiner。1024×1024ネイティブ。大幅に良い品質。
SD 3 (2024): Rectified flowを採用。Diffusion Transformerベース。
Flux (2024 Black Forest Labs): SD3を受け継ぐ強者。オープンソースSOTA。
9.5 オープンソース vs クローズド
Stable Diffusion: オープンソース。ローカル実行、fine-tuning、改変が可能。
DALL-E 3、Midjourney: APIのみ。品質はより良いかもしれないがブラックボックス。
研究/カスタマイズはSDが主流。商用品質はクローズド。
10. Conditional Generationのテクニック
10.1 Text-to-Image (基本)
上で説明済み。テキストprompt → 画像。
10.2 Image-to-Image (img2img)
初期latentをランダムノイズではなく既存画像のlatentから開始。
input_latent = vae.encode(input_image)
noisy = forward_diffuse(input_latent, strength) # partial noise
output = denoise(noisy, text)
strength が 0.3 なら少しだけ変わり、0.9 ならほぼ再生成。「この絵をこう変えて」のパターン。
10.3 Inpainting
マスクの内側だけ再生成。マスクされた部分はノイズ、残りは原本を維持。
mask = user_drawn_mask
latent = vae.encode(image)
for t in reversed(timesteps):
# ノイズ予測
noise = unet(noisy, t, text)
# マスク外は原本で置換 (毎step)
noisy = noisy * mask + forward_diffuse(latent, t) * (1 - mask)
特定領域のみ修正。Photoshopの「generative fill」がこれ。
10.4 ControlNet
Lvmin Zhang et al. 2023。追加条件で構造を制御。
アイデア: U-Netを複製した「control」ネットワークを学習。Controlネットワークがedge、pose、depthのようなヒント画像を受け取り、U-Netに影響を与える。
Input image (pose skeleton)
|
ControlNet copy of U-Net
|
Influence on main U-Net
|
Output: promptに合うがposeに従う
ControlNetのバリエーション:
- Canny: edgeベース。
- Depth: depth mapベース。
- OpenPose: 人間のposeベース。
- Scribble: 手描きスケッチ。
- Segmentation: semantic mask。
「特定の構図 + 自由なスタイル」パターン。非常に有用。
10.5 LoRA (Low-Rank Adaptation)
事前学習済みモデルを小さなパラメータで特化。
アイデア: 各レイヤーの重み W に low-rank update を追加。
B は R^{d x r}、A は R^{r x k}、r << min(d, k)。
A、B のみ学習。元の W は固定。結果:
- はるかに少ないパラメータ: 数百MB → 数MB。
- 高速な学習: 数千画像で特定のスタイル/キャラクタを学習。
- 切り替え可能: 複数のLoRAをon/off。
Civitai のようなサイトに数万のLoRA。「このアニメキャラのスタイル」「このアーティストのスタイル」など。
10.6 DreamBooth
特定の被写体 (自分の犬、特定の人物) を学習。5-10枚の写真だけで。
入力: 犬の写真数枚
学習: "sks dog" のような固有tokenをこの犬に結びつける
出力: "sks dog on the beach" -> 自分の犬が海辺に
LoRAと組み合わせた軽量DreamBoothが主流。
10.7 Textual Inversion
新しい単語を学習。単語のembeddingのみ学習しモデルは固定。
"<new_concept>" というtokenを学習
このtokenのembeddingが特定のスタイル/被写体を表現
より軽量だが制限的。
10.8 InstructPix2Pix
自然言語命令で編集。
入力: 画像 + "remove the person"
出力: 人が消された画像
ChatGPTスタイルの編集インターフェイス。
11. Consistency Models — リアルタイム生成
11.1 問題
DDIMでも20-50 stepが必要。リアルタイム (100ms未満) には不足。
11.2 Consistency Model (Song et al. 2023)
「DiffusionはODE軌道をたどる。その軌道の任意の点から直接 x_0 へジャンプできるように学習しよう」。
学習後、1-4 stepで高品質生成が可能。
11.3 Latent Consistency Model
LCM (2023): LDM + Consistency Distillation。Stable Diffusionを2-4 stepに加速。
従来のSDXL: 25 step x 150ms = 3.75s
LCM SDXL: 4 step x 150ms = 600ms
リアルタイム対話的生成が可能。ユーザがpromptを入力するにつれ結果がリアルタイム更新。
11.4 SDXL Turbo
Stability AIの2023年リリース。SDXLを1 stepで生成。品質はわずかに落ちるがほぼ即時。
11.5 Progressive Distillation
元モデル (teacher) の複数stepを1 stepで学習する手法。繰り返しstep数を半分に。
1000 → 500 → 250 → ... → 1 step。
各段階でstudentモデルがteacherのn stepを1 stepで近似。
12. ビデオDiffusion
12.1 素朴なアプローチ
各フレームを独立にdiffusion → フレーム間の一貫性がない。ちらつき、キャラクタが変わる。
12.2 Temporal Attention
U-Netに temporal attention layer を追加。時間軸に沿ってattentionをかけて一貫性を維持。
Spatial Attention (画像内の位置)
Temporal Attention (フレーム間)
12.3 Video Diffusion Models
Stable Video Diffusion (2023): 画像 → 短いビデオ (2-4秒)。
Sora (2024 OpenAI): 分単位の高品質。Diffusion Transformerベース。Patch単位で空間×時間を統合処理。
Soraの秘訣:
- DiTアーキテクチャ (U-Netではない)。
- Spacetime patches: 3D volumetric処理。
- 巨大なスケール (モデル + データ)。
- 高品質なキャプション (GPT-4でビデオ説明を生成)。
13. 3D Diffusion
13.1 DreamFusion
2D diffusion modelを使って3Dオブジェクトを生成。
アイデア: SDS (Score Distillation Sampling)。3Dオブジェクトのパラメータ (NeRF) を最適化。2D diffusionが「このビューはこのpromptに忠実か」を評価。
結果: 数時間の学習後「テキスト → 3D mesh」。
13.2 Gaussian Splatting + Diffusion
2023+ Gaussian Splattingが3D表現の基本に。DiffusionがGaussianパラメータを生成。
13.3 限界
2Dよりはるかに難しい。学習データ不足、品質の限界。現在活発な研究領域。
14. 実装実践
14.1 Hugging Face Diffusers
Pythonライブラリ。Stable Diffusionなどを3行で:
from diffusers import StableDiffusionPipeline
import torch
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
).to("cuda")
image = pipe("a photograph of an astronaut riding a horse").images[0]
image.save("astronaut.png")
14.2 Schedulerの差し替え
from diffusers import DPMSolverMultistepScheduler
pipe.scheduler = DPMSolverMultistepScheduler.from_config(
pipe.scheduler.config
)
# これで20 stepでも高品質
image = pipe(prompt, num_inference_steps=20).images[0]
14.3 LoRAのロード
pipe.load_lora_weights("path/to/lora", weight_name="my_style.safetensors")
pipe.fuse_lora(lora_scale=0.7)
image = pipe("a cat in my_style style").images[0]
14.4 ControlNet
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
controlnet = ControlNetModel.from_pretrained(
"lllyasviel/sd-controlnet-canny"
)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet
)
from PIL import Image
edge_image = Image.open("canny_edges.png")
image = pipe(prompt="a modern house", image=edge_image).images[0]
14.5 Inference最適化
- FP16:
torch_dtype=torch.float16。メモリ半減、速度改善。 - Memory-efficient attention:
pipe.enable_xformers_memory_efficient_attention()または PyTorch 2+ のscaled_dot_product_attention。 - VAE tiling: 大きな画像生成時のメモリ超過を防止。
- TensorRT / OpenVINO: コンパイル最適化。2-3倍の加速。
15. 倫理と法的課題
15.1 著作権
LAION-5Bには著作権画像が含まれる。学習の合法性が議論されている。
- Getty Images: Stability AIを相手取った訴訟 (2023)。
- Andersen v. Stability AI: アーティストによる集団訴訟。
2025年現在、判決が進行中。結果がAI産業全体に影響する。
15.2 Deepfakes
Face swap、わいせつ合成。Diffusionの品質向上とともに悪用が増加。
対策:
- Content credentials (C2PA): 画像にメタデータでAI生成を表示。
- Watermarking: Stable Signatureのようなinvisible watermark。
- Detection: AI生成検出モデル。
15.3 バイアス
学習データのバイアスが出力に反映。特定の職業 = 男性、特定の外見 = 優位。研究と緩和が活発。
15.4 雇用
イラストレーター、デザイナーの懸念。「AIが絵を描くなら私は?」新しいツールへの適応 vs 規制の議論。
16. 今後の方向性
16.1 高品質 + 高速生成
Consistency modelのさらなる発展。1 stepでの高品質生成。
16.2 コントロール
単純なテキストを超えた精密な制御 — pose、構図、色調、スタイル。
16.3 一貫性
複数の画像/フレーム間の一貫性。キャラクタの同一性の維持。
16.4 Multimodal
テキスト + 画像 + 音声 + ビデオの統合生成。
16.5 小型モデル
LCM、Turboのような加速 + モデル縮小。モバイル/エッジでの実行。
16.6 Physical Simulation
Soraが示した可能性: diffusionが物理法則を「暗黙的に」学習。「world model」への拡張。
17. 学習リソース
論文:
- DDPM (Ho et al. 2020) — 必読。
- Latent Diffusion (Rombach et al. 2021)。
- Classifier-Free Guidance (Ho & Salimans 2022)。
- DDIM (Song et al. 2020)。
- Stable Diffusion (2022 Stability AI)。
- DiT (Peebles & Xie 2023)。
- Consistency Model (Song et al. 2023)。
書籍/ガイド:
- "Hands-On Machine Learning" — Aurelien Geron (拡張版にdiffusion追加)。
- Lilian Wengのブログ: "What are Diffusion Models?"。
- Jay Alammarの可視化ブログ。
コード:
- Hugging Face Diffusersライブラリ (Python)。
- Stability AI公式リポ (stability-ai/generative-models)。
- AUTOMATIC1111 Stable Diffusion Web UI。
講義:
- Yang SongのMIT講義 (score-based models)。
- Andrew Ngの生成AIコース。
18. 要約 — 1ページまとめ
+-----------------------------------------------------+
| Diffusion Models Cheat Sheet |
+-----------------------------------------------------+
| 核心アイデア: |
| ノイズ追加 -> ネットがノイズ予測 -> 戻す |
| |
| Forward Process: |
| x_t = sqrt(alpha_bar_t) * x_0 + sqrt(1-abar) * eps |
| 学習なしで計算可能 |
| Noise schedule: linear, cosine |
| |
| Reverse Process: |
| ネット eps_theta(x_t, t) を学習 |
| Loss: MSE(eps, eps_theta) |
| Simple, stable, scalable |
| |
| 数学的視点: |
| DDPM: variational bound |
| Score matching: grad log p(x) |
| SDE: dx = f dt + g dW |
| ODE: probability flow |
| |
| U-Netアーキテクチャ: |
| Encoder-decoder + skip |
| Timestep embedding (sinusoidal) |
| Self-attention + Cross-attention (text) |
| 2024+: Diffusion Transformer (DiT) |
| |
| Sampling: |
| DDPM: 1000 step、遅い |
| DDIM: 決定論的、20-50 step |
| DPM-Solver++: 10-25 step |
| Consistency Model: 1-4 step |
| |
| Latent Diffusion (LDM): |
| VAE encoder: image -> latent |
| latentでdiffusion (48x削減) |
| VAE decoder: latent -> image |
| Stable Diffusionの基盤 |
| |
| Classifier-Free Guidance: |
| 学習: 10% null condition |
| 推論: uncond + scale*(cond - uncond) |
| scale 7-12 = prompt忠実 |
| |
| 条件付き制御: |
| Text: CLIP + cross-attention |
| Image: img2img |
| Structure: ControlNet (canny, pose, depth) |
| Style: LoRA |
| Subject: DreamBooth |
| Edit: InstructPix2Pix, inpainting |
| |
| Production: |
| Stable Diffusion (オープン) |
| DALL-E 3, Midjourney (クローズド) |
| Flux (2024+, SOTAオープン) |
| |
| 拡張: |
| Video: Sora, Stable Video Diffusion |
| 3D: DreamFusion |
| Audio: AudioLDM |
+-----------------------------------------------------+
19. クイズ
Q1. DDPMの学習lossが単純なMSEである理由は?
A. Ho et al. (2020) の核心的な洞察 — variational lower boundを数学的に単純化すると、各stepで「実際のノイズと予測ノイズのMSE」に帰着する。元々は複雑なKL divergence項があるが、reparameterizationと巧みな導出の後、ほとんどが消えてノイズ予測誤差だけが残る。これがDiffusionの学習をGANのような不安定なmin-maxゲームではなく純粋なsupervised learningにした核心理由。lossが単純なのでスケールに応じて一貫して改善し、ハイパーパラメータに対する敏感さが低い。「単純なものがスケールする」原則の典型例。
Q2. Latent Diffusionが計算を48倍削減した方法は?
A. VAEで画像を圧縮した後、latent空間でdiffusion。原本の512×512×3 = 786,432次元のピクセル空間の代わりに、64×64×4 = 16,384次元のVAE latent空間でdenoisingを実行。各stepが48倍小さいtensorを処理 → 計算とメモリの両方が48倍削減。VAEは事前学習済みでdiffusion学習中は固定。損失は軽微 (VAEの再構成品質が良いため)。この単純な変更で「データセンターが必要」から「コンシューマGPUで実行可能」になり、それがStable Diffusionがオープンソースで大衆化できた背景。小さな構造変更が社会的影響をもたらした事例。
Q3. Classifier-Free Guidanceはどのように機能するのか?
A. 学習時には10-20%の確率でテキスト条件をnull (空の条件) に置き換えることで、同じモデルが条件付き生成と無条件生成の両方を学習。推論時には2つの予測を計算: noise_cond = model(x, text) と noise_uncond = model(x, null)。そのあとextrapolation: guided = uncond + scale * (cond - uncond)。scale > 1 なら「条件方向に誇張」 → テキストpromptにより忠実。直感的には「条件付きから無条件を引けば条件の純粋な効果が残る」を拡大したもの。scale 7-12がsweet spot。この単純なトリックがtext-to-imageの実用品質を決定 — これがないとpromptが無視される。
Q4. Score-basedの視点とDDPMの視点の関係は?
A. 数学的に等価。Yang Songのscore-based generative model (2019) とHoのDDPM (2020) は独立に開発されたが、同じものの異なる表現。Score function grad_x log p(x) を推定することと「ノイズ epsilon を予測すること」が定数倍で関係する: grad_{x_t} log p(x_t) = -epsilon / sqrt(1 - alpha_bar_t)。Song et al. 2021が2つを統合SDEフレームワークで証明。実用的にはDDPM表記が直感的でコードが単純、理論的にはSDE/scoreが優雅で連続極限を扱いやすい。2つの視点を自在に行き来できれば論文読解がはるかに容易になる。
Q5. DDIMがDDPMより50倍速い理由は?
A. 決定論的samplingを可能にしてstepをスキップできるようにする。DDPMのreverse processは確率的 (毎stepランダムノイズを追加) なので、必ず1000 stepを順次踏まねばならない。DDIMは同じ学習済みモデルを違うように解釈して決定論的ODE軌道と見なす — 「現在の x_t から x_{t-1} へ行く方向」が数学的に定まる。決定論的なのでサブシーケンス (例: [0, 50, 100, ..., 950] 20 step) にジャンプしても数学的に合理的。品質は少し落ちるがほぼ同じ。以後DPM-Solver、DPM-Solver++などがより効率的なODE solverで10-25 stepまで削減。すべて「DDIMの決定論的経路」アイデアに基づく。
Q6. ControlNetが従来の条件付き生成と異なる点は?
A. 構造的制御のためにU-Netの複製を追加学習する。既存のcross-attentionテキスト条件は「スタイル/内容」を制御するが、「正確な構図/pose」は調整しにくい。ControlNetはU-Net encoderの複製を作り、新しい入力 (canny edge、pose skeleton、depth mapなど) を受けて元のU-Netの各レイヤーに影響を与える。元のU-Netは固定、ControlNet部分のみ学習 → 小さなデータでも可能。結果: 「このスケッチの構図 + promptの内容」が正確に結合。実写写真のposeをマンガ風に変換する、建物のレイアウトからレンダリング生成など。精密な制御が必要な実務で必須。2023年以降SDの標準機能。
Q7. Consistency Modelが1-4 stepで生成できる理由は?
A. 軌道の任意の点から直接 x_0 にジャンプするようモデルを学習する。一般のdiffusionは「現在stepから一歩クリーンに」学習するが、Consistency Modelは「現在stepから完全にクリーンな画像に直接」を学習する。これが可能な理由は、diffusionのprobability flow ODE軌道が決定論的だから — 同じ軌道上のすべての点が同じ x_0 に収束すべきというconsistency条件をlossに追加。学習後は1 stepでかなり良い結果、2-4 stepで高品質。Latent Consistency Model (LCM) はこれをLDMに適用しSDXLを4 stepで回す。リアルタイム対話的生成 (ユーザのタイピングに合わせてリアルタイム更新) を可能にした技術。
この記事が役に立った方は、次の記事もチェックしてみてください:
- "Transformer Architecture Deep Dive" — DiTの基盤。
- "LLVM Compiler Infrastructure" — MLIRがAIコンパイラの基盤となった背景。
- "RDMA & NCCL" — 大規模diffusionモデル学習のネットワーク基盤。
- "CUDA & GPU Kernels" — diffusion推論の加速。
현재 단락 (1/495)
- **Diffusion Model**は「段階的なノイズ除去を学習する」生成モデル。**Forward process**が画像に徐々にノイズを加え、**Reverse process** (ニュ...