5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なんで生成AIで画像が作れるのか???

Last updated at Posted at 2025-12-20

はじめに

こんにちは。株式会社インティメート・マージャーの十文字です。

みなさん、生成AIを理解して使えていますか?
今や我々の日常に溶け込んでいる生成AIですが、この生成AIが出力出来るものにはテキストや音声、画像、動画など様々なものがあります。

テキスト生成に関しては、次に現れる単語を予測して出力する仕組みというなんとなくの理解がありますが、画像生成に関してはあまり直感的な理解が出来ていなかったため、本記事ではなぜAIが画像を生成できるのかを、技術的な変遷も含めて解説していきます。

画像分類について

画像生成の話をする前に、まずは画像分類についてみていきます。

画像分類といえば、CNN(畳み込みニューラルネットワーク)によるMNIST(手書き文字)の分類があげられます。

画像分類の入門

MNIST(Modified National Institute of Standards and Technology)は、手書き文字(数字)の画像データセットで、0から9までの手書き数字の画像が訓練用・テスト用合わせて70,000枚用意されており、以下のようにそれぞれ「この画像は何の数字か」というラベルが付いています。

Figure_1.png

それぞれの画像は 28×28 ピクセルで構成されており、AIは画像のピクセル値(色の情報)を入力として受け取り、それがどの数字かを予測します。

CNNによる特徴量抽出

画像分類の手法の一つにCNN(Convolutional Neural Networks)というものがあります。このCNNには画像から特徴量を自動的に抽出する仕組みがあり、これにより手書きの数字から特徴を抽出することで予測を可能にしています。

畳み込み層

CNNの核心は畳み込み層で、この層は小さなフィルターを使って、画像の中から特定の基本的なパターンを検出します。

例えば、MNISTの数字を分類するCNNは、以下のようなフィルターを学習します。

  1. 縦の線を検出するフィルター

    [ 0,  1,  0]
    [ 0,  1,  0]
    [ 0,  1,  0]
    

    このフィルターは、画像をスキャンして「縦に並んだ明るいピクセル」を検出します。数字の「1」や「4」の縦線に反応します。

  2. 横の線を検出するフィルター

    [ 0,  0,  0]
    [ 1,  1,  1]
    [ 0,  0,  0]
    

    このフィルターは、横に並んだ線を検出します。数字の「2」や「3」の横線に反応します。

  3. 斜めの線を検出するフィルター

    [ 1,  0,  0]
    [ 0,  1,  0]
    [ 0,  0,  1]
    

    このフィルターは、斜めの線を検出します。数字の「7」の斜めの線に反応します。

  4. 曲線を検出するフィルター

    [ 0,  1,  0]
    [ 1,  0,  1]
    [ 0,  0,  0]
    

    このフィルターは、丸い形や曲線を検出します。数字の「0」や「8」の丸い部分に反応します。

いくつか理解しやすいフィルターの例をあげましたが、実際に学習されるフィルターは初期値にもよりますが、あまり人間には理解し難いかもしれません。

cnn_filters_learning.gif

特徴マップ

各フィルターが画像をスキャンすると、特徴マップというものが生成されます。特徴マップは、「この位置に縦の線(フィルターに近いパターン)がある」「この位置に斜めの線がある」という情報を保持しています。

元の画像(28×28)
    ↓
[縦線検出フィルター] → 縦線の特徴マップ(「ここに縦線がある」)
[横線検出フィルター] → 横線の特徴マップ(「ここに横線がある」)
[斜め線検出フィルター] → 斜め線の特徴マップ(「ここに斜め線がある」)
[曲線検出フィルター] → 曲線の特徴マップ(「ここに曲線がある」)

層を重ねる

CNNは、複数の畳み込み層を重ねることで、単純なパターンから複雑なパターンを認識します。

画像
  ↓ [第1層:縦/横/斜めの線]
基本的な線の特徴
  ↓ [第2層:線の組み合わせ]
