生成AI資格対策(生成AIパスポート+G検定)
画像生成のしくみ
絵には「次の1語」に当たるものが無い
文章を作る大規模言語モデルは、左から右へ語をつないでいく方式でした。画像はそうはいきません。絵には次の1語に相当する自然な順序がなく、全体が一度に決まる必要があります。そこで使われるのが拡散モデル (diffusion model) です。
発想は逆向きから来ています。きれいな写真に、ほんの少しノイズを足す。もう少し足す。これを何百段階も繰り返せば、最後には元が何だったか分からない砂嵐になります。この壊していく向きを順過程 (forward process) と呼びます。順過程は学習で覚える必要がありません。単にノイズを足す決まった手続きだからです。
学習しているのは、引き算のほうだけ
モデルが学習するのはその逆で、ノイズまみれの画像を見て、そこに乗っているノイズがどんなものかを言い当てることです。言い当てられれば引き算できます。1段階分だけ引き、少しきれいになった画像をまた見せて、またノイズを言い当てさせる。これを繰り返すのが逆過程 (reverse process) です。
生成のときは元の写真がありません。純粋な乱数の砂嵐から始めて、学習済みのノイズを見抜く力を何十段階も適用していきます。すると砂嵐の中から、モデルが学習した画像らしさを満たす絵が浮かび上がってきます。彫刻家が石の中から像を彫り出すのに似た手続きです。
| 向き | 何をするか | 学習が要るか |
|---|---|---|
| 順過程 | きれいな画像にノイズを段階的に足す | 不要。決まった手続き |
| 逆過程 | ノイズを推定して段階的に引く | 必要。ここがモデルの本体 |
| 生成時 | 乱数の砂嵐から逆過程だけを回す | 学習済みモデルを使う |
プロンプトは毎段階の向きを決め続けている
このままではそれらしい絵しか出てきません。指示どおりの絵にするために、逆過程の各段階にテキストによる条件付けを加えます。
入力したプロンプトはまず、文章の意味を表す数値のベクトルへ変換されます。ノイズを推定するネットワークは、ノイズだらけの画像とこのベクトルの両方を見て、このテキストが表す画像へ近づくにはどのノイズを引けばよいかを判断します。プロンプトは1回だけ効くのではなく、毎段階の引き算の向きを決め続けていると捉えると挙動が理解しやすくなります。プロンプトを少し変えただけで構図まで変わるのは、各段階の判断がわずかにずれ、それが何十段階も積み重なるためです。同じプロンプトでも初期の乱数が違えば別の絵になるのは、出発点の砂嵐が別物だからです。
もう1つ、実用上の工夫があります。高解像度の画像をそのまま扱うと画素の数だけ計算が必要になり、何十段階も回すのは現実的ではありません。そこで多くのモデルは、画像を一度潜在空間と呼ばれる圧縮された表現へ落とし込み、その小さな空間の中で拡散と逆過程を回し、仕上げにデコーダで画像へ戻します。潜在拡散モデルと呼ばれる方式です。画素の空間ではなく圧縮した空間で拡散させている、という一点を押さえておいてください。
主流が GAN から移った理由
拡散モデルが広まる前、画像生成の主役は GAN (敵対的生成ネットワーク) でした。GAN は、偽物を作る生成器と、本物か偽物かを見分ける識別器を競わせて学習する方式です。1回の推論で画像が出るため生成は高速ですが、学習が不安定になりやすく、生成される絵の種類が偏る問題も知られています。
拡散モデルは、何十段階も繰り返すぶん生成は遅いものの、学習が安定し、多様で高品質な画像を出しやすい性質があります。主流が GAN から拡散モデルへ移った理由は、この学習の安定性と品質にあります。
試験ではこう出る
出題者は拡散モデルという語を出さずに、しくみの説明文だけを並べて選ばせてきます。
- 「ノイズを段階的に除去して画像を生成する」とあれば拡散モデルです。VAE や GAN と並べて迷わせてきます
- 「生成器と識別器を競わせる」とあれば GAN です。拡散モデルの説明と入れ替えて出す形が定番です
- 「順過程では学習を行わない」という趣旨の正誤問題も出ます。学習するのは逆過程だけ、が正しい理解です
- テキストから画像を作る仕組みとして、プロンプトが逆過程の条件として働く点が問われます
復習ミニクイズ
画像生成における拡散モデルの説明として最も適切なものはどれですか。