新たな理論的観点から見る、スクラッチからの拡散モデル
- 拡散モデルは近年の生成モデリングにおいて印象的な結果を示しており、特にマルチモーダル分布からのサンプリングに優れている。
- 拡散モデルはテキスト画像生成ツールである Stable Diffusion で広く採用されているだけでなく、音声/動画/3D 生成、タンパク質設計、ロボット経路計画など多様な応用分野でも優れた性能を示している。
- このチュートリアルは最適化の観点から拡散モデルを紹介し、理論とコードの両方を扱いながら、拡散モデルをスクラッチから実装する方法を説明する。
拡散モデルを訓練する
- 拡散モデルは、訓練例から学習された集合からサンプルを生成することを目的とする。
- 拡散モデルの訓練には次のような過程が含まれる:
- K から x0 をサンプリングし、σmin と σmax の間でノイズレベル σ をサンプリングし、N(0,I) からノイズ ϵ をサンプリングする。
- ノイズ付きデータ xσ=x0+σϵ を生成する。
- 二乗損失を最小化しながら、xσ から ϵ(ノイズの方向)を予測する。
- 実際の訓練は
training_loop 関数を通じて行われ、これはバッチの x0 を反復し、generate_train_sample を使ってノイズレベル sigma とノイズベクトル eps をサンプリングする。
ノイズスケジュール
- 実際には σ は [σmin,σmax] 区間で一様にサンプリングされるのではなく、この区間は N 個の識別可能な値からなる σ スケジュール として離散化される。
Schedule クラスは利用可能な sigmas のリストをカプセル化し、訓練中にこのリストからサンプリングする。
- 対数線形スケジュールを使用し、他のスケジュールと比較しながら、デフォルトパラメータでこのスケジュールを比較するプロットも提供する。
おもちゃの例
- このチュートリアルでは、スパイラルからサンプリングされた点で構成されるおもちゃのデータセットを使用する。
- この単純なデータセットに対して、多層パーセプトロン(MLP)を使ってデノイザーを実装する。
- MLP は x∈R2 とノイズレベル σ を連結したものを入力として受け取り、ノイズ ϵ∈R2 を予測する。
- 必要な構成要素がすべて揃えば、拡散モデルを訓練できる。
デノイジングを近似射影として解釈する
- 拡散の訓練手順はデノイザー ϵθ(x,σ) を学習し、論文では学習済みデノイザーをデータ多様体 K への近似射影として解釈する。
- これは、拡散サンプリングアルゴリズムの収束を解析するために相対誤差近似モデルを導入する動機となる。
距離関数と射影関数
- 集合 K⊆Rn に対する 距離関数 は distK(x) と定義され、x∈Rn の 射影 はこの距離を達成する点の集合として定義される。
- もし projK(x) が一意であれば、distK(x) の勾配はその一意な射影の方向を向く。
理想的なデノイザー
- 特定のノイズレベル σ に対する理想的、または最適なデノイザー ϵ∗ は、訓練損失関数の正確な最小化解である。
- データが K 上の有限集合に対する離散一様分布であるとき、理想的なデノイザーは正確な閉形式表現を持つ。
相対誤差モデル
- 拡散サンプリングアルゴリズムの収束を解析するために、相対誤差モデルを導入する。
- このモデルは、σ が distK(x)/n をうまく推定するとき、デノイザーによって予測された射影 x−σϵθ(x,σ) が入力 x に対して projK(x) をよく近似すると仮定する。
拡散モデルでサンプリングする
- 学習済みデノイザー ϵθ(x,σ) からサンプリングして K に属する点 x0 を得るために、ノイズ xt とノイズレベル σt を持つデノイザー ϵθ(xt,σt) が x0 を予測する。
拡散サンプリングを距離最小化として解釈する
- 拡散サンプリングの反復は、関数 f(x)=12distK(x)2 に対する勾配降下として解釈できる。
- σt スケジュールをどのように選ぶかは、サンプリング中に取る勾配ステップの回数と大きさを決定する。
勾配推定による改良サンプラー
- 勾配推定を通じて、新しい効率的なサンプラーを導出する。
- このサンプラーは既存の DDIM サンプラーよりも速い収束を示す。
大規模な例
- 上で示した訓練コードは、おもちゃのデータセットだけでなく、画像拡散モデルをスクラッチから訓練する際にも使用できる。
- サンプリングコードは、事前学習済みの最先端潜在拡散モデルからサンプリングする際にも修正なしで動作する。
その他の資料
- 拡散モデルについては、次のブログ記事も推奨される:
- 拡散モデルとは何か は、マルコフ過程を反転させる離散時間の観点から拡散モデルを紹介する。
- データ分布の勾配を推定して生成モデリングを行う は、確率微分方程式を反転させる連続時間の観点から拡散モデルを紹介する。
- 注釈付き拡散モデル は、拡散モデルの PyTorch 実装を詳しく説明する。
GN⁺の意見
- このチュートリアルは拡散モデルを最適化の観点から紹介し、理論的背景と実際のコード実装を結び付ける形で説明することで、初級ソフトウェアエンジニアにもアクセスしやすいものとなっている。
- 拡散モデルは多様なデータ型に適用可能であり、これはマルチモーダル分布からのサンプリングが重要なさまざまな応用分野での活用可能性を示唆している。
- チュートリアルは拡散モデルの訓練とサンプリング過程を段階的に説明しており、これによってモデルの動作原理と実装方法への深い理解を助ける。
- 拡散モデルの訓練とサンプリング過程は比較的複雑であり、これを理解して実装するには機械学習とディープラーニングの基本的な知識が必要である。
- この技術を導入する際には、計算コスト、訓練データの品質、モデルの複雑性といった要素を考慮する必要があり、それによってより精巧で多様なサンプルを生成できる潜在力を持つ。
1件のコメント
Hacker Newsの意見
著者いわく、拡散モデルを理解しようとする中で、コードと数学をはるかに単純化できることに気づき、その結果としてブログ記事と拡散ライブラリを書くことになったとのこと。質問にも喜んで答える用意があるという。
別の優れた記事である『Diffusion Models From Scratch』は、数学的な詳細をより詳しく扱っており、500行未満の理解しやすい実装が付随している。
この記事にはコードが含まれていてよい。拡散の論文は多くの数式で知られているが、私たちのような人間にはコードのほうがより明確で理解しやすい。すべての理論論文には参照実装コードが添えられるべきだ。
拡散トランスフォーマーへの拡張を見てみたい。Soraや他の動画生成モデルを動かすのに使われている。この記事と『GPT From Scratch』を組み合わせて、『Diffusion Transformer From Scratch』の入門を作るとよさそうだ。
よい記事だが、拡散モデルが確率対数の導関数(スコア関数)をモデル化し、拡散サンプリングがランジュバン力学に似ているという重要な特性を見落としている。これがGANより訓練しやすい理由を説明している。
とても興味深い。Iterative alpha-(de)Blending論文を思い出す。この論文も概念的により単純な拡散モデルを設定し、おおまかな反復的投影過程としてそれを定式化している。このアプローチは、ノイズ除去誤差解析のような、より興味深い実験を可能にする。
拡散のアイデアの一つは、膨大な量の訓練データを得ることなのか? つまり、ランダムに拡散された画像と拡散されていない画像を対比するということか?
理論についてのよい説明だ。データセットに依存しないように見える。画像生成の具体的な点について気になる。たとえば、画像生成器がピアノの鍵盤を生成するのが難しいのはなぜなのか? よりよい中距離制約表現が必要に見える。
すべての機械学習モデルはコンボリューションであることを忘れるな。
この記事のコメントを使って秘密のメッセージを送る秘密結社があるので、ググらないように。