見出し画像

ちょい調べた! 拡散モデルとは?【原理編】

近年、生成AIの目覚ましい進化により、人間が作成したような自然なテキストや画像が生成できるようになりました。高精細な画像生成で知られるStable Diffusionはその好例です。

https://stability.ai/news/stable-diffusion-3より

このような生成AIは、新しいデータをつくり出す「生成モデル」という技術によって実現されています。画像生成モデルの中でも特に注目されているのが「拡散モデル」です。

本記事では、拡散モデルの原理を簡単に解説することを目指します。

前準備:潜在変数モデルのおさらい

拡散モデルを理解する前に、その基礎となる「潜在変数モデル」について確認しましょう。潜在変数モデルでは下記の考え方がベースになっています。

潜在変数と観測変数の関係
  • 観測データの背後に、直接観測できない「潜在変数」が存在する

  • 観測データ(観測変数)は、潜在変数から影響を受ける

  • 潜在変数を持つ生成モデルは、観測変数が潜在変数から生成される過程をモデル化する

代表的な潜在変数モデルとして、「変分オートエンコーダ(VAE)」が挙げられます。VAEは、潜在変数から観測変数への変換にニューラルネットワークのデコーダを、観測変数から潜在変数への変換には別のエンコーダを使用します。

VAEの概要

VAEの学習は、観測変数をエンコーダで潜在変数に変換し、デコーダで元の観測変数にできるだけ近い値に復元できるように、ニューラルネットワークのパラメータを調整します。

VAEの表現力を高めるために、潜在変数を階層化することも可能です。複数の潜在変数を導入し、各潜在変数は隣の潜在変数からのみ影響を受けるように設定することが一般的です。

階層化されたVAE

しかし、階層化されたVAEは表現力が増す一方で、潜在変数が増えるごとにエンコーダとデコーダが必要となり、処理時間やパラメータ推定が困難になるという問題も抱えています。

この問題を解決するために、観測変数から潜在変数への変換を単純にノイズを加えるという方法が考えられます。この「ノイズを加えながらデータを壊していく過程」を「拡散過程」と呼び、これが拡散モデルの基本原理となります。

拡散モデルの概要

拡散モデル

拡散モデルは、階層化されたVAEの一種ですが、以下の特徴を持ちます。

  • 複数の潜在変数と観測変数は同じ次元数で表現される

  • 観測変数から潜在変数への変換は、ノイズの追加で実現される

拡散モデルでは、以下の2つの過程が重要です。

  1. 拡散過程: 観測変数にガウスノイズを繰り返し加えて潜在変数に変換していく過程。最終的には完全にノイズ化された状態になります。

  2. デノイズ: 最終時刻の潜在変数から時間方向に遡って観測変数に変換していく過程。

拡散過程

拡散過程

拡散過程では、前時刻のデータにノイズを加えます。ノイズの加え方は、最終時刻のデータが完全なノイズになるように設定する必要があります。完全なノイズとは、元のデータの成分が全く含まれない状態です。正規分布に従うノイズはその一例です。

ノイズの加え方として、各時刻1≤t≤Tにおいて以下の式に従うノイズを使用することがあります。

各時刻のノイズが従う分布

β_t​を0.001のような小さい値に設定し、Tを十分に大きく設定すれば、x_t​の分布を正規分布に近づけることができます。

実際には、変数変換トリックを用いて、以下の計算でxt​を得ることができます。

次時刻のデータのサンプリング

デノイズ過程

逆拡散モデル

デノイズ過程では、ニューラルネットワークを用いてノイズ除去を行います。拡散モデルでは、全ての潜在変数と観測変数が同じ次元数を持つため、各時刻のノイズ除去に共通のネットワークを使用できます。

ニューラルネットワークによるノイズ除去

ノイズ除去は以下のようにモデル化できます。

ノイズ除去

拡散モデルの学習

ここでは、数学的な導出は省略し、考え方と結論のみを説明します。
理論的にも詳しく学びたい方いは、オライリー・ジャパン出版の「ゼロから作るDeep Learning ❺ 生成モデル編」をお勧めします。

拡散モデルの学習は、対数尤度の最大化によって行われます。しかし、対数尤度の計算が困難なため、代わりにその下限であるELBO(Evidence Lower BOund)の最大化が用いられます。

拡散モデルのELBOは以下のように表されます。

拡散モデルのELBO(対数尤度の下限)

変数間のマルコフ性、拡散過程で述べた各時刻の潜在変数の特性、上記のノイズ除去のモデル化を用いて式を展開すると、ELBOは以下の関数で近似できます。

ELBOの近似

J(θ)の式からわかるように、この関数を最大化することは、拡散過程による各時刻のサンプリングとニューラルネットワークによってノイズ除去されたものとの二乗誤差を最小化することと等価です。

ただし、この方法では1回の計算にT回のサンプリングが必要となり、Tは大きな値がよく使われるため、計算量が大きくなってしまいます。

サンプリング回数を減らす学習方法として、ノイズ除去に用いるニューラルネットワークの予測を以下のように変更する方法があります。

  • 元データを復元するニューラルネットワーク

元データを復元するニューラルネットワーク
  • ノイズを予測するニューラルネットワーク

ノイズを予測するニューラルネットワーク

次回の記事では、学習の方法について解説し、画像生成モデルの実装に試みます。

参考文献

オライリー・ジャパン出版の「ゼロから作るDeep Learning ❺ 生成モデル編」

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