見出し画像

あえて話したい!Stable Diffusion周辺の理論・内部実装。読んでおくべき記事の紹介

こんにちは、Hi君です。ついに梅雨入りし、なんとなく気が滅入る日が多くなりましたね。
そんな今日は、改めてStable Diffusion周辺の理論や内部実装の解説、またその背景にある数理モデル等を読み解くのに必要な記事の紹介をしていきたいと思います。

Stable Diffusionの背景理論について


SD関連参考論文:

最適化対象のモデルは下記2つの論文に書いてあります。損失関数設計 + パラメタ学習フロー等はこちらの論文という形です。

実装上はこの論文にかかれている内容について改善された形のモノも用いられている(下の論文等)ようです。

これらはDDPMとやっている事自体は大体同じですが、同等の最適化方法やその背景の理論立てを元に、効率化させた手法を用いて無駄なく高速に画像生成のための学習をやっているようです。

関連書籍


これを読めば(読めればですが…)バックボーン的なモデルの数理が大体分かります。それなりに一貫性のある内容で、DDPM、DDIM等Stable Diffusionの背景にあるモデル・画像生成手法について述べられています。実装上/実用上重要なものの、含まれていないトピックも一部あるのでご注意ください。

  • k-diffusion等、実際にデファクトスタンダードの一つになっている比較的新しいサンプラー等。

  • これ自体は"Elucidating the Design Space of Diffusion-Based Generative Models"を実装したモノ

  • Denoising processの際に利用されるU-Netアーキテクチャの内部構成(attention系モジュール等)

関連記事・動画等


日本語資料

Stable Diffusionやその背景のモデルがどのような面に由来してインパクトがあったのか、画像生成の方法、歴史について読みやすく書かれているZennの記事です。
記事内「05.解剖! Stable Diffusion (1) 論文を理解する」章の「Stable Diffusionの動作原理」という項目に、「Stable Diffusionによる画像生成の民主化」について、モデルを踏まえながら端的に触れられています。

Qiitaの@nishihaさんによる記事です。最低限の数式を含めながら、噛み砕いた言葉で書かれています。

ある程度機械学習に触れている人にとっては(一部のテクニカルタームが分かる人にとっては)読みやすく、端的に情報がまとまった記事です。
実際に使われているモデルに組み込まれているattentionモジュール等の説明も含まれています。

attentionモジュールそのものについての詳細を知りたい場合は、上記動画が分かりやすくまとまっています。self-attentionやcross-attention等で検索すると他に出てくる記事も複数ありますが、概要と詳細が両方含まれているような記事はあまりなく、実際に入力されるデータや入出力の例が含まれた情報も見つかりませんでした。

英文記事を和訳したものです。損失関数等の導出含め、数式を入れて端的に書かれた記事ですが、何故そのモデルや損失関数が正当なのか等の視点は多少補う必要がありそうです(次項で紹介する英文資料も併せて読むと良いかもしれません)。

英語資料

英文にはなりますが、上記で紹介した書籍「拡散モデル」で省略されている部分についても記述されているので、副読本的に読むと良いかも知れません。「拡散モデル」を読まなくても、分かる人にとっては、この資料のみで雰囲気を把握するには十分かと思います(が、それなりに難しい内容の記事です)。

確率微分方程式(SDE)関連のトピックなので内容は難しいです。拡散モデルは結果として、確率微分方程式的な損失関数を最小化するように学習しており、それについて直接的な形で端的にかかれている記事になります。物理的直観をより伴う情報を含む記事です。
(記事に書かれているコルモゴロフの前向き or 後向き微分方程式等のトピックについて、つまみ食いではなくしっかり理解するにはかなりハードな内容です)

内部実装について(WIP)


AUTOMATIC1111/stable-diffusion-webuiは、下のリポジトリ(runway)が管理するstable diffusionのモジュールを流用した形で実装されています。

下の記事はおそらく和文だと唯一stable diffusionの実装面に触れている記事です(runwayml/stable-diffusionではなくCompVis/stable-diffusionをベースとしていますが、runwayのリポジトリはこれの派生版なので関数の使い方等は共通です)

Stable Diffusion のコードを斜め読みする

難しい論文や記事が幾つかありますが、読んでみると興味深いことがたくさん書いてあります。お時間ある方はぜひ、のぞいてみてください。

文:Hi君
協力:inaho株式会社

この記事が気に入ったらサポートをしてみませんか?