TL; DR (要約)
AI画像生成の新たな王者、拡散モデル。その発想は「完璧な砂絵を壊し、その逆再生を学習する」こと。
ノイズから「美」を創造する、最先端の生成AIの核心を3ステップで解説します。
① 基本のアイデア
(砂絵の逆再生)
拡散: 綺麗な画像をノイズで徐々に壊す。
復元: AIにその逆の「ノイズ除去」を学習させる。
この修復作業を繰り返すことで、画像を創造します。
② 課題
(DDPMの壁)
この方法は高画質ですが、画像のピクセル単位で計算するため、生成に膨大な時間と計算コストがかかるのが大きな課題でした。
③ 解決策
(Stable Diffusion)
高次元の画像空間ではなく、情報を圧縮した低次元の「潜在空間」で拡散・復元を行うことで、劇的に高速化。実用化を可能にしました。
この章の学習目標と前提知識
はじめに:ノイズから「美」を創造するAI
皆さん、こんにちは!AIの「創造性」を探る旅、いよいよ最終章となる第3部、拡散モデル編です。
前回の講義では、VAEとGANという、二大生成モデルを探求しましたね。VAEは、潜在空間という「きれいな設計図」を作るのが得意な優等生でしたが、生成する画像が少しぼやけてしまう傾向がありました。一方のGANは、シャープでリアルな画像を生成する「天才肌の芸術家」でしたが、その学習は非常に気まぐれで、安定させるのが大変でした。
「安定した学習」と「高品質な生成」、この二つを高いレベルで両立させる、夢のようなモデルは存在しないのでしょうか…?
実は、近年、まさにその夢を叶えるかのような新しい王者が登場し、AIの世界に再び大きな革命を起こしました。それが、皆さんも一度は耳にしたことがあるかもしれない、MidjourneyやDALL-E 2, Stable Diffusionといった最先端の画像生成AIの心臓部で活躍する、拡散モデル(Diffusion Models)なのです。
その発想は、これまでのVAEやGANとは全く異なり、非常にユニークです。例えるなら、「ノイズという大理石の塊から、美しい彫刻を掘り出す」ようなアプローチです。
- まず、AIに「完璧な彫刻(元の画像)」を見せ、それを少しずつ削って、最終的にはただの「大理石の塊(完全なノイズ)」に戻していく過程を、何度も何度も見せつけます。(この過程を拡散過程と言います)
- そして、AIが学習するのは、その逆のプロセスです。今度は、ただの「大理石の塊(ノイズ)」だけを渡され、「ほんの少しだけ削って、彫刻の輪郭をわずかに浮かび上がらせる」という、極めて繊細な一彫りを予測する術を学びます。(これが復元過程です)
この「ほんの一彫り」を何百、何千回と繰り返すことで、AIは最終的に、ただのノイズの塊から、驚くほど精巧で美しい彫刻、すなわち新しい画像を「創造」できるようになるのです。この「ノイズを除去する過程」そのものを学習する、という点が拡散モデルの核心です。
この記事の構成について
とはいえ、その仕組みは非常に奥深いため、この記事ではまず第24回全体のダイジェストとして、この拡散モデルの基本的なアイデアから、代表的なモデルであるDDPMやStable Diffusionの概要までを一気通貫でご紹介します。
そして、各パートのより詳細な理論や実装については、続く24.1〜24.4の各記事で徹底的に深掘りしていきますので、まずは安心して、この最も新しいAIの創造の世界を覗いてみましょう!
24.1 拡散モデルの直感的アイデア —「砂絵」を逆再生するように
さて、AIが「ノイズを除去する過程を学ぶ」ことで画像を創造する、という拡散モデルの核心に迫っていきましょう。この一見すると不思議なアイデアを、私たちの身近なイメージで理解するために、ここでは「砂絵」のアナロジーを使ってみたいと思います。これが、個人的には一番しっくりくる例えかな、と感じています。
ステップ1:完璧な作品を、徐々に壊していく (拡散過程)
まず、あなたがチベットの僧侶になったと想像してみてください。何日もかけて、色とりどりの砂を使い、緻密で美しい砂絵(これが元の綺麗な画像 \(x_0\) です)を完成させました。完璧な作品です。
しかし、仏教の教えの通り、万物は無常。完成した砂絵は、そよ風が吹くたびに、ほんの少しずつ、その形を失っていきます。一粒、また一粒と砂が舞い、色が混じり合い、輪郭がぼやけていく…。この、完璧な状態から、徐々に無秩序(ランダムノイズ)へと向かう過程を、私たちはコマ送りのビデオのように、じっと観察します。何百、何千というステップ(時刻\(T\))を経て、最終的に、美しい砂絵はただの色の混ざった砂の山(完全なノイズ)になってしまいました。
これが、拡散モデルにおける「拡散過程(Forward Process)」です。この過程は、AIが学習するのではなく、数学的に決まったルールで、ただノイズを加えていくだけのシンプルなステップです。
ステップ2:無秩序から、秩序を再構築する (復元過程)
さて、ここからがAIの出番です。AIに与えられるのは、最終的にできあがった、ただのランダムな砂の山(ノイズ)だけです。そして、AIに課せられた、たった一つの仕事はこうです。
「この砂の山を見て、ほんの一瞬だけ時間を巻き戻した(ほんの少しだけノイズが少ない)状態を予測しなさい」
AIは、最終的な完成図を知っているわけではありません。ただひたすらに、「現在のノイズだらけの状態から、ほんの少しだけノイズを取り除いたらどうなるか?」という、極めて局所的で、簡単な予測を繰り返すことだけを学習します。これが「復元過程(Reverse Process)」です。
拡散と復元のプロセス
この、「ほんの少しだけノイズを取り除く」という、一見すると非常に地味で簡単な作業を、何百、何千回と根気強く繰り返すことで、AIは最終的に、完全なノイズから、私たちが最初に作った美しい砂絵を寸分違わず(あるいは、それに似た全く新しい砂絵を)再構成(創造)できるようになるのです。この逆再生のプロセスこそが、拡散モデルの魔法の源泉なんですね。
24.2 拡散過程と復元過程の概要 〜画像を「壊す」プロセスと、それを「修復」するプロセス〜
さて、「砂絵を逆再生する」という拡散モデルの直感的なアイデアを、もう少しだけ専門的な言葉で見ていきましょう。拡散モデルは、その名の通り、拡散過程(Forward Process)と復元過程(Reverse Process)という、互いに逆向きの二つの主要なプロセスから構成されています。この二つのプロセスを理解することが、拡散モデルの仕組みを掴むための鍵となります。
拡散過程 (Forward Process) – 秩序から混沌へ、画像を「壊す」
まず、拡散過程です。これは、先ほどの砂絵の例で言えば「風が吹いて、絵がだんだん砂の山になっていく」部分にあたります。
具体的には、元の綺麗な画像 \(x_0\) に対して、ほんの少しだけガウスノイズ(正規分布に従うランダムなノイズ)を足し合わせる、という操作を、何百、何千回(例えば \(T=1000\) ステップ)と繰り返します。
拡散過程のイメージ
数式で書くと、時刻 (t) のノイズ画像 (x_t) は、1ステップ前の画像 (x_{t-1}) から次のように生成されます。
\[ x_t = \sqrt{1 – \beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1} \quad \text{ただし} \quad \epsilon_{t-1} \sim \mathcal{N}(0, I) \]
ここで、\(\beta_t\) (ベータ) は、各ステップでどれくらいノイズを加えるかを決める、非常に小さな定数です。そして \(\epsilon_{t-1}\) が、新しく加えるノイズそのものです。この式は、「前の画像をほんの少しだけ縮小し(\(\sqrt{1 – \beta_t}\))、そこにほんの少しだけ新しいノイズ(\(\sqrt{\beta_t} \epsilon_{t-1}\))を足し合わせる」ということを意味しています。
この拡散過程で重要なのは、これはAIが学習する部分ではない、ということです。単に、決まったルールに従って、画像を徐々にノイズへと変えていく、機械的なプロセスに過ぎません。
復元過程 (Reverse Process) – 混沌から秩序へ、AIが「修復」を学ぶ
そしてこちらが、いよいよAI(ニューラルネットワーク)が登場する、モデルの核心部分、復元過程です。これは、砂絵の例で言えば「ビデオを逆再生する」部分ですね。
AIの仕事は、ノイズまみれの画像 \(x_t\) と、現在の時刻 \(t\) という二つの情報を受け取り、「1ステップ前の、ほんの少しだけノイズが少なかった画像 \(x_{t-1}\) はどんな様子だったか?」を予測することです。
しかし、画像を直接予測するのは非常に難しいタスクです。そこで、多くの拡散モデル(特にDDPM)は、もっと賢いアプローチを取ります。それは、\(x_{t-1}\) を直接予測する代わりに、
「この \(x_t\) を作るために、\(x_{t-1}\) に加えられたノイズ \(\epsilon_{t-1}\) はどんなノイズだったか?」を予測する
という問題に置き換えるのです。
なぜなら、「ノイズ」は「元の画像」よりもずっとシンプルな構造をしているため、AIにとっても予測がしやすいからです。そして、AIが予測したノイズ \(\hat{\epsilon}_{t-1}\) を、現在のノイズ画像 \(x_t\) からうまく引き算してあげれば、結果的に1ステップ前の画像 \(x_{t-1}\) を高い精度で推定することができますよね。
この、「ノイズを予測して、引き算する」という、一見地味な修復作業を、時刻 \(T\) から \(1\) まで、何度も何度も繰り返します。すると、どうでしょう。完全なノイズだったものが、徐々に画像の輪郭を現し、最後にはクリアな画像として「創造」されるのです。これが拡散モデルの魔法の正体です。
24.3 DDPMの基礎とPyTorchによるノイズ除去学習の実装
さて、画像を壊しては修復する、という拡散モデルの面白いアイデアを見てきました。この考え方を、深層学習の文脈で具体的に定式化し、画像生成の世界に大きなインパクトを与えた代表的なモデルが、DDPM (Denoising Diffusion Probabilistic Models) なんです(3)。
DDPMの学習タスク:「ノイズ当てゲーム」
DDPMで学習するニューラルネットワーク(画像生成では、U-Net という砂時計のような形のアーキテクチャがよく使われます)の仕事は、驚くほどシンプルに定義されます。
「現在のノイズ画像 \(x_t\) と、今がどのくらいのノイズレベルかを示す時刻 \(t\) の二つの情報を与えるから、この画像を作るために元画像に加えられたノイズ \(\epsilon\) そのものを予測しなさい」
そうなんです。AIは、「綺麗な画像を復元しなさい」という難しいお題を解くのではなく、ただひたすら「ノイズを当てなさい」という、より簡単な問題に集中します。
これは、まるで医師が、不鮮明なレントゲン写真を見て、「この画像のボケやノイズのパターンは、X線管のこの特性に起因するものです」と、ノイズの原因を特定する作業に似ているかもしれません。ノイズのパターンが正確に分かれば、それを取り除くことで、より鮮明な画像を得ることができますよね。
損失関数:予測と正解の「答え合わせ」
学習は、モデルが予測したノイズ \(\hat{\epsilon}\) と、私たちが実際に加えたノイズ \(\epsilon\) が、どれだけ似ているかを平均二乗誤差(Mean Squared Error, MSE)で測り、この誤差が最小になるようにモデルのパラメータを更新していくことで行われます。
概念的な損失関数 \(L\) は、以下のように表現できます。
\[ L = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon – \epsilon_\theta(x_t, t) \|^2 \right] \]
- \(\epsilon\): 実際に画像 \(x_0\) に加えた、正解となるノイズ。
- \(\epsilon_\theta(x_t, t)\): 私たちのAIモデル(パラメータ\(\theta\)を持つ)が、ノイズ画像\(x_t\)と時刻\(t\)を入力として、予測したノイズ。
- \(\| \dots \|^2\): 2つのノイズの差の大きさ(二乗誤差)を計算します。
- \(\mathbb{E}_{t, x_0, \epsilon}\): 様々な画像、様々な時刻(ノイズレベル)、様々なノイズパターンでこの計算を繰り返し、その平均的な誤差を小さくしていく、という意味です。
DDPMの学習ステップの概念図
このシンプルな「ノイズ予測ゲーム」を繰り返すことで、モデルはあらゆるノイズパターンとその除去方法を学習し、未知のノイズ分布からも画像を生成できる、強力な能力を身につけていきます。このDDPMの詳しいアルゴリズムや、U-Netアーキテクチャ、そしてPyTorchを使った具体的な実装については、続く「24.3 DDPMの基礎とPyTorchによるノイズ除去学習の実装」で、さらに深く掘り下げていきます。
24.4 Stable Diffusionの仕組みとライブラリを使った高精細画像生成 〜潜在空間の「地図」上で、拡散を行う〜
さて、DDPMの「ノイズ当てゲーム」というシンプルなアイデアで、高品質な画像が生成できることが分かりました。素晴らしいですよね。しかし、このDDPMには、実用上、一つ大きな課題がありました。それは、とてつもない計算コストです。
DDPMは、高解像度の画像そのもの(ピクセル空間)で、直接ノイズの追加と除去を繰り返します。512×512ピクセルの画像となると、何十万というピクセル一つ一つに対して計算を行うため、一台の高性能GPUを使っても、一枚の画像を生成するのに数秒から数分かかってしまうことも珍しくありませんでした。
潜在拡散モデル(Latent Diffusion)という発明
「もっと効率的に、この拡散プロセスを実行できないだろうか?」…この問いに対する画期的な答えが、潜在拡散モデル (Latent Diffusion Models)、そしてその最も有名な実装であるStable Diffusionなのです(4)。
その核心的なアイデアは、まさにコロンブスの卵でした。
「計算コストが高いピクセル空間で直接戦うのはやめよう。一度、VAEのエンコーダを使って、画像をその本質的な特徴だけが詰まった、ずっと低次元の『潜在空間』に圧縮する。そして、そのコンパクトな潜在空間の中で、拡散と復元のプロセスを行えば良いじゃないか!」
これは、巨大で複雑な分子構造モデルを直接手でいじるのではなく、その要点をまとめた数式(潜在表現)の上で計算を進め、最後にその数式から最終的な分子構造を組み立てる、というようなものです。扱うデータが小さくなるので、計算が圧倒的に速くなります。
Stable Diffusionの処理フロー
Stable Diffusionのステップ解説
- エンコード: まず、VAEのエンコーダを使って、高解像度の画像を、その意味を保ったまま、はるかに小さな潜在変数 \(z\) に圧縮します。
- 潜在空間での拡散: 次に、このコンパクトな潜在変数 \(z\) に対して、DDPMと同じように拡散過程(ノイズの追加)を行います。高次元のピクセル空間ではなく、低次元の潜在空間で処理するため、計算が非常に高速です。
- 復元過程とテキストによる誘導: そして、ノイズだらけになった潜在変数から、U-Netがノイズを除去していく復元過程が始まります。Stable Diffusionの真骨頂は、ここでCLIPという、画像と言葉の関係性を理解した別のAIモデルを使い、私たちが与えたテキストプロンプト(例:「宇宙服を着た猫」)の情報で、ノイズ除去の方向性を「誘導」してあげる点です。これにより、私たちの意図に沿った画像を生成できるのです。
- デコード: 最後に、ノイズが完全に取り除かれた「きれいな」潜在変数を、VAEのデコーダに入力します。すると、デコーダは、その設計図を元に、高解像度の最終的な画像を生成してくれる、というわけです。
この「潜在空間での拡散」というアイデアと、「テキストによる誘導」の組み合わせが、Stable Diffusionの驚異的な性能と効率性の秘密なんですね。
このモデルの詳しい仕組みや、実際にライブラリ(例えばHugging Faceのdiffusers)を使って高精細な画像を生成する方法については、続く「24.4 Stable Diffusionの仕組みとライブラリを使った高精細画像生成」で、さらに深く掘り下げていきます。
まとめと次のステップへ
今回は、現代の画像生成AIの主流である拡散モデルの基本的な考え方を探求しました。ノイズを付加する「拡散過程」と、AIがノイズを除去する方法を学習する「復元過程」という、VAEやGANとは全く異なるユニークなアプローチを学びました。
この拡散モデルの登場により、医療分野においても、例えば「特定の病変を持つ、解剖学的に正しい高精細なMRI画像を生成する」といった、これまではるかに困難だったタスクが現実のものとなりつつあります。
さて、生成モデルの主要な潮流を3回にわたって見てきました。次回の第25回では、これらの生成モデルの学習にも通底する、より一般的な概念「自己教師あり学習」の世界を探求します。これは、GPTやBERTのような巨大な事前学習済みモデルを支える、極めて重要なパラダイムです。
参考文献
- Kazeminia S, Baur C, Kuijper A, van Ginneken B, Navab N, Albarqouni S, et al. GANs for medical image analysis. arXiv preprint arXiv:1809.06222. 2018.
- Zhavoronkov A, Ivanenkov YA, Aliper A, Veselov MS, Aladinskiy VA, Aladinskaya AV, et al. Deep learning enables rapid identification of potent DDR1 kinase inhibitors. Nat Biotechnol. 2019;37(9):1038-1040.
- Ho J, Jain A, Abbeel P. Denoising diffusion probabilistic models. In: Advances in Neural Information Processing Systems 33. 2020. p. 6840-6851.
- Rombach R, Blattmann A, Lorenz D, Esser P, Ommer B. High-resolution image synthesis with latent diffusion models. In: Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2022. p. 10684-10695.
ご利用規約(免責事項)
当サイト(以下「本サイト」といいます)をご利用になる前に、本ご利用規約(以下「本規約」といいます)をよくお読みください。本サイトを利用された時点で、利用者は本規約の全ての条項に同意したものとみなします。
第1条(目的と情報の性質)
- 本サイトは、医療分野におけるAI技術に関する一般的な情報提供および技術的な学習機会の提供を唯一の目的とします。
- 本サイトで提供されるすべてのコンテンツ(文章、図表、コード、データセットの紹介等を含みますが、これらに限定されません)は、一般的な学習参考用であり、いかなる場合も医学的な助言、診断、治療、またはこれらに準ずる行為(以下「医行為等」といいます)を提供するものではありません。
- 本サイトのコンテンツは、特定の製品、技術、または治療法の有効性、安全性を保証、推奨、または広告・販売促進するものではありません。紹介する技術には研究開発段階のものが含まれており、その臨床応用には、さらなる研究と国内外の規制当局による正式な承認が別途必要です。
- 本サイトは、情報提供を目的としたものであり、特定の治療法を推奨するものではありません。健康に関するご懸念やご相談は、必ず専門の医療機関にご相談ください。
第2条(法令等の遵守)
利用者は、本サイトの利用にあたり、医師法、医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律(薬機法)、個人情報の保護に関する法律、医療法、医療広告ガイドライン、その他関連する国内外の全ての法令、条例、規則、および各省庁・学会等が定める最新のガイドライン等を、自らの責任において遵守するものとします。これらの適用判断についても、利用者が自ら関係各所に確認するものとし、本サイトは一切の責任を負いません。
第3条(医療行為における責任)
- 本サイトで紹介するAI技術・手法は、あくまで研究段階の技術的解説であり、実際の臨床現場での診断・治療を代替、補助、または推奨するものでは一切ありません。
- 医行為等に関する最終的な判断、決定、およびそれに伴う一切の責任は、必ず法律上その資格を認められた医療専門家(医師、歯科医師等)が負うものとします。AIによる出力を、資格を有する専門家による独立した検証および判断を経ずに利用することを固く禁じます。
- 本サイトの情報に基づくいかなる行為によって利用者または第三者に損害が生じた場合も、本サイト運営者は一切の責任を負いません。実際の臨床判断に際しては、必ず担当の医療専門家にご相談ください。本サイトの利用によって、利用者と本サイト運営者の間に、医師と患者の関係、またはその他いかなる専門的な関係も成立するものではありません。
第4条(情報の正確性・完全性・有用性)
- 本サイトは、掲載する情報(数値、事例、ソースコード、ライブラリのバージョン等)の正確性、完全性、網羅性、有用性、特定目的への適合性、その他一切の事項について、何ら保証するものではありません。
- 掲載情報は執筆時点のものであり、予告なく変更または削除されることがあります。また、技術の進展、ライブラリの更新等により、情報は古くなる可能性があります。利用者は、必ず自身で公式ドキュメント等の最新情報を確認し、自らの責任で情報を利用するものとします。
第5条(AI生成コンテンツに関する注意事項)
本サイトのコンテンツには、AIによる提案を基に作成された部分が含まれる場合がありますが、公開にあたっては人間による監修・編集を経ています。利用者が生成AI等を用いる際は、ハルシネーション(事実に基づかない情報の生成)やバイアスのリスクが内在することを十分に理解し、その出力を鵜呑みにすることなく、必ず専門家による検証を行うものとします。
第6条(知的財産権)
- 本サイトを構成するすべてのコンテンツに関する著作権、商標権、その他一切の知的財産権は、本サイト運営者または正当な権利を有する第三者に帰属します。
- 本サイトのコンテンツを引用、転載、複製、改変、その他の二次利用を行う場合は、著作権法その他関連法規を遵守し、必ず出典を明記するとともに、権利者の許諾を得るなど、適切な手続きを自らの責任で行うものとします。
第7条(プライバシー・倫理)
本サイトで紹介または言及されるデータセット等を利用する場合、利用者は当該データセットに付随するライセンス条件および研究倫理指針を厳格に遵守し、個人情報の匿名化や同意取得の確認など、適用される法規制に基づき必要とされるすべての措置を、自らの責任において講じるものとします。
第8条(利用環境)
本サイトで紹介するソースコードやライブラリは、執筆時点で特定のバージョンおよび実行環境(OS、ハードウェア、依存パッケージ等)を前提としています。利用者の環境における動作を保証するものではなく、互換性の問題等に起因するいかなる不利益・損害についても、本サイト運営者は責任を負いません。
第9条(免責事項)
- 本サイト運営者は、利用者が本サイトを利用したこと、または利用できなかったことによって生じる一切の損害(直接損害、間接損害、付随的損害、特別損害、懲罰的損害、逸失利益、データの消失、プログラムの毀損等を含みますが、これらに限定されません)について、その原因の如何を問わず、一切の法的責任を負わないものとします。
- 本サイトの利用は、学習および研究目的に限定されるものとし、それ以外の目的での利用はご遠慮ください。
- 本サイトの利用に関連して、利用者と第三者との間で紛争が生じた場合、利用者は自らの費用と責任においてこれを解決するものとし、本サイト運営者に一切の迷惑または損害を与えないものとします。
- 本サイト運営者は、いつでも予告なく本サイトの運営を中断、中止、または内容を変更できるものとし、これによって利用者に生じたいかなる損害についても責任を負いません。
第10条(規約の変更)
本サイト運営者は、必要と判断した場合、利用者の承諾を得ることなく、いつでも本規約を変更することができます。変更後の規約は、本サイト上に掲載された時点で効力を生じるものとし、利用者は変更後の規約に拘束されるものとします。
第11条(準拠法および合意管轄)
本規約の解釈にあたっては、日本法を準拠法とします。本サイトの利用および本規約に関連して生じる一切の紛争については、東京地方裁判所を第一審の専属的合意管轄裁判所とします。
For J³, may joy follow you.

