10. 深層生成モデル#

深層学習が現れるまで、画像を1から生み出すような人工知能を作ることは難しく、生成に近いタスクとしては、前述の制限Boltzmannマシンのように画像を記憶するようなモデルが主流であった。

しかし、よく考えてみると、生成、というのは多くの画像を記憶して、それらを組み合わせて新しい画像を作る操作であり、記憶と生成には一定の関連性がある。

10.1. 変分オートエンコーダ (VAE)#

変分オートエンコーダ (Variational Autoencoder, VAE)は、自己符号化器 (autoencoder)の拡張で画像を生成するためのニューラルネットである [38]

VAEを理解するうえで大事な考え方に Evidence Lower Bound (ELBO)がある。VAEの説明に入る前に、まずはELBOの考え方について説明しよう。

当然ながら、画像生成のためのニューラルネットは画像データセット \(\mathcal{X} = \{ \mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_N \}\)を用いて訓練される。ここで、各画像がサンプルされる確率を \(p_\text{data}(\mathbf{x})\) とすると、画像生成は対数尤度の期待値

\[ \mathbb{E}_{\mathbf{x} \sim p_\text{data}} \left[ \log p_\theta(\mathbf{x}) \right] = \int p_\text{data}(\mathbf{x}) \log p_\theta(\mathbf{x}) d\mathbf{x} \]

をニューラルネットのパラメータ \(\theta\) について最大化する問題であると考えられる。ここで、生成される画像を説明する変数として潜在変数 \(\mathbf{z}\) を導入すると、Bayesの定理より、次の式が得られる。

(10.1)#\[ p_\theta(\mathbf{x}) = \int p(\mathbf{x}, \mathbf{z}) \mathrm{d} \mathbf{z} = \int p_\theta(\mathbf{x} | \mathbf{z}) p(\mathbf{z}) \mathrm{d} \mathbf{z} \]

通常、潜在変数 \(\mathbf{z}\) は、多変量正規分布のような解析的にサンプル可能な分布に従うと仮定するので、 \(p(\mathbf{z})\)はパラメータ \(\theta\) に依存せず、簡単に計算できる。

しかし、(10.1) を解析的に計算することはできず、また、数値的に計算することも、次元の呪いの影響があり、通常は不可能である。

そこで、変分Bayes (variational Bayes)と呼ばれる手法を用いて、この積分の下界を近似的に求めることを考える。

変分Bayesでは、近似分布 \(q_\phi (\mathbf{z} | \mathbf{x})\) を導入し、次のような式を考える。

(10.2)#\[\begin{split} \begin{align*} \log p_\theta(\mathbf{x}) &= \log \int p_\theta(\mathbf{x} | \mathbf{z}) p(\mathbf{z}) \mathrm{d} \mathbf{z} \\ &= \log \int \frac{q_\phi(\mathbf{z} | \mathbf{x})}{q_\phi(\mathbf{z} | \mathbf{x})} p_\theta(\mathbf{x} | \mathbf{z}) p(\mathbf{z}) \mathrm{d} \mathbf{z} \\ &= \log \int \frac{p_\theta(\mathbf{x} | \mathbf{z}) p(\mathbf{z})}{q_\phi(\mathbf{z} | \mathbf{x})} q_\phi(\mathbf{z} | \mathbf{x}) \mathrm{d} \mathbf{z} \\ &= \log \mathbb{E}_{\mathbf{z} \sim q_\phi(\mathbf{z} | \mathbf{x})} \left[ \frac{p_\theta(\mathbf{x} | \mathbf{z}) p(\mathbf{z})}{q_\phi(\mathbf{z} | \mathbf{x})} \right] \\ \end{align*} \end{split}\]

この式には何らかの関数の平均の対数を取る、という操作が含まれている。ここでJensenの不等式と呼ばれる次の不等式を用いる。

Jensenの不等式

とある確率変数 \(X\) と下に凸の関数 \(f\) について、次の不等式をJensenの不等式と呼ぶ。

\[ f(\mathbb{E}[X]) \leq \mathbb{E}[f(X)] \]

逆に \(f\) が上に凸の関数であるときは次式が成り立つ。

\[ f(\mathbb{E}[X]) \geq \mathbb{E}[f(X)] \]

対数関数は上に凸の関数であるため、Jensenの不等式を用いると、(10.2)は次のように書き直せる。