角や曲線の特徴
  ↓ [第3層:形状の組み合わせ]
数字の一部の特徴
  ↓ [最終層:完全な形状]
「これは7です」

特徴量空間

CNNが抽出した特徴量は、最終的に数値のベクトルとして表現されます。このベクトルは、画像を「特徴量空間」という抽象的な空間にマッピングしたものです。

例えば、数字の「7」の画像は以下のような特徴量ベクトルになるかもしれません

[0.2, 0.8, 0.9, 0.1, 0.3, ...]
 ↑    ↑    ↑    ↑    ↑
縦線  横線  斜め  曲線  角

画像分類の本質

画像分類では、AIは以下のような処理を行います。

  1. 特徴量の抽出

    • 縦、横、斜めの線
    • エッジ(輪郭)
    • テクスチャ(質感)
    • 形状
  2. 特徴量のベクトル化

    • 画像(28×28 = 784ピクセル) → 特徴量ベクトル
  3. パターンの認識:特徴量ベクトルから「これは何か」を判断する

    • 斜めの線が強い + 曲線が弱い → これは7かもしれない
    • 縦線が強い + 他の線が弱い → これは1かもしれない
  4. 分類

    • 最終的に「この画像は7です」というように判定する

つまり、画像分類は「画像 → 特徴量ベクトル → ラベル」という処理を行っています。

なぜ特徴量が重要なのか?

この画像分類の処理中に表れる特徴量とは、画像の本質的な情報を圧縮した表現です。

  • 元の画像:28×28 = 784個のピクセル値
  • 特徴量ベクトル:例えば128個の数値

この「特徴量ベクトル」および「特徴量空間」という概念は、画像生成AIでも重要な役割を果たします。VAEやGANに代表される画像生成手法では、似たような概念として「潜在空間」という言葉が使われます。これらは関連していますが目的が異なり、後ほど解説します。

画像生成は画像分類の「逆」

ここまできてようやく画像生成の話に入れます。画像分類は画像をラベルに変換する処理であったので、ラベルを画像に変換する処理、つまり画像分類とは逆向きの処理を行えば画像生成が出来るということです。

画像分類と画像生成の対比

処理 入力 中間表現 出力 方向
画像分類 画像 特徴量ベクトル(縦/横/斜めの線など) ラベル 画像 → 特徴量 → ラベル
画像生成 ラベル 特徴量ベクトル(縦/横/斜めの線など) 画像 ラベル → 特徴量 → 画像

画像分類では「この画像は何か」を判断しますが、画像生成では「猫の画像を作る」というように、特徴量ベクトルから画像を構築します。

CNNの特徴量抽出:画像分類の核心

画像分類では、CNNが以下のように処理します:

画像「7」
  ↓ [CNNの畳み込み層:縦/横/斜めの線/曲線...を検出]
特徴量ベクトル [0.2, 0.8, 0.9, 0.1, ...]
  ↓ [分類層]
「これは7です」

CNNは、画像から「縦の線」「横の線」「斜めの線」「曲線」などの特徴量を抽出し、それを数値のベクトルとして表現します。

画像生成:特徴量から画像を構築する

画像生成では、この逆の処理を行います:

「7の画像を作る」/ ノイズ
  ↓ [特徴量の決定]
特徴量ベクトル [0.2, 0.8, 0.9, 0.1, ...]
  ↓ [逆CNN:特徴量から画像を構築]
画像「7」

画像生成AIは、特徴量ベクトルを解釈して:

  • 「縦の線の値が0.2 → 弱い縦線を描く」
  • 「横の線の値が0.8 → 強い横線を描く」
  • 「斜めの線の値が0.9 → 非常に強い斜め線を描く」
  • 「曲線の値が0.1 → 弱い曲線を描く」

というように、特徴量から画像を再構築します。

なぜ「逆」の処理が難しいのか?

画像分類が比較的簡単な理由として以下が挙げられます。

  • 入力は既に「意味のある画像」
  • CNNは「この画像にはどんな特徴があるか」を分析するだけ
  • 特徴量の抽出は、畳み込み層で自動的に行われる

