このサイトは「拡散モデル - データ生成技術の数理」に関する情報、訂正情報などを掲載します。誤りやコメントがありましたら サポートメール宛に送っていただけたら幸いです。
書誌情報 #
”多様で高品質な画像を生成し、人々を驚かせているアプリケーションは、どのような理論と技術により可能になったのか。従来は困難であった高次元のデータを創り出す生成モデルが注目されている。現在、最高の性能を発揮し、画像・動画・音声・化合物の生成など、多様な応用が期待されているのが拡散モデルである。その数理の本質から課題までを世界に先駆けて解説し、理論のさらなる発展を追究する。”(出版社紹介文より)
お知らせ #
- 2023/11/15 本書が第32回大川出版賞を受賞しました link
- 2023/2/27 電子版の予約を開始しました。また4刷が決定しました。
- 2023/2/17 本を発売開始しました。また2, 3刷が決定しました。
- 2023/2/4 「はじめに」からの抜粋、試し読みページへのリンクを加えました。
- 2022/1/28 拡散モデル サポートページを公開しました。
参考資料 #
-
WorkshopOT 2023での講演資料
- 本書内容の要約+αであり本書を読む前に一度目を通していただけるとわかりやすいと思います。
- 統計数理シンポジウム 2023での講演資料 (生成モデルは世界をどのように理解しているのか)
拡散モデル 目次 #
目次
- はじめに:爆発的に応用が広がる拡散モデル
- 記号一覧
- 第1章 生成モデル
-
- 1 生成モデルとは何か
-
- 2 エネルギーベースモデル・分配関数
-
- 3 学習手法
-
- 4 高次元で多峰性のあるデータ生成の難しさ
-
- 5 スコア:対数尤度の入力についての勾配
- 第1章のまとめ
-
- 第2章 拡散モデル
-
- 1 スコアベースモデルとデノイジング拡散確率モデル
-
- 2 スコアベースモデル
-
- 3 デノイジング拡散確率モデル
-
- 4 SBM と DDPM のシグナルノイズ比を使った統一的な枠組み
- 第2章のまとめ
-
- 第3章 連続時間化拡散モデル
-
- 1 確率微分方程式
-
- 2 SBM と DDPM の SDE 表現
-
- 3 SDE 表現の逆拡散過程
-
- 4 SDE 表現の拡散モデルの学習
-
- 5 SDE 表現の拡散モデルのサンプリング
-
- 6 確率フロー ODE
-
- 7 拡散モデルの特徴
- 第3章のまとめ
-
- 第4章 拡散モデルの発展
-
- 1 条件付き生成におけるスコア
-
- 2 分類器ガイダンス
-
- 3 分類器無しガイダンス
-
- 4 部分空間拡散モデル
-
- 5 対称性を考慮した拡散モデル
- 第4章のまとめ
-
- 第5章 アプリケーション
-
- 1 画像生成・超解像・補完・画像変換
-
- 2 動画・パノラマ生成
-
- 3 意味の抽出と変換
-
- 4 音声の合成と強調
-
- 5 化合物の生成と配座
-
- 6 敵対的摂動に対する頑健性向上
-
- 7 データ圧縮
- 第5章のまとめ
-
- 付録
- A. 1 事前分布が正規分布、尤度が線形の正規分布の場合の事後確率分布
- A. 2 ELBO
- A. 3 シグナルとノイズを使った確率フロー ODE の導出
- A. 4 条件付き生成問題
- A. 5 デノイジング暗黙的拡散モデル
- A. 6 逆拡散過程の確率微分方程式の証明
- A. 7 非ガウシアンノイズによる拡散モデル
- A. 8 Analog Bits :離散変数の拡散モデル
- 文 献
- 索 引
本書「はじめに」より抜粋 #
拡散モデルはデータを生成できるモデル、いわゆる生成モデルの1つで、注目を集めている。拡散モデルはその生成品質の高さや用途の多様性だけでなく、これまでの生成モデルにはない高い拡張性があり、多くの分野で急速に使われ始めている。
拡散モデルを利用した成果の代表例は、2022年に登場した DALL-E2 やMidjourney、Stable Diffusion であろう。これらのサービス/ソフトウェアは、ユーザーが指定したテキストに対応する画像を生成する。その際、生成対象だけでなく、そのスタイルやテーマを自由に指定することができる。そのため世界中の多くのユーザーの注目を集めており、既に膨大な量の作品が生成されている。自然言語がカバーする膨大な対象、スタイル、テーマに対応する高品質な画像を生成できるこれらのサービスの技術の根幹が拡散モデルであり、そのポテンシャルの高さを示している。
拡散モデルは従来の生成モデルと比べて優れた点が多くある。1つ目は、学習が安定していることである。拡散モデルでは1つのモデルで安定した最尤(さいゆう)推定を使って学習すればよく、敵対的生成モデル(例えば GAN)のように学習が不安定ではなく、また変分自己符号化器(VAE)のように生成モデルと同時に認識モデルを学習する必要がない。2つ目は、難しい生成問題を簡単な部分生成問題に自動的に分解し、難しいデータ対象も生成できるように学習できることである。拡散モデルの生成過程は、多くの確率層を使った非常に深いネットワークとみなすことができる。この特徴をもとに、拡散モデルは生成モデルとしては初めて、複雑な動画生成の学習にも成功した。3つ目は、様々な条件付き生成を実現できる点である。ガイダンスとよばれる仕組みを使って、後付け(プラグイン)で条件付けを実現でき、さらにその条件付けの強さを自由に設定でき、品質と多様性のトレードオフをとれる。この特徴はエネルギーベースモデルがもつが、学習や推論が難しかった。拡散モデルは初めて大規模なエネルギーベースモデルを実現したといえる。4つ目は、生成における対称性、不変性を組み込むことができる点である。世の中の様々な現象やデータには対称性がみられるが、拡散モデルを使ってこうした対称性を満たすような生成モデルを設計することができる。
拡散モデルでは、データにノイズを徐々に加えていき、データを完全なノイズに変換する拡散過程を考える。そして、この拡散過程を逆向きにたどる逆拡散過程によって生成過程を定義する。すなわち、完全なノイズから徐々にノイズを除去するデノイジングによってデータを生成する。このように、拡散モデルはデータを破壊することで、その生成方法を学習するというユニークなアイディアに基づいている。
拡散モデルは潜在変数モデルに基づく生成モデルとみなすことができる。潜在変数モデルに基づく生成モデルは、はじめに潜在変数を生成し、次に潜在変数から観測データを生成する。拡散モデルでは、最初のノイズや途中のノイズを加えたデータが潜在変数であるとみなせる。
潜在変数モデルは学習の際、観測データからそれを生成している潜在変数を推定する必要があり、これを実現するのが認識モデルである。一般に生成過程が単純であったとしても、観測データに対する潜在変数の事後確率分布は複雑になりやすく、生成モデルより認識モデルの学習のほうが難しい。拡散モデルは、学習の必要がない固定の拡散過程を認識モデルとして使っているとみなすことができ、生成モデルのみを学習する。拡散過程は事後確率分布が潰れてしまう、いわゆるモード崩壊が発生せず、また、入力に対応する任意の深さにある潜在変数の事後確率分布を解析的に求められるという優れた性質をもつ。
拡散モデルの学習は、様々な強さのノイズを加えたデータから、加えられたノイズを推定するデノイジングスコアマッチングとよばれるタスクを解くことで実現される。生成時には、推定されたノイズを使ってデノイジングしていくことでデータを生成することができる。
一方、対数尤度(ゆうど)の入力についての勾配、つまり対数尤度が最も急激に増加する方向を表すベクトルをスコアとよぶ。そして、本書ではデノイジングスコアマッチングによって得られるデノイジングベクトルとスコアが一致することをみる。そして、拡散モデルは様々な強さのノイズを加えた攪乱後分布上のスコアに従ってデータを遷移していくランジュバン・モンテカルロ法を使ってデータを生成しているとみなすことができる。
拡散過程はノイズを加えていくステップを極限まで細かくしていくことにより確率微分方程式(SDE)に変換でき、さらに同じ確率分布を表す常微分方程式(ODE)に変換できることをみていく。このようにして拡散モデルは、SDE、ODE の分野で発展している様々な理論や手法を利用することができる。例えば、ODE に変換することによって、拡散モデルはデータ分布からノイズ分布への決定的な過程で変換される可逆変換を与えることができる。これによりデータの対数尤度を不偏推定することができたり、データの潜在表現を得ることができる。
拡散モデルは登場してまだ間もない。2015年に拡散モデルの最初のアイディアが Jascha Sohl-Dickstein 氏らによって発表された。非平衡熱力学に基づく手法であり、まったく新しいアプローチであった。しかし当時は GAN やVAE が大きく成功しはじめた頃であり、また拡散モデルの生成品質も十分ではなく、しばらくは注目されなかった。
2019 年に Yang Song 氏が、スコアを使った生成モデルであるスコアベースモデルを提案し、その際に、データに様々な強さのノイズを加えた複数の攪乱後分布上のスコアを組み合わせることにより高品質なデータ生成ができることを示した。2020 年に Jonathan Ho 氏らによって拡散モデルが再発見され、拡散モデルとスコアベースモデルが統一的なデノイジングスコアマッチングの枠組みで扱えること、また、デノイジングに使うモデル(ニューラルネットワークアーキテクチャ)を工夫することにより他の生成モデルに匹敵する生成品質を達成できることが示された。
そして 2021年には拡散モデルの SDE 化や ODE 化が示された。また、実際のアプリケーションにおいて重要である、条件付き生成が示された。こうした発展をみるなかで、拡散モデルの優れた点が注目され、画像や音声、点群、化合物の生成など、多くの問題に対して拡散モデルが急速に使われるようになった。さらに、生成以外にも補完や編集、超解像、データ圧縮、敵対的摂動に対する頑健性向上などにおいても従来手法を凌駕する性能が達成できることが示され、爆発的に応用が広がっていった。
本書では拡散モデルの基本的な考え方から、その発展的な捉え方と、その応用について解説する。なお本書では拡散モデルの考え方や数理的な構造に注目し、発展を支えているもう 1つの重要な柱であるディープラーニングやニューラルネットワークについては詳しく取り上げていない。これらについては他のディープラーニングの文献(例えば拙著の文献 [1] [2] など)などを参考にしてほしい。
本書を通じて、生成モデルの可能性に興味をもっていただけたらと思う。
拡散モデル 誤植情報 #
(紙版中のページ番号です。版によって修正済みの場合があります。)
- P.xiii 「\partial x_m -> \partial x_d」(関数fの勾配)
- P.xiii 「\sigma」-> 「\sigma^2」(正規分布)
- P.3 図1.2 左図 「y_{out=}」-> 「y_{out}=」
- P.4 4行目「非負関数 \gamma_{\theta}(\bm{x}) > 0」-> 「非負関数 \gamma_{\theta}(\bm{x}) \geq 0」
- P.6 5行目「L(\theta)=\log q_{\theta}(D)=\sum_i…」 -> 「L(\theta)=\frac{1}{N} \log q_{\theta}(D)= \frac{1}{N} \sum_i…」
- P.8 14行目「Push-foward」->「Push-forward」
- P.9 図1.5 「Z \sim p(z)」->「z \sim p(z)」
- P.15 図1.9「\epsilon」->「\alpha」
- P.17 12行目「この第2項は\mathbf{s}_{\theta}(\mathbf{x})iの」-> 「この第2項は\mathbf{s}{\theta}(\mathbf{x})の」
- P.18 図1.10 「2次微分の和を負」 -> 「2次微分の和を正」
- P.18 下から1行目 「2次微分の和を負」 -> 「2次微分の和を正」
- P.21 4行目 「x」->「\mathbf{x}」
- P.29 2行目「s」->「\mathbf{s}」(:=の式)
- P.37 下から7行目 「 t = 1,2,…,L 」 -> 「t=1,2,…,T」
- P.37 下から5行目 「\mathbb{E}_ {p_ {\sigma}{t}} (\tilde{\mathbf{x}))」-> 「\mathbb{E}{p_{\sigma}_t \tilde{\mathbf{x}))}」(\tilde{x}まで下付き)
- P.38 1行目「|^2」->「|」
- p.39 4行目 「s_\theta」 -> 「\mathbf{s}_\theta」
- P.39 Algorithm 2.1のL8, 「s」-> 「\mathbf{s}」
- P.39 Algorithm 2.1のL11, L12のインデントが左に一つずつ下げる
- P.42 13行目 「t=i」「t=i+1」-> 「t=t」「t=t+1」(この場合、左辺が変数、右辺が値と考えてください)
- P.43 6行目「2つの正規分布」->「2つの正規分布からのサンプル」
- P.44 5行目 「(認識過程)」->「(推論過程)」
- P.46 9行目 「各値を-1から1のk個」 -> 「各値を-1から1のk+1個」
- P.51 下から2行目 L_{t-1} - C -> \mathbb{E}{x_0}[L{t-1}] - C
- P.54 11行目「\simga_i」->「\sigma_t」
- P.54 下から8行目「枠組み[6]」-> 「枠組み (D. Kingma et al., “Variational Diffusion Models”. NeurIPS 2021.
- P.56 11行目「\mathcal{N}(\mathbf{0}, a^2+b^2)」-> 「\mathcal{N}(\mathbf{0}, (a^2+b^2)\mathbf{I})」
- P.57 2行目の右端 「σ_{t|s}^2 σ_s^2 / σ_t^2}」-> 「σ_t^2 / (σ_{t|s}^2 σ_s^2)」(分子と分母が逆)
- P.57 4行目 「拡散モデル」->「DDPM」
- P.59 下から3行目の右端 「σ_{t|s}^2 σ_s^2 / σ_t^2}」 -> 「σ_t^2 / (σ_{t|s}^2 σ_s^2)」(分子と分母が逆)
- P.60 9行目「α_s (σ_t^2 - α_{t|s}^2 σ_s^2)^2」-> 「α_s^2 (σ_t^2 - α_{t|s}^2 σ_s^2)」
- P.61 9行目「関数SNR(t)は単調増加関数」 -> 関数SNR(t)は単調減少関数」
- P.63 下から8行目「x_t = sigmoid(-γ_θ(t))x + sigmoid(γ_θ(t))ε」 -> 「x_t = \sqrt{sigmoid(-γ_θ(t))}x + \sqrt{sigmoid(γ_θ(t))}ε」
- P.71 下から12行目 目的関数のtに関する期待値の括弧が閉じられていない(一番外側)
- P.72 8行目「T=t_T > t_{T-1} > … > t_1 = 0」 -> 「T=t_T > t_{T-1} > … > t_0 = 0」
- P.87 11行目 「条件付スコア p(x|y)」 -> 「条件付スコア \nabla_{\mathbf{x}} \log p_t(x|y)」
- P.91
- 9行目 「\mathbf{0}」-> 「0」
- 11行目「また、j < kの時、k番目の部分空間はj番目の部分空間」-> 「また、j < kの時、k番目の部分空間はj番目の部分空間の部分空間」
- 下から7行目「UU_k^T x ∈ R^d」 -> 「U_k U_k^T x ∈ R^d」
- 下から3行目「ただしσは」 -> 「ただしδは」
- P.92 下から10行目「[U_1^T U_1 = I_{n_k}」 -> U_1^T U_1 = I_d」
- P.97 4行目「各技」-> 「各枝」
- P.100 4行目「p(\mathbf{z}_0)」->「p(\mathbf{x}_0)」
- P.101 「\mathbf{g} \in R^3 を並進移動を表す」 -> 「「\mathbf{g} \in R^3 を並進移動を表すベクトル」
- P.102 1行目「g」-> 「\mathbf{g}」
- P.112 下から8行目 Jensenの不等式「dx」→ 「dz」
- P.113 3行目 「モンテカルロ推定で対数尤度の不偏推定」 -> 「モンテカルロ推定で対数尤度の下限の不偏推定」
- P.119 8行目「\sum_{t=1}T」-> 「\sum_{t=1}^T」