(10.3)#\[\begin{split} \begin{align*} \log p_\theta(\mathbf{x}) &\geq \mathbb{E}_{\mathbf{z} \sim q_\phi(\mathbf{z} | \mathbf{x})} \left[ \log \frac{p_\theta(\mathbf{x} | \mathbf{z}) p(\mathbf{z})}{q_\phi(\mathbf{z} | \mathbf{x})} \right] \\ &= \mathbb{E}_{\mathbf{z} \sim q_\phi(\mathbf{z} | \mathbf{x})} \left[ \log p_\theta(\mathbf{x} | \mathbf{z}) \right] - D_\text{KL}(q_\phi(\mathbf{z} | \mathbf{x}) || p(\mathbf{z})) \\ \end{align*} \end{split}\]

ただし、式中の \(D_\text{KL}(q_\phi(\mathbf{z} | \mathbf{x}) || p(\mathbf{z}))\) は、Kullback-Leiblerダイバージェンスと呼ばれる、2つの確率分布の差を表す指標で、

\[ D_\text{KL}(q_\phi(\mathbf{z} | \mathbf{x}) || p(\mathbf{z})) = \int q_\phi(\mathbf{z} | \mathbf{x}) \log \frac{q_\phi(\mathbf{z} | \mathbf{x})}{p(\mathbf{z})} d\mathbf{z} \]

のように定義される。

(10.3) の右辺が、ELBOであり、ELBOが周辺対数尤度の下界を与えていることが分かる。従ってELBOを最大化することで、周辺対数尤度についてもより大きな値を得ることができる。

10.1.1. VAEの概要#

VAEが考えるのはELBOの最大化そのものである。すなわち、VAEを訓練するための損失関数は次のように定義される。

(10.4)#\[ \mathcal{L}(\mathbf{x}; \theta, \phi) = - \mathbb{E}_{\mathbf{x} \sim p_\text{data}} \left[ \log p_\theta(\mathbf{x}) \right] + D_\text{KL}(q_\phi(\mathbf{z} | \mathbf{x}) || p(\mathbf{z})) \]

VAEは自己符号化器 (autoencoder)の一種であるので、ニューラルネットはエンコーダとデコーダによって構成される。損失関数に含まれる2つの確率密度分布 \(p_\theta(\mathbf{x})\)\(q_\phi(\mathbf{z} | \mathbf{x})\) はそれぞれ、エンコーダとデコーダの処理に対応している。

ここで、エンコーダは入力の画像 \(\mathbf{x}\) を受け取り、潜在変数 \(\mathbf{z}\) を出力するようなニューラルネットであって、 \(q_\phi(\mathbf{z} | \mathbf{x})\) からのサンプリングを担う。一方、デコーダは潜在変数 \(\mathbf{z}\) を受け取り、画像 \(\mathbf{x}\) を出力するようなニューラルネットであって、 \(p_\theta(\mathbf{x} | \mathbf{z})\) からのサンプリングを担う。

さて、\(\mathbf{z}\) が多変量正規分布 (もしくは他の解析的にサンプリング可能な分布)に従うと仮定したことを思い出してほしい。この条件を満たすために、エンコーダは直接 \(\mathbf{z}\) を出力する代わりに、多変量正規分布の平均 \(\boldsymbol{\mu}\) と分散 \(\boldsymbol{\sigma}^2\) を出力するように設計される。

../_images/vae_architecture.png

図 10.1 変分オートエンコーダ (VAE)の構造#

