拡散モデル入門

## はじめに
「生成AI」「生成モデル」は学習データをもとに新たなデータを生成する技術で、世界的に注目を集めています。生成できるデータは、画像・点群・音声・動画・化合物など様々です。特に、生成モデルのうち「拡散モデル」 [^1]の登場以降は、高品質なデータの生成が容易になりました。本記事では、特に画像に焦点を当てて、拡散モデルをなるべく分かりやすいように解説します。

拡散モデルの登場以降は、非常に高精細な画像の生成ができるようになりました。図1に拡散モデルによって生成した画像の例を示します。全て実際には存在しない画像ですが、驚くほどきれいだと感じられるかと思います。

また、拡散モデルの一種である「Stable Diffusion」 [^2]の登場によって、テキストで生成内容を制御できるようになりました。これによって、所望の画像の生成が容易になり、さらに応用が進んだと言われています。例えば、業務支援（Microsoft社）、コンテンツの生成支援（Adobe社）、広告の生成支援（サイバーエージェント社）など、様々な分野でサービスが出始めています。

本記事では、まず拡散モデルの仕組みを説明し、GANやVAEのような他のモデルとの違いを説明します。また、拡散モデルの代表例であるStable Diffusionを紹介し、最後に動画を生成できる拡散モデルについて紹介します。

![はじめに.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177469/0f26de0b-7f35-afeb-cdf3-54aed5ab34be.jpeg)
<INS>図1：拡散モデルによって生成した画像の例（文献[^2]から引用）</INS>

## 拡散モデルの仕組み
本章では、拡散モデルの仕組みを説明します。図2に拡散モデルのアイデアを示します。拡散モデルでは、データに徐々にノイズを付加する拡散過程と、徐々にノイズを除去する逆拡散過程を考えます。拡散過程では、画像に徐々にノイズを加えていき、最終的に純粋なノイズを得ます。これは単純にノイズを加えていくだけなので簡単です。一方、逆拡散過程では、純粋なノイズから徐々にノイズを除去していき、最終的に鮮明な画像を得ます。こちらは拡散過程と異なり難しいため、逆拡散過程を深層学習モデルで表現します。深層学習モデルとしては、U-Net [^3]というモデルがよく使われます。モデルの学習時は拡散過程と逆拡散過程の両方を利用しますが、実際に画像を生成する際は逆拡散過程のみを利用します。

![拡散モデルの仕組み.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177469/6351e1a1-6a75-01f5-9594-cb45c1a23788.jpeg)
<INS>図2：拡散モデルのアイデア（文献[^1]をもとに作成）</INS>

## 拡散モデルと他モデルとの違い
生成モデルには、拡散モデルの他にもGAN（Generative Adversarial Networks） [^4]やVAE（Variational Autoencoder） [^5]などがあります。本章では、拡散モデルとGAN・VAEとの違いを説明します。
図3に、拡散モデルとGAN・VAEのアーキテクチャの違いを示します。GANは、生成器と識別器の2つのネットワークが競い合うことでデータを生成します。VAEは、エンコーダで潜在空間にマッピングし、デコーダで元のデータを再構築します。GANは高品質な画像を生成できる一方で、多様性に欠けたり、学習が不安定だと言われています。VAEは多様性があり、学習も安定している一方で、品質は高くないと言われています。拡散モデルは、多様性や学習の安定性が高く、非常に高品質です。しかし、長所だけではなく、計算量が大きいといった問題があります。

![違い.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177469/cee4b289-7214-4a31-45ce-bda84f0a6dac.jpeg)
<INS>図3：拡散モデルとGAN・VAEのアーキテクチャの違い</INS>

## 拡散モデルの代表例
拡散モデルの代表例として、Stable Diffusion（Stability AI社） [^2]、DALL E2（OpenAI社） [^6]、Imagen（Google社) [^7]などがあります。本章では、最も代表的な例であるStable Diffusionを紹介します。Stable Diffusionの特徴は、低次元の潜在空間上で拡散モデルを構築し、学習及び生成の計算量を削減できる点です。

図4に、Stable Diffusionの仕組みを示します。Stable Diffusionは、大きく分けると3つの要素で構成されています。

