Stable Diffusionって何? #2
Stable Diffusionの仕組みに迫るシリーズ第2段です!
今回は、潜在拡散モデル(英: latent diffusion model)をメインに解説します。
読者の想定と作成方針
AIイラスト作成に触れたことがある人を読者として、簡単な理解から積み上げるように説明していくことで誰でも理解できることを目指します。
※数式は使わず模式図でふわっと説明するので詳しい方は読むときに注意してください。
前回のおさらい
前回の記事では、拡散モデル(Diffusion model)はノイズからデータを復元する過程を学習しているもので、処理したいタスクに応じて適切にノイズを計算することによってStable Diffusionは多様なタスクを実行できると解説しました。
https://note.com/lively_viola452/n/nb8d60a828e83
赤い着物の絵をimage2imageで青い着物に変化させるときは下のような処理フローになります。
今回は、Stable Diffusionの原理となる潜在拡散モデル(英: latent diffusion model)について取り上げます。
潜在拡散モデルとは?
潜在拡散モデルは、大量の計算量を削減するために画像ではなく潜在変数に対して拡散過程と復元過程を行う新しい種類の拡散モデルです。
その背後にある理由と概念を理解するために、まずはなぜ計算量を削減する必要があるのか、そして潜在変数について詳しく見ていきましょう。
なぜ拡散モデルは計算量が多いのか?
拡散モデルとは、ノイズから画像を復元する過程(復元過程)を学習しているモデルで、画像をノイズにする過程(拡散過程)はプログラムで計算できます。
実はこの過程の計算量が膨大なのです。
要因は2つあります。
画像は要素数が膨大なデータであり、これを処理するには多くの計算が必要です。例えば、512×512のカラー画像では、1ピクセルごとにRGBの3つの要素を持っているため、全要素数は512x512×3=786,432になります。このような大量の要素に対する処理は、AIの学習に大きな計算量を必要とします。
一つの画像についての拡散過程と復元過程で同じ処理を何回も繰り返しているため。こちらについては次の段落で詳しく説明します。
拡散モデルにおける拡散過程と復元過程はどちらも1ステップの処理ではなく同じ処理を何ステップも繰り返す処理になっています。標準的には一つの画像について拡散過程と復元過程はそれぞれ1000回繰り返す必要があります。
拡散過程では、今のステップの画像に対してノイズを加えることでより純粋なノイズに近づける処理を繰り返し、復元過程では、逆に今のステップの画像に対してノイズを除去する信号を加えることで画像に復元する処理をしています。
これら2つの要因が、拡散モデルの計算量を膨大にする主な原因です。この計算量を削減するために、潜在変数という概念が重要な役割を果たします。
次に、この潜在変数とは何か、そしてそれがどのように拡散モデルの計算量を削減するのかについて詳しく見ていきましょう。
VAE(変分オートエンコーダ)と潜在変数
VAEとは画像と潜在変数(英: latent variable)を相互に変換するモデルです。
画像から潜在変数へ変換するのがエンコーダで、潜在変数から画像に変換するのがデコーダです。
潜在変数についてChatGPTを参考に博士と小学生のやり取り風で説明してみます。
上のやりとりにあるように、潜在変数はVAEにとっての画像の理解を表す特別な数値列です。VAEは潜在変数を介して画像を理解しますが、人間が潜在変数を見ても解釈できません。例えば、512×512のカラー画像に対応する潜在変数は64×64×4の数値列となります。
重要な点は、潜在変数は画像に比べると要素数が非常に少ないことです。512x512のカラー画像の要素数は512x512×RGB=786,432ですが、潜在変数の要素数は64x64x4=16,384なので、これは元の画像に対して48倍に圧縮されています。
その結果、画像全体ではなく、圧縮された潜在変数に対して拡散過程と復元過程を行うことで、大幅に計算量が削減されます。
まとめ
潜在拡散モデルとは、要素数が少ない潜在変数上で拡散過程と復元過程の計算を行うことで、従来の拡散モデルに比べて劇的に計算量が軽減されるという特徴を持つ拡散モデルです。
潜在拡散モデルの登場によって拡散モデルの研究がより早く進むようになり結果としてStable Diffusionも生まれました。
次の記事に向けて
今回は、潜在拡散モデルについて画像を生成する部分について解説しました。
しかし、テキストがどのような仕組みで生成される画像に反映されるかについてはまったく説明できていません。
次回はより一般的にtext to imageモデルにおいてテキストがどのような仕組みで生成される画像に反映されるかについて解説しようと思います。
次の記事は公開できても来週末になるので、是非コメントで感想・疑問点やもっと解説して欲しい内容についてフィードバックをもらえると嬉しいです!