3行でいうと

  • 拡散モデルは、砂嵐のようなノイズを少しずつ取り除く作業を何十回も繰り返し、絵を取り出す仕組みです。
  • 訓練では、絵にノイズを足して、足したノイズを当てる練習をします。
  • 文章の指示は、ノイズを取り除く作業の「向かう方向」を決める手がかりとして使われます。
  • すべての画像生成AIが拡散モデルと公式に書かれているわけではなく、OpenAIやGoogleの最近のものは確認できていません。

この記事は公式・一次資料(論文のページ、Hugging Faceの公式ドキュメント、OpenAIとGoogleの公式ページ)を読んでまとめたものです。この記事は、実際に使って確かめた記録ではありません。

先に結論

たとえ話:砂嵐の画面から、絵を浮かび上がらせる

テレビの砂嵐の画面を思い浮かべてください。ざらざらの点が並んでいるだけです。

ここに、「この砂嵐は、猫の絵に点をまぶしたものだ」と教えてもらえるとします。猫の絵が見えているわけではありませんが、「この点は余計なものだ」と、少しだけ取り除けます。取り除いた画面を、もう一度見る。まだ余計な点があるので、また少し取り除く。これを何十回も繰り返すと、猫の絵が浮かび上がります。

拡散モデルは、この「余計な点(ノイズ)を見つけて取り除く」ことを、大量の絵で練習したAIです。

仕組みを、順番に

1. 訓練:絵にノイズを足して、足した分を当てる

Hugging Faceの訓練のドキュメントによると、訓練の1回分は、次のようにして行います。

  1. 訓練用の絵を1枚選ぶ。
  2. 「どのくらいノイズを足すか」を、ランダムに決める(段階が番号で決まっていて、ドキュメントの例では1,000段階です)。番号が大きいほど、ノイズが多く、元の絵が分からなくなります。
  3. その分のノイズを、絵に足す。
  4. ノイズだらけの絵と、段階の番号を、モデルに渡す。モデルは「どんなノイズが足されたか」を予想する。
  5. 予想と、実際に足したノイズの差(平均二乗誤差という数字)を計算し、差が小さくなるように、モデルを少し直す。

これを大量の絵で繰り返します。ドキュメントは、この訓練の目的を、モデルが「画像に足されたノイズを予測すること」と説明しています。拡散モデルの原点にあたる論文(Ho、Jain、Abbeel、2020年6月、「Denoising Diffusion Probabilistic Models」)は、拡散モデルで質の高い画像の合成ができることを示した研究として、arXivに公開されています。

2. 生成:ノイズから出発して、少しずつ取り除く

絵を作るときは、逆向きに進みます。Hugging Faceの「パイプラインの仕組み」のドキュメントには、次の流れが書かれています。

  1. 出力したい大きさのランダムなノイズを用意する。
  2. 各段階で、モデルが「いま含まれているノイズ」を予測する。
  3. スケジューラ(ノイズを取り除く手順を決める部品)が、その予測を使って、少しノイズの少ない絵を作る。
  4. 2と3を、決まった回数だけ繰り返す。

ドキュメントの例では、50回です。繰り返しの回数(ステップ数)は、速さと質のバランスを決めます。同じ公式ドキュメントは、回数を減らすと計算は減るが質が下がることがあり、DPMSolverという手順なら20〜25回ほどで済む、と書いています。また、ノイズを取り除く作業が、拡散の中でいちばん計算が重い、とも書いています。

3. 文章の指示は、どう効くのか

画像生成AIは、文章の指示(プロンプト)をそのまま絵に変えるのではありません。Diffusersのドキュメントによると、Stable Diffusionでは、次のように使われます。

この仕組みの元になった論文(Rombachら、2021年12月、「High-Resolution Image Synthesis with Latent Diffusion Models」)は、モデルの中に「クロスアテンション」という層を加えることで、文章や位置の枠のような条件を受け付けられるようにした、と書いています。

さらに、「どれだけ指示を重く見るか」を調整する値(ガイダンススケール)があります。ドキュメントのコード例では、この値を7.5に設定し(例の設定値です)、指示に従った予測と、指示なしの予測を比べて、その差を大きくする計算をしています。なお、StableDiffusionPipelineの公式リファレンスでは、この引数の初期値が7.5と書かれています。

指示の書き方についてのドキュメントの助言は、絵の種類(写真、イラストなど)、主役、画風、雰囲気を書くことです。避けたい特徴を伝える「ネガティブプロンプト」(例:低品質、ぼやけた)という使い方も紹介されています。

4. 作業を軽くする工夫:「潜在空間」

絵のピクセル(点)そのものを扱うと、計算が膨大になります。上の論文は、画像を小さく圧縮した表現(潜在空間)の中で拡散を行うことで、計算の費用を大きく減らせる、と書いています。DiffusersのドキュメントのStable Diffusionの例では、この小さな表現は、出力する絵の縦横の8分の1の大きさです。ノイズを取り除く作業を終えたあと、「VAE」という部品(圧縮を元に戻す役)が、絵に直します。

「拡散」だけではない:最近の動き
  • 別の訓練のしかた:Esserらが2024年3月にarXivで公開した論文は、ノイズとデータを一直線につなぐ「rectified flow(整流フロー)」という方法と、文章用と画像用に別の重みを持つ新しい構造(トランスフォーマー)を組み合わせると、高解像度の画像生成で、従来の拡散の方法より良い結果が出た、と報告しています。これは論文の主張で、この記事では確かめていません。
  • OpenAI:2025年3月25日の発表で、GPT-4oの画像生成について、オンラインの画像と文章をいっしょに学習させた、「ネイティブにマルチモーダル」なモデルと説明しています。この発表ページには、「拡散モデル」か否かの記述は見つけられませんでした。
  • Google:DeepMindの公式ページは、画像を生成する「Nano Banana」系のモデルがGeminiをもとにしていると書いています。拡散モデルかどうかは、書かれていません。

見立てです。「画像生成AI=拡散モデル」と覚えると、仕組みの入り口としては分かりやすいですが、最近のサービスは、文章を扱うAIと一体になる方向にも動いているように見えます。中身は会社ごとに違い、非公開のことも多いので、一般的な説明を個々のサービスに当てはめすぎないほうがよいと思います。

実際の使い道と、よくある失敗

誤解されやすい点

「元の絵を探して、貼り合わせている」と書かれているわけではない

公式の資料に書かれているのは、「ノイズを予測する練習をして、ノイズから絵を作る」という説明です。データベースから絵を探して貼り合わせる、という説明は、読んだ資料には出てきません。ただし、訓練に使われた絵と、できあがった絵がどのくらい似るのかは、この記事では調べていません。著作権の話は、同じ連載の別の記事で扱っています。

「文章を理解して、頭の中でイメージしている」とは書かれていない

公式の資料は、文章を数字に直して、ノイズを取り除く方向の手がかりに使う、と説明しています。「理解」という言葉の意味は、資料からは判断できません。

「AIの絵は、事実どおり」とは限らない

OpenAI自身が、事実と違う内容が出る、と認めています。実在の人物や場所、図、グラフを描かせる場合は、元の情報と見比べてください。

気をつけること

出典

更新履歴