概要
O'Reilly Japan - ゼロから作るDeep Learning ❺
- 人気シリーズの第5弾
- 今回のテーマは「生成モデル」
- 「正規分布」から「拡散モデル」までの技術を繋がりのあるストーリーとして展開
- 読者は小さな学びを積み重ねながら、ステップバイステップで実装
最終的には「Stable Diffusion」のような画像生成AIを完成
ソースコードは以下からColab等で実行可能
GitHub - oreilly-japan/deep-learning-from-scratch-5
- 正誤表
Errata · oreilly-japan/deep-learning-from-scratch-5 Wiki · GitHub
目次と図表
ステップ1 正規分布
1.1 確率の基礎 1.1.1 確率変数と確率分布 1.1.2 確率分布の種類 1.1.3 期待値と分散 1.2 正規分布 1.2.1 正規分布の確率密度関数 1.2.2 正規分布のコード 1.2.3 パラメータの役割 1.3 中心極限定理 1.3.1 中心極限定理とは 1.3.2 中心極限定理の実験 1.4 サンプル和の確率分布 1.4.1 サンプル和の期待値と分散 1.4.2 コードで確かめる 1.4.3 一様分布の平均と分散 1.5 身の回りにある正規分布
ステップ2 最尤推定
2.1 生成モデルの概要 2.1.1 生成モデルとは 2.1.2 母集団とサンプル 2.2 実データを使った生成モデルの実装 2.2.1 身長データセットの読み込み 2.2.2 正規分布による生成モデル 2.3 最尤推定の理論 2.3.1 尤度の最大化 2.3.2 微分を使って最大値を探す 2.3.3 正規分布の最尤推定 2.4 生成モデルの用途 2.4.1 新しいデータの生成 2.4.2 確率の計算
ステップ3 多次元正規分布
3.1 NumPyと多次元配列 3.1.1 多次元配列 3.1.2 NumPyの多次元配列 3.1.3 要素ごとの演算 3.1.4 ベクトルの内積と行列積 3.2 多次元正規分布 3.2.1 多次元正規分布の式 3.2.2 多次元正規分布の実装 3.3 2次元正規分布の可視化 3.3.1 3Dグラフの描画方法 3.3.2 等高線の描画 3.3.3 2次元正規分布のグラフ 3.4 多次元正規分布の最尤推定 3.4.1 最尤推定を行う 3.4.2 最尤推定の実装 3.4.3 実データを使う
ステップ4 混合ガウスモデル
4.1 身の回りにある多峰性分布 4.1.1 多峰性分布のデータセット 4.2 混合ガウスモデルのデータ生成 4.2.1 GMMによるデータ生成 4.2.2 データ生成を行うコード 4.3 混合ガウスモデルの式 4.3.1 確率の復習 4.3.2 GMMの式 4.3.3 GMMの実装 4.4 パラメータ推定の難所 4.4.1 GMMのパラメータ推定
ステップ5 EMアルゴリズム
5.1 KLダイバージェンス 5.1.1 数式の表記について 5.1.2 KLダイバージェンスの定義式 5.1.3 KLダイバージェンスと最尤推定の関係 5.2 EMアルゴリズムの導出① 5.2.1 潜在変数を持つモデル 5.2.2 任意の確率分布q(z) 5.3 EMアルゴリズムの導出② 5.3.1 ELBO(エビデンスの下界) 5.3.2 EMアルゴリズムへ 5.3.3 複数データへの拡張 5.3.4 log p(x; θnew) ≥ log p(x; θold)の証明 5.4 GMMと EMアルゴリズム 5.4.1 EMアルゴリズムのEステップ 5.4.2 EMアルゴリズムのMステップ 5.5 EMアルゴリズムの実装 5.5.1 データセットとGMMのコード 5.5.2 EステップとMステップの実装 5.5.3 データ生成
ステップ6 ニューラルネットワーク
6.1 PyTorchと勾配法 6.1.1 PyTorchのインストール 6.1.2 テンソルの計算 6.1.3 勾配法 6.2 線形回帰 6.2.1 トイ・データセット 6.2.2 線形回帰の理論 6.2.3 線形回帰の実装 6.3 パラメータとオプティマイザ 6.3.1 ParameterとModuleクラス 6.3.2 オプティマイザ 6.4 ニューラルネットワークの実装 6.4.1 非線形なデータセット 6.4.2 線形変換と活性化関数 6.4.3 ニューラルネットワークの実装 6.5 torchvisionとデータセット 6.5.1 torchvisionのインストール 6.5.2 MNISTデータセット 6.5.3 前処理 6.5.4 データローダ
ステップ7 変分オートエンコーダ(VAE)
7.1 VAEとデコーダ 7.1.1 1つの正規分布 7.1.2 混合ガウスモデル(GMM) 7.1.3 VAE 7.1.4 EMアルゴリズムの問題点 7.2 VAEとエンコーダ 7.2.1 EMアルゴリズムからVAEへ 7.2.2 データセット全体への適用 7.3 ELBOの最適化 7.3.1 ELBOの評価 7.3.2 変数変換トリック 7.4 VAEの実装 7.4.1 実装の方針 7.4.2 VAEのコード 7.4.3 学習を行うコード 7.4.4 新しい画像の生成
ステップ8 拡散モデルの理論
8.1 VAEから拡散モデルへ 8.1.1 VAEの復習 8.1.2 潜在変数の階層化 8.1.3 拡散モデルへ 8.2 拡散過程と逆拡散過程 8.2.1 拡散過程 8.2.2 逆拡散過程 8.3 ELBOの計算① 8.3.1 拡散モデルのELBO 8.3.2 ELBOの式展開 8.4 ELBOの計算② 8.4.1 q(xt | x0)の式 8.4.2 ELBOの近似解 8.4.3 q(xt | x0)の導出 8.5 ELBOの計算③ 8.5.1 q(xt−1 | xt, x0)の式 8.5.2 ELBOの近似解 8.5.3 q(xt−1 | xt, x0)の導出 8.6 拡散モデルの学習 8.6.1 ニューラルネットワークは何を予測するか? 8.6.2 元データを復元するニューラルネットワーク 8.6.3 ノイズを予測するニューラルネットワーク 8.6.4 新しいデータのサンプリング
ステップ9 拡散モデルの実装
9.1 U-Net 9.1.1 U-Netとは 9.1.2 U-Netの実装 9.2 正弦波位置エンコーディング 9.2.1 正弦波位置エンコーディングとは 9.2.2 正弦波位置エンコーディングの実装 9.2.3 U-Netに組み込む 9.3 拡散過程 9.3.1 q(xt | xt−1)からのサンプリング 9.3.2 画像に対する拡散過程 9.3.3 q(xt | x0)からのサンプリング 9.3.4 Diffuserクラスの実装 9.4 データ生成 9.4.1 ワンステップのデノイズ処理 9.4.2 データ生成の実装 9.5 拡散モデルの学習(実装編) 9.5.1 拡散モデルの学習コード 9.5.2 学習結果
ステップ10 拡散モデルの応用
10.1 条件付き拡散モデル 10.1.1 拡散モデルに条件を追加する 10.1.2 条件付き拡散モデルの実装 10.2 スコア関数 10.2.1 スコア関数とは 10.2.2 式(10.1)の証明 10.3 分類器ガイダンス 10.3.1 分類器とは 10.3.2 分類器ガイダンスの導出 10.4 分類器なしガイダンス 10.4.1 分類器なしガイダンスの理論 10.4.2 分類器なしガイダンスの実装 10.5 Stable Diffusion 10.5.1 Stable Diffusionの仕組み 10.5.2 Diffusersライブラリ
他
付録A 多次元正規分布の最尤推定の導出 A.1 μの最尤推定 A.2 2次形式の微分(式(A.4)の証明) A.3 Σの最尤推定 A.4 トレースと微分(式(A.12)の証明) 付録B イェンセンの不等式 B.1 凸関数とイェンセンの不等式 B.2 凹関数とlog関数 B.3 ELBOの導出 付録C 階層型VAEの理論と実装 C.1 2階層VAEの構成要素 C.2 ELBOの式展開 C.3 モンテカルロ法によるELBOの近似 C.4 2階層VAEの実装 C.5 実装コード 付録D 数式記号一覧 D.1 本書で使用する記号 D.2 本書で使用する数式 おわりに 参考文献 索引 コラム目次 「積の対数」は「対数の和」 EMアルゴリズムにおける対数尤度の単調増加性 ラグランジュの未定乗数法 2つの正規分布間のKLダイバージェンス イェンセンの不等式を使ったELBOの導出 L1ノルムとL2ノルム 期待値の線形性と関連する変数の期待値 正規分布の平均ベクトルに関する微分 正規分布の共分散行列に関する微分