一方、画像生成には以下の理由の問題があります。

  • 入力は「テキスト」や「ラベル」だけ
  • AIは「どのような特徴量を持つ画像を作るべきか」を決定する必要がある
  • 特徴量から画像を構築する「逆CNN」を学習する必要がある
  • 「猫らしい画像」とは何か?を定義し、それを生成する必要がある

つまり「CNNの特徴量抽出の逆」を実現するという画像生成は、技術的に難しい問題だったのです。

画像生成手法

CNNで学んだ特徴量抽出の知識を、画像生成に応用した代表的な手法がGANVAEです。これらは、画像分類の「逆」を実現するための異なるアプローチを取っています。

1. GAN(Generative Adversarial Network):2014年

GANは、画像生成AIの最初の大きなブレークスルーでした。(当時、大量に人物の画像が生成されたことを今でも思い出します)

GANの仕組み

GANは、2つのAI(生成器と識別器)が競い合うという独創的なアイデアから成り立ちます。

  1. 生成器(Generator):ランダムなノイズから画像を生成する
  2. 識別器(Discriminator):与えられた画像が「本物」か「生成された偽物」かを判定する
生成器:「このノイズから猫の画像を作ったよ!」
 識別器:「これは偽物だ!本物の猫の画像とは違う!」
生成器:「もっと本物らしく作ってみる...」
識別器:「まだ偽物だ!」
...(繰り返し)...
識別器:「これは本物かもしれない...」

この競争を通じて、生成器は「本物らしい画像」を作る方法を学習します。

識別器(Discriminator)

GANの識別器は、画像から特徴量を抽出して「本物か偽物か」を判断するためにCNNの仕組みを使用しています。

画像 → [CNNの畳み込み層] → 特徴量ベクトル → 「本物/偽物」の判定

生成器(Generator)

一方で生成器は、特徴量から画像を構築します。これは、画像分類の逆の処理です。

画像分類:画像 → [CNN] → 特徴量ベクトル → ラベル
生成器:ノイズ → [逆CNN] → 特徴量ベクトル → 画像

生成器は、識別器が「本物らしい」と判断するような特徴量を持つ画像を作ろうとします。つまり:

  • 「本物の猫には、このような縦横斜めの線のパターンが必要だ」
  • 「本物の猫には、このようなテクスチャが必要だ」

という特徴量を、画像として再現しようとしているんです。

GANの特徴

  • 長所:非常に高品質な画像を生成できる
  • 短所
    • 学習が不安定(2つのAIのバランスが崩れやすい)
    • モード崩壊(同じような画像ばかり生成してしまう)
    • 生成する画像の種類を制御しにくい

GANは、CNNの特徴量抽出の手法を画像生成に応用した最初の大きな成功例でした。

2. VAE(Variational Autoencoder):2013年

VAEは、エンコーダーとデコーダーという2つのネットワークを使います。VAEは、CNNの特徴量抽出の考え方を、画像生成に直接応用した手法です。

VAEの仕組み:圧縮と復元

VAEは、画像を数値のベクトルに変換してから、また画像に戻すという仕組みです。このベクトルが保存される「空間」のことをVAEでは「潜在空間」と呼びます。

  1. エンコーダー:画像を潜在ベクトルに圧縮する

    • 画像(高次元:例 28×28 = 784ピクセル) → 潜在ベクトル(低次元:例 128個の数値)
  2. デコーダー:潜在ベクトルから画像を復元する

    • 潜在ベクトル(低次元:128個の数値) → 画像(高次元:28×28 = 784ピクセル)
画像 → エンコーダー → 潜在ベクトル → デコーダー → 画像(復元)

生成時は、ランダムな潜在ベクトルをデコーダーに入力することで、新しい画像を生成します。

エンコーダー