1. 画像エンコーダ・デコーダ：画像を低次元の潜在表現に変換します。具体的にはVAEを使います。VAE自体は画像生成に使うこともできますが、ここでは潜在表現抽出に使います。
1. 拡散モデル：潜在空間上で拡散モデルを動作させます。
1. テキストエンコーダ：テキストを拡散モデルで使えるような潜在表現に変換します。具体的にはCLIP [^8]というモデルを使います。

![stable_diffusion.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177469/163d6432-9b60-645b-d2d7-24e862887f58.jpeg)
<INS>図4：Stable Diffusionの仕組み</INS>

## 動画を生成できる拡散モデル
前章までは静止画を対象とした拡散モデルについて説明してきましたが、本章では最近開発が進んでいる動画を対象とした拡散モデルを紹介します。

代表的な例として、Video Diffusion Models (VDM) [^9]は、空間方向だけでなく時間方向でもアテンションを算出することによって、時間的な一貫性を保持した動画を生成することを可能にしました。図5に、VDMによる空間方向と時間方向のアテンション算出を示します。

![VDM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177469/10829379-bb63-f31a-e563-0ca3a49cfac4.jpeg)
<INS>図5：VDMによる空間方向と時間方向のアテンション算出</INS>

しかし、モデルの学習のためには、テキストが付与されている大量の動画が必要になるといった問題ありました。そこで、Make-A-Video（Meta社） [^10]は、テキストが付与されていない大量の動画を用いて、学習済みの静止画拡散モデルをファインチューニングすることを可能にしました。図6に、Make-A-Videoによって生成した動画の例を示します。入力したテキストの意味を表現し、かつスムーズな動きを生成できていることが分かると思います。このような静止画向けの拡散モデルを動画向けに拡張するアプローチは、その後も主流となっています。

![make-a-video.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177469/fbc7cbf6-6361-495d-de85-c540511a0882.jpeg)
<INS>図6：Make-A-Videoによって生成した動画の例（文献[^8]から引用）</INS>

## まとめ
本記事では、拡散モデルの概要を解説しました。今回は入門編ということで、深い理論や多くの改良版、また実装や応用・サービスなど、まだまだ紹介できていないことがたくさんあります。本記事が、拡散モデルに興味を持っていただくきっかけになれば幸いです。なお本記事の執筆には、[^1]~[^10]以外にも[^11][^12][^13][^14][^15][^16][^17][^18]を参考にしました。

## 参考文献
[^1]: Denoising Diffusion Probabilistic Models
https://arxiv.org/abs/2006.11239
[^2]: Stable Diffusion
https://ja.stability.ai/stable-diffusion
[^3]: U-Net: Convolutional Networks for Biomedical Image Segmentation
https://arxiv.org/abs/1505.04597
[^4]: Generative Adversarial Networks
https://arxiv.org/abs/1406.2661
[^5]: Auto-Encoding Variational Bayes
https://arxiv.org/abs/1312.6114
[^6]: DALL E2
https://openai.com/dall-e-2/
[^7]: Imagen
https://imagen.research.google/
[^8]: Contrastive Language-Image Pre-Training
https://github.com/openai/CLIP
[^9]: Video Diffusion Models
https://video-diffusion.github.io/
[^10]: Make-A-Video
https://makeavideo.studio/
[^11]: 拡散モデルに入門してみる
https://qiita.com/momo10/items/e19aaf66cc7088ef3da3
[^12]: 拡散モデルの基礎と研究事例: Imagen
https://qiita.com/iitachi_tdse/items/6cdd706efd0005c4a14a
[^13]: GANと拡散モデルの調査
https://zenn.dev/d2c_mtech_blog/articles/13551863282e59
[^14]: Diffusion model（拡散モデル）とは？仕組みやGAN・VAEとの違いを解説
https://aismiley.co.jp/ai_news/what-is-the-diffusion-model/
[^15]: SSII2023 [SS1] 拡散モデルの基礎とその応用 ~Diffusion Models入門~
https://speakerdeck.com/ssii/ssii2023-ss1?slide=7
[^16]: 拡散と流れに基づく学習と推論
https://hillbig.github.io/JNNS2023_okanohara.pdf
[^17]: 図で見てわかる！画像生成AI「Stable Diffusion」の仕組み
https://qiita.com/ps010/items/ea4e8ddeff4de62d1ab1
[^18]: 【Deep Learning研修（発展）】データ生成・変換のための機械学習　第７回前編「Diffusion models」
https://www.youtube.com/watch?v=10ki2IS55Q4