難しい仕事を一度で頼んで、薄い答えに腹を立てる。DDPM(Denoising Diffusion Probabilistic Models)は、その逆をやって画像生成の土台になりました。一枚の画像をノイズから一気に描かせるのではなく、少しだけきれいにする、という易しい作業を千回近く繰り返させたのです。この記事では、DDPMの考え方と学習の手順を数式に頼らずに整理し、成功の鍵が問題の割り方と、理論どおりの目的をあえて単純化したことにある点を示します。DDPMは、Stable DiffusionやImagenなど今の画像生成AIの土台になっている確率的生成モデルです。
前方過程で壊し、逆過程で一段ずつ戻します
DDPMは、二つの過程を組み合わせたモデルです。一つ目は前方過程(拡散過程)です。本物の画像に、ガウスノイズを少しずつ加えていきます。これをT回(通常は数百から千回)繰り返すと、画像は元の面影のない、ただのノイズになります。ノイズの強さは段階ごとに決めておき、最初は小さく、だんだん大きくします。この過程には学習するものはなく、決まった手順です。
二つ目は逆過程(逆拡散過程)です。ただのノイズから出発し、ノイズを一段ずつ取り除いて、データに戻していきます。この、一段だけきれいにする操作を、ニューラルネットワークに学習させます。
ノイズを加える量が一段ごとに十分小さければ、逆向きの一段もガウス分布で表せることが理論的に示されています。だから、ネットワークは各段で、どれだけノイズが乗っているかを予測すればよい、という単純な問題に置き換えられます。一枚の絵を描くという難問が、千個の易しい問題に割られたわけです。
この発想は、Sohl-Dicksteinら(2015)が非平衡熱力学に着想を得て提案し、SongとErmon(2019)、Hoら(2020)の研究で性能が大きく伸びました。DDPMはHoらの論文の名前です。
学習は、ノイズを当てる練習の繰り返しです
Hoらの工夫は、ネットワークに、加えられたノイズそのものを当てさせたことです。前方過程はガウス分布の性質から、元の画像とノイズから、任意の段のノイズ入り画像を一度に計算できます。これを使うと、学習は次の手順になります。
- 訓練データから画像を取り出す
- 何段目にするかをランダムに選ぶ
- 標準正規分布からノイズを作る
- 選んだ段に合わせて、画像にノイズを混ぜる
- ノイズ入り画像と段の番号をネットワークに入れ、ノイズを予測させる
- 本物のノイズとの二乗誤差を計算し、パラメータを更新する
ネットワークには、入力と出力の大きさが同じU-Netがよく使われます。画像を段階的に縮めて特徴をつかみ、また広げて元の大きさに戻す構造で、途中の情報をスキップ接続で受け渡します。今どの段のノイズを扱っているかが分かるように、段の番号を埋め込みベクトルに変換して渡します。
理論どおりの目的より、単純化した目的のほうが良い絵を出しました
理論上の目的は、データの対数尤度を高めることです。その変分下界(ELBO)を整理すると、各段の損失はおおむね二乗誤差の形になり、段ごとに重みがつきます。Hoらはこの重みを外し、ノイズ予測の誤差だけを使う形に単純化しました。その結果、学習が安定し、生成の品質も上がったと報告されています。
理論的に正しい項目を全部盛り込んだ重み付きの採点表ほど、現場で使われなくなる。DDPMの単純化は、その逆の選択が報われた例です。測るものを一つに絞ったほうが、学ぶ側が迷わなかったのです。ただし同じ論文では、尤度の数字そのものは、本来の目的で学習したほうが良かったとも報告されています。絵の見た目の品質が目的なら単純化が勝ち、データをどれだけ正確に確率として表せるかが目的なら本来の目的が勝つ。どちらが正しいかではなく、何を目的に置くかで答えが割れる、という話です。後のImproved DDPMは、損失の組み合わせやノイズの予定を見直して、品質と尤度の両方を改善しようとしました。
GANのように二つのネットワークを競わせる必要がないため、学習が崩れにくく、データの多様さを取りこぼしにくいのも利点です。
遅さという代償と、それを埋めた発展形
割った代償は、生成の遅さです。Tが1,000なら、1枚の画像を作るのにネットワークを1,000回動かします。この弱点を補うために、いくつもの発展形が生まれました。
| 手法 | 何を変えたか |
| DDIM | 学習はそのまま、生成の手順を変え、少ない段数で速く作る |
| スコアベースモデル | データ分布の勾配(スコア)を推定する別の視点。DDPMと理論的に深くつながる |
| Improved DDPM | 損失の組み合わせやノイズの予定を見直し、品質と尤度を改善 |
| 潜在拡散モデル | 画像を圧縮した潜在空間で拡散し、高解像度でも計算を軽くする |
Songらはスコアベースモデルを連続時間の確率微分方程式(SDE)の形に広げ、DDPMとスコアベースモデルを一つの理論で説明できることを示しました。潜在拡散モデル(Rombachら、2022)はStable Diffusionの基盤技術です。生成を条件で導くガイダンスも大事な発展で、分類器の勾配で導くClassifier Guidanceを経て、条件ありと条件なしの出力を補間するClassifier-Free Guidanceが登場し、文章から画像を作るモデルの性能を大きく押し上げました。応用は画像にとどまらず、DiffWaveやWaveGradによる音声合成、Diffusion-LMによる文章生成の研究にも広がっています。
割り方と渡す条件が、出てくる絵を決めます
文章から画像を作るAIでは、ノイズから画像を戻していく各段で、モデルを導いているのは私たちが渡した条件、つまりプロンプトです。条件があいまいなら、モデルは学習データのよくある姿に寄っていきます。条件をあいまいにしたまま千段の計算を回しても、千段かけて平均にたどり着くだけです。
DDPMから読み取れることは二つあります。難しい仕事は、一段ごとに良し悪しを確かめられる大きさに割ること。そして、何を目的に置くかで、同じ仕組みからでも良いとされる結果が変わること。どちらも、AIに仕事を頼む側の問題でもあります。
あなたが一度でAIに頼んでいる仕事のうち、易しい段に割れるものはどれですか。割ったとき、各段の良し悪しを何で測りますか。
この記事の背景にある考え方は、拙著『ChatGPT はじめてのプロンプトエンジニアリング』の2章1節「プロンプトの重要性と設計方針」に書きました。複数の作業を一つのプロンプトに書くとAIの注意が分散して質が落ちるので、1作業1プロンプトにして段階的に答えを積み上げる、という話です。そこには「1つの作業ずつAIに入力し、段階的に回答を得るようにします。」とあります。この節を読むと、自分の頼みごとをどこで区切れば、一段ごとの良し悪しを確かめられるかを考えられるようになります。
AIの答えが物足りないとき、疑うべきはAIか、自分の言葉か。
『ChatGPT はじめてのプロンプトエンジニアリング』
AIは言葉でしか動かない。プロンプトを暗記するのをやめ、構成要素に分解して、自分の言葉で意図を込める力を鍛える本です。
読み終えたとき、手元に残るもの
- 必須、任意、形式の三つに分けたプロンプトの構造
- 回答の質を変える、意図を込めた生きたプロンプト
- 発注と検収は人が担う、AIとの役割分担
- 章末の演習プロンプト26題
4刷重版。全国の大学図書館65館が所蔵しています(2026年10月時点)。