エンコーダーは、画像を段階的に圧縮していきます。CNNの畳み込み層を重ねることで、画像のサイズを小さくし、情報を凝縮していきます。

エンコーダーは、各層で例えば以下のような処理を行います。

  • 第1層:画像から基本的な特徴(縦、横、斜めの線など)を抽出し、画像サイズを半分に
  • 第2層:第1層の特徴を組み合わせて、より複雑な特徴(角、曲線など)を抽出し、さらにサイズを縮小
  • 第3層:さらに複雑な特徴を抽出し、サイズを縮小
  • 最終層:すべての特徴を128個の数値にまとめる

このように、層を重ねるごとに画像のサイズが小さくなり、情報が凝縮されていきます。最終的に、784個のピクセルが128個の数値に圧縮されます。

デコーダー

デコーダーは、エンコーダーの逆の処理を行います。潜在ベクトルから、段階的に画像を拡大・復元していきます。

デコーダーは、各層で以下のような処理を行います。

  • 第1層:潜在ベクトルを解釈して、基本的な形状(線の方向など)を復元し、サイズを拡大
  • 第2層:第1層の形状を組み合わせて、より複雑な形状(角、曲線など)を復元し、さらにサイズを拡大
  • 第3層:さらに詳細な形状を復元し、サイズを拡大
  • 最終層:完全な画像を復元

このように、層を重ねるごとに画像のサイズが大きくなり、詳細が追加されていきます。最終的に、128個の数値から784個のピクセルを持つ画像が復元されます。

なぜ圧縮と復元が可能なのか?

エンコーダーとデコーダーは、対になって学習します。学習時は、以下のようなプロセスを繰り返します:

  1. エンコーダーが画像を潜在ベクトルに圧縮
  2. デコーダーが潜在ベクトルから画像を復元
  3. 元の画像と復元された画像を比較して、エンコーダーとデコーダーを改善

この学習を通じて:

  • エンコーダーは「画像を復元するために必要な情報だけを残す」方法を学習
  • デコーダーは「潜在ベクトルから元の画像を再現する」方法を学習

つまり、エンコーダーは画像の本質的な情報だけを抽出し、デコーダーはその情報から画像を再構築する方法を学習します。

エンコーダーはCNNの特徴量抽出と似ている

VAEのエンコーダーは、CNNの特徴量抽出と似た処理をしています。どちらも、画像から重要な情報を抽出して、数値のベクトルに変換します。

画像分類のCNN:
画像 → [畳み込み層] → 特徴量ベクトル → ラベル

VAEのエンコーダー:
画像 → [畳み込み層] → 潜在ベクトル

ただし、CNNの特徴量抽出と異なる点は、CNNは「画像を分類するために必要な情報」を抽出するのに対して、エンコーダーは「画像を復元するために必要な情報」を抽出するように最適化されていることです。

潜在空間とは?

VAEでは、潜在ベクトルが保存される「空間」のことを「潜在空間」と呼びます。これは、CNNの「特徴量空間」と似ていますが、目的が異なります

CNNの特徴量空間:
画像「7」 → [0.2, 0.8, 0.9, 0.1, ...] (縦線、横線、斜め線、曲線の強さ)
目的:画像を分類するために必要な情報を抽出
VAEの潜在空間:
画像「7」 → [0.3, -0.5, 0.8, 0.2, ...] (画像を復元するために必要な情報)
目的:画像を復元するために必要な情報を保持
  • 特徴量空間:画像を分類するために最適化されている。「この画像は何か」を判断するために必要な情報を抽出
  • 潜在空間:画像を復元するために最適化されている。「この画像を再現する」ために必要な情報を保持

どちらも画像を数値のベクトルで表現するという点では似ていますが、最適化の目的が異なるため、実際のベクトルの値や構造は異なります。

VAEの特徴

  • 長所
    • 学習が安定している
    • 潜在空間で画像を操作できる(例:笑顔の画像の潜在ベクトルを少し変えると、悲しい顔になる)
    • CNNの特徴量抽出の知識を活用できる(エンコーダーはCNNと似た構造)
  • 短所
    • 生成される画像が少しぼやけがち
    • GANほど高品質ではない

