拡散モデルとは
Diffusion Model
データに徐々にノイズを加える過程を学習し、その逆過程をたどってノイズから新しいデータを生成するモデル
ひとことで言うと
ノイズだらけの砂嵐のような画像を、少しずつきれいな画像へ整えていくことで新しい画像を作るAI。
概要
拡散モデルは、元のデータへ段階的にガウスノイズを加えていき最終的に完全なノイズへ変換する「拡散過程」と、その逆にノイズから段階的にノイズを取り除いて元のデータらしいものを復元していく「逆拡散過程」の2つで構成される生成モデル。 学習では、各ステップでノイズが加えられたデータから、加えられたノイズそのものを予測するようニューラルネットワークを訓練する。 生成時には、ランダムなノイズから出発し、学習済みネットワークが予測したノイズを繰り返し差し引いていくことで、最終的に自然な画像やその他のデータを作り出す。 Stable DiffusionやDALL-E 2、Imagenなど、2022年前後から急速に普及した高品質な画像生成AIの多くが拡散モデルを採用しており、GANに代わる生成モデルの主流として広がっている。
背景
GANは高品質な画像を生成できる一方、学習が不安定になりやすいという課題があった。 拡散モデルは、ノイズの除去という比較的単純で安定したタスクを繰り返し学習させることで、高品質な生成と学習の安定性を両立させる方向性として発展した。
歴史
2015年: Sohl-Dickstein らが非平衡熱力学に着想を得た拡散モデルの枠組みを提案。 2020年: Ho らが論文「Denoising Diffusion Probabilistic Models」(DDPM)で現在の実用的な拡散モデルの基礎を確立。 2021-2022年: OpenAIのDALL-E 2、GoogleのImagen、Stability AIのStable Diffusionなど、拡散モデルベースの画像生成サービスが相次いで登場。
アーキテクチャ
拡散過程では、元データ x_0 に対しタイムステップ t ごとに少量のガウスノイズを加え、十分な回数繰り返すことで x_T をほぼ純粋なノイズにする。 逆拡散過程では、ニューラルネットワーク(多くの場合U-Net構造)が、ノイズが加えられたデータ x_t とタイムステップ t を入力として受け取り、そこに含まれるノイズを予測する。 生成時はランダムなノイズ x_T から出発し、予測されたノイズを少しずつ差し引く操作を t=T から t=0 まで繰り返し、最終的な生成データ x_0 を得る。
コード例
diffusersライブラリでの画像生成
from diffusers import DDPMPipeline
pipeline = DDPMPipeline.from_pretrained("google/ddpm-cifar10-32")
image = pipeline().images[0]
image.save("generated.png")利点
- GANと比べて学習が安定しやすく、モード崩壊(生成結果の多様性が失われる現象)を起こしにくい
- テキストなどの条件付け情報を組み込みやすく、テキストから画像を生成する用途に適している
- 生成過程を多数のステップに分解しているため、生成の途中経過を制御しやすい
欠点
比較
関連用語
よくある質問
拡散モデルとGANの違いは?
GANは生成器と識別器を競わせる敵対的学習で1回の順伝播から画像を生成するのに対し、拡散モデルはノイズ除去を何十ステップも繰り返して画像を生成する。学習の安定性では拡散モデルが優れる一方、生成速度はGANの方に分がある。
拡散モデルの生成に時間がかかるのはなぜ?
ノイズから画像を復元する逆拡散過程は、通常は数十〜数百ステップに分けて繰り返し実行する。ステップ数を減らす高速化手法(DDIMなど)も研究されている。
参考文献
- Research PaperDenoising Diffusion Probabilistic Models