結局、(10.4) の第一項は、エンコーダに渡された画像 \(\mathbf{x}\) とデコーダからの出力 \(\mathbf{x}'\) の間の誤差を用いて近似され、第二項はエンコーダが出力する平均 \(\boldsymbol{\mu}\) と分散 \(\boldsymbol{\sigma}\) を持つ正規分布と \(p(\mathbf{z})\)として仮定した標準正規分布との間のKLダイバージェンスによって定義される。

10.2. 敵対的生成ネットワーク (GAN)#

GANは、画像を生成する生成器 (generator)と、画像がデータセットに含まれる真の画像なのか、生成器によって作られた仮の画像なのかを見破る判別器 (discriminator)の2つニューラルネットにより構成される画像生成ためのニューラルネットである [39]

../_images/gan_architecture.png

図 10.2 敵対的生成ネットワーク (GAN)の構造#

Ian Goodfellowにより提案されたオリジナルのGANは、必ずしも深層学習を用いる手法ではなかったため、GANのうち、深層学習を用いるものを区別してDCGAN (Deep Convolutional GAN)と呼ぶこともある [40]

GANが、より高品質な画像を生成できるようになる学習の過程は、偽札を作る犯罪者と、それを見破る警察との関係に例えられる。

すなわち、生成器は「判別器が本物と勘違いするような画像の生成」を目指し、判別器は「本物の画像と生成器が作った画像を見分けること」を目指して学習を行う。

この学習は、数学的には次のミニマックス関数の最適化問題として定式化される。

(10.5)#\[ \min_G \max_D \mathbb{E}_{\mathbf{x} \sim p_\text{data}} \left[ \log D(\mathbf{x}) \right] + \mathbb{E}_{\mathbf{z} \sim p_\mathbf{z}} \left[ \log (1 - D(G(\mathbf{z}))) \right] \]

この式が一体何を意味するのかもう少し詳しく見ていこう。

10.2.1. GANが目指すもの#

GANが最終的に達成したいのは、生成器により画像を生成する操作を、とある確率密度分布 \(p_G\) からのサンプリングに見立てた時に、この分布がデータの分布と一致する、すなわち \(p_G = p_\text{data}\) となることである。

GANの論文では、(10.5) の最適化が、2つの確率密度分布の差として、Jensen-Shannonダイバージェンスを最小化する問題と同義であることが述べられている。

Jensen-Shannon ダイバージェンス

Jensen-Shannonダイバージェンスは、2つの確率分布 \(p\)\(q\) の間の距離を測る指標で、次のように定義される。

\[ D_\text{JS}(p, q) = \frac{1}{2} D_\text{KL}(p || m) + \frac{1}{2} D_\text{KL}(q || m) \]

ただし、 \(m\) は確率密度 \(p\)\(q\) の混合分布で \(m = (p + q) / 2\) である。

GANが目指す「Jensen-Shannonダイバージェンスの最小化」について順に見ていこう。

まず初めに、「理想的な判別器」について考える。理想的な判別器は、任意の生成器 \(G\) に対して次の量 \(V(G, D)\) を最大化することを目指す。

\[\begin{split} \begin{align*} V(G, D) &= \int p_\text{data}(\mathbf{x}) \log D(\mathbf{x}) \mathrm{d}\mathbf{x} + \int p_\mathbf{z}(\mathbf{z}) \log (1 - D(G(\mathbf{z}))) \mathrm{d}\mathbf{z} \\ &= \int p_\text{data}(\mathbf{x}) \log D(\mathbf{x}) + p_G(\mathbf{x}) \log(1 - D(\mathbf{x})) \mathrm{d}\mathbf{x} \end{align*} \end{split}\]

この式は、交差エントロピーのような式になっていて、\(V(G, D)\)を最大化すると、第一項は \(p_\text{data}\) が高い確率を取る箇所では \(D\)が1に近い値を、\(p_\mathbf{z}\)が高い確率を取る箇所では \(D\) が0に近い値を取るようなる。

通常、\(a, b \in \mathbb{R}\)\(a \neq 0\), \(b \neq 0\)を満たすとすると、 \(a \log y + b \log (1 - y)\)\(y \in [0, 1]\) の範囲で \(y = \frac{a}{a + b}\)で最大値を取る。

従って、最適な判別器 \(D_G^{*}\) は任意の画像 \(\mathbf{x}\) について

\[ D_G^{*} = \frac{p_\text{data}(\mathbf{x})}{p_\text{data}(\mathbf{x}) + p_G(\mathbf{x})} \]

を満たす。

任意の \(G\)について、最適な\(D_G^{*}\) を与えることができたので、(10.5)\(G\) に関する指標として \(C(G)\) と書くことにすると、\(C(G)\) は、次のような式で与えられる。

\[\begin{split} \begin{align*} C(G) &= \mathbb{E}_{\mathbf{x} \sim p_\text{data}} \left[ \log D_G^{*}(\mathbf{x}) \right] + \mathbb{E}_{\mathbf{z} \sim p_\text{noise}} \left[ \log (1 - D_{G}^{*}(G(\mathbf{z}))) \right] \\ &= \mathbb{E}_{\mathbf{x} \sim p_\text{data}} \left[ \log D_G^{*}(\mathbf{x}) \right] + \mathbb{E}_{\mathbf{x} \sim p_G} \left[ \log (1 - D_{G}^{*}(\mathbf{x})) \right] \\ &= \mathbb{E}_{\mathbf{x} \sim p_\text{data}} \left[ \log \frac{p_\text{data}(\mathbf{x})}{p_\text{data}(\mathbf{x}) + p_G(\mathbf{x})} \right] + \mathbb{E}_{\mathbf{x} \sim p_G} \left[ \log \frac{p_G(\mathbf{x})}{p_\text{data}(\mathbf{x}) + p_G(\mathbf{x})} \right] \end{align*} \end{split}\]

ここで、

\[\begin{split} \begin{align*} \mathbb{E}_{\mathbf{x} \sim p_\text{data}} \left[ \log \frac{p_\text{data}(\mathbf{x})}{p_\text{data}(\mathbf{x}) + p_G(\mathbf{x})} \right] &= \mathbb{E}_{\mathbf{x} \sim p_\text{data}} \left[ \log \frac{1}{2} + \log \frac{p_\text{data}(\mathbf{x})}{\frac{p_\text{data}(\mathbf{x}) p_G(\mathbf{x})}{2}} \right] \\ &= - \log 2 + D_\text{KL} \bigg( p_\text{data} \bigg\| \frac{p_\text{data} + p_G}{2} \bigg) \end{align*} \end{split}\]

であって、同様に \(\mathbb{E}_{\mathbf{x} \sim p_G}\) も書き直せるので、結局、\(C(G)\) は次のように書ける。

\[\begin{split} \begin{align*} C(G) &= -\log 4 + D_\text{KL} \bigg( p_\text{data} \bigg\| \frac{p_\text{data} + p_G}{2} \bigg) + D_\text{KL} \bigg( p_G \bigg\| \frac{p_\text{data} + p_G}{2} \bigg) \\ &= -\log 4 + 2 D_{JS} (p_\text{data} || p_G) \end{align*} \end{split}\]

Jensen-Shannonダイバージェンスは \(p_\text{data} = p_G\) のときに最小の0を取る。

以上から、(10.5) を最適化する操作は、\(p_\text{data}\)\(p_G\) の間のJensen-Shannonダイバージェンスを最小化する操作と同等であることが確認できた。

10.2.2. モード崩壊#

GANの画像生成の過程は偽札を作る犯罪者と、それを見破る警察の関係に例えられると、本節の冒頭で述べた。

しかし、あなた自身が偽札を作る犯罪者だとして、日本で言うところの1000円札、5000円札、10000円札の全ての偽札を作りたいと思うだろうか?当然、本当に作りたいのは10000円札だけだろう。

このことと同様の問題がGANにも発生する。GANの生成器は、判別器に見破られない画像を作るために、自分の得意な画像だけを生成すれば十分なのである。そのため、GANの生成画像は、元の画像データセット全体を模倣するのではなく、その一部だけを模倣するようになってしまう。

このように似たような画像ばかりが生成されてしまう問題を モード崩壊 (mode collapse)と呼ぶ。

モード崩壊はGANの中心的な課題として、いくつもの研究で解決が試みられてきた。例えば、Wasserstein GAN (WGAN) [41] [42] や、Spectral Normalization[43]などの手法により、モード崩壊が緩和できるとされている。

10.3. 拡散モデル#

拡散モデル (diffusion model)は、2020年台に登場した新しいタイプの生成モデル[44]で、非常に高精細な画像を生成できることで注目を集めている。

拡散モデルのポイントは、ある画像に徐々にノイズを加えていくと、最終的には完全なノイズ画像と見分けがつかないような画像になる、という点にある。

../_images/adding_noise.png

図 10.3 MNISTの数字画像にノイズを付加する様子#

そこで反対に、完全なノイズ画像から徐々にノイズを取り払っていけば、鮮明な画像が得られそうだ。このアイディアに基づき、拡散モデルでは、ノイズを少しだけ取り払う操作をニューラルネットで行い、完全なノイズ画像を徐々に生成画像に近づけていく。

しかし、弱いノイズを付加して、完全なノイズ画像と見分けがつかないような画像を得るには、非常に多くのステップが必要になる。

従って、その反対の操作、すなわち完全なノイズ画像から徐々にノイズを取り払う操作にも非常に多くのステップが必要になる。

そのため、安直に考えると、完全な画像から数百回のステップでノイズを徐々に取り払って得られた画像が、訓練データに含まれる画像にするように学習することは非常に困難に思える。

しかし、拡散モデルは、その過程を理論的にうまく定式化しており、ニューラルネットの訓練時には、 数百のステップのうちの1ステップ分に相当するノイズ除去の処理だけを学習すれば良い

10.4. マルチモーダル生成#

近年では、OpenAIのDALL-E (URL) やGoogleのImagen (URL), Stability AIのStable Diffusion (URL)など、テキストから画像を生成する マルチモーダル生成モデルが注目を集めている。

ここでは、論文として公開されている情報から、これらのテキストに基づく画像生成モデルを簡単に紹介しよう。

10.4.1. DALL-E#

OpenAIが、2021年の2月に公開したテキストから画像を生成するモデルが DALL-E で、そのおおよその内容は [45]にまとめられている。

オリジナルのDALL-Eの目的はTransformerを用いたテキストのエンコードと、それに基づいた画像の生成であると論文に述べられており、DALL-Eはエンコーダ部とデコーダ部にそれぞれTransformerを用いたVAEのような構造を持つ。著者らはこの構造のことをdVAE (discrete VAE) と呼んでいる。

このdVAEは、VAEの仲間の中で比較的高品質な画像を生成できるVector-Quantized VAE (VQ-VAE) [46]と類似しており、画像から得られた特徴ベクトルをベクトル量子化によって得られたコードブックにより離散的なトークンの情報へと変換する。

得られた画像のトークンはテキストから抽出されたトークンと結合後に、Transformerベースのデコーダへと渡されて、最終的な出力画像が得られる

DALL-Eの後継モデルである DALL-E 2 は、DALL-Eの公開からおよそ1年後の2022年4月に公開されてたモデルで、いくつかの改善が取り入れられている[47]

その中でも注目すべきなのは、組になった画像情報とテキスト情報に類似した潜在ベクトルを与えるCLIP (Contrastive Language-Image Pretraining)を利用している点だろう。

DALL-E 2では、入力のテキスト情報からCLIPを用いて「言語的な潜在ベクトル」を得た後、それを「画像的な潜在ベクトル」へと変換する処理を行う。

その後、得られた画像的な潜在ベクトルは、GLIDE [48] (Generative Language-Image Diffusion for Editing)と呼ばれる拡散モデルに入力され、最終的な画像が得られる。

10.4.2. Imagen#

Imagenは、DALL-E 2の公開からおよそ1ヶ月後の2022年5月にGoogleが公開したマルチモーダルモデルである [49]

Imagenは、DALL-E 2のように、すでに画像とテキストが関係づけられているCLIPのようなモデルを利用せず、T5-XXLという大規模な言語モデル (ただし、今では中規模程度かもしれない)を使ってテキストから特徴を抽出する。

あとは、拡散モデルが、ノイズ画像から画像を復元する過程で、テキストから得られた特徴ベクトルを条件として与えることで、テキストに沿った画像を生成する。

Imagenは、テキストに沿った画像を生成するために、 Classifier-Free Guidance (CFG)と呼ばれる手法を用いており、これにより、画像生成時には、どの程度テキストに沿った画像を生成するかを調整できる。

また、Imagenは最初に解像度の小さな画像を生成したあとに、その解像度を拡散モデルを用いて徐々に大きくするという方式を取っており、必要に応じて高解像度画像の生成が可能になっている。

10.4.3. Stable Diffusion#

これら3つのモデルの中で最も知名度が高いであろう Stable Diffusion は、2022年8月にStability AIが公開したマルチモーダル生成モデルである。

Stable DiffusionはDALL-E 2とImagenの両方の特徴を持ったモデルで、テキストからの特徴抽出と、画像生成のそれぞれにおいて、従来モデルの優れた点を取り入れている。

まず、テキストからの特徴抽出には、DALL-E 2と同様に事前学習済みのCLIPを利用する。このCLIP特徴は、Imagenと同様にCFGの枠組みで画像生成を担当する拡散モデルに渡される。

しかし、Stable Diffusionが、従来のモデルと最も異なっている点は、潜在空間拡散 (latent space diffusion) [50]と呼ばれる技術により、拡散モデルの計算量の問題を解決している点である。

潜在空間拡散モデルは、学習済みのVAEを用いて得られる潜在ベクトルを拡散モデルを用いて再現する。この潜在ベクトルのための拡散モデルにおいて、テキスト特徴を用いたCFGによる条件付けが行われる。

また、Stable Diffusionは、他の2つのモデルと異なり、モデル自体がHugging Faceのようなプラットフォームで公開されており、誰でも利用できるようになっている。

それ故、Stable Diffusionは、それ以後の研究において、いわゆる基盤モデルとして、様々な応用に広く利用されている。

まとめ: 生成のための深層学習

  • 画像生成は深層学習の出現により大きく進歩した分野でVAEやGAN、拡散モデルなど、複数の技術が提案されている

  • VAEは変分Bayesの枠組みを用いて、変分限界 (ELBO)を最大化するようにニューラルネットを訓練する

  • GANは、生成器と判別器の2つのニューラルネットを競わせる形で、より高品質の画像を生成・判別するように訓練する

  • 拡散モデルは、ノイズを徐々に取り除く処理をニューラルネットに学習させることで、最終的に高品質の画像を生成する