VAEは、CNNで学んだ特徴量抽出の知識を、画像生成に直接応用した最初の手法の一つでした。エンコーダーとデコーダーという対称的な構造により、「画像 → 特徴量 → 画像」という往復が可能になりました。

なぜ画像生成が可能なのか?

ここまで様々な技術を見てきましたが、なぜ画像生成が可能なのかという本題に戻りましょう。

1. 画像には「パターン」がある

例えば、以下のようなパターンがあります。

  • 猫の画像には「猫らしさ」というパターン
  • 風景の画像には「空は上、地面は下」というパターン
  • 顔の画像には「目は2つ、鼻は中央、口は下」というパターン

AIは、大量の画像データからこれらのパターンを学習します。

2. パターンから画像を「再構築」できる

一度パターンを学習すれば、そのパターンを使って画像を再構築できます。

  • GAN:識別器が特徴量を抽出し、生成器が特徴量から画像を構築
  • VAE:エンコーダーが特徴量を抽出し、デコーダーが特徴量から画像を構築

3. 「らしさ」

AIは「完璧な猫の画像」を作ろうとしているわけではありません。むしろ、「多くの猫の画像で見られるパターン」を統計的に再現しようとしています。

この「統計的な平均」を再現することで、人間が見て「これは猫だ」と認識できる画像が生まれます。

まとめ

画像生成AIが画像を作れる理由は結局のところ、GANやVAEなどによる

  1. CNNによる特徴量抽出を学んだ

    • MNISTの分類で、CNNは縦/横/斜めの線などの特徴量を自動的に抽出する方法を学習
    • 画像 → 特徴量ベクトル(縦線、横線、斜め線、曲線の強さなど)
  2. 特徴量抽出の「逆」を実現する

    • 画像分類:画像 → [CNN] → 特徴量ベクトル → ラベル
    • 画像生成:ラベル → 特徴量ベクトル → [逆CNN] → 画像
  3. GANとVAEによる「逆」の実現

    • GAN:識別器がCNNで特徴量を抽出し、生成器が特徴量から画像を構築
    • VAE:エンコーダーがCNNと同じ特徴量抽出を行い、デコーダーが特徴量から画像を構築
    • どちらも、CNNで学んだ特徴量抽出の知識を活用している
  4. 大量の画像データから「らしさ」を学習している

    • 猫の画像を何百万枚見ることで、「猫らしさ」を特徴量として理解する
    • 「猫の画像には、このような縦横斜めの線のパターンがある」という特徴量を学習
  5. 学習した特徴量を使って、新しい画像を構築している

    • 特徴量ベクトルを解釈して、「縦の線を強く描く」「斜めの線を強く描く」というように画像を再構築

画像生成は、画像分類の「逆」の処理です。特に、CNNで学んだ特徴量抽出(縦、横、斜めの線など)の知識を、逆方向に使って画像を構築するという点が重要です。GANとVAEは、この「逆」を実現するための、異なるアプローチを取っています。

さらなる進化

GANとVAEの登場以降、画像生成AIはさらに進化を続けています。

  • Vision Transformer(ViT):CNNに代わる新しいアーキテクチャとして登場。画像をパッチに分割して処理する方式で、より広範囲の特徴を捉えることができます

  • 拡散モデル(Diffusion Models):完全なノイズから始めて、少しずつノイズを取り除いていくことで画像を生成する現在最も注目されている手法の一つです

これらの技術も、最終的には特徴量から画像を構築するという点ではGANやVAEと同じですが、より高品質な画像生成を実現しています。そして今、これらの技術を基盤として、Stable DiffusionやMidjourneyのような実用的なサービスが、私たちの日常に画像生成AIをもたらしています。

おわりに

最後まで読んでいただきありがとうございました!明日のアドベントカレンダーもお楽しみに!

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?