← 機械学習テキスト 一覧

🎓 レベル:基礎 | 重要度:A(必須)

📎 前提:ナイーブベイズ(生成的分類器の例)

要点(BLUF)

1. 識別モデル vs 生成モデル

機械学習の確率モデルは、何の分布を学ぶかで大きく2つに分かれます。

識別モデル(discriminative)生成モデル(generative)
学ぶ分布p(yx)p(y\mid x)(条件付き)p(x)p(x) または p(x,y)p(x,y)(同時)
やることclass の境界を引くデータの分布そのものを説明
サンプリングできないできる(これが本質)
代表例ロジスティック回帰、SVM、多くのNN分類器ナイーブベイズ判別分析(LDA・QDA)混合ガウスモデルとEM、VAE/GAN/拡散

識別モデルは「xx を見て yy を当てる」ことだけに集中します。xx がそもそもどう分布しているか(p(x)p(x))には興味がありません。境界さえ引ければ分類はできるからです。

生成モデルは逆に、xx がどう分布しているかを学びます。ラベル付き問題なら同時分布 p(x,y)p(x,y) を学び、ベイズの定理で事後確率を作って分類します:

p(yx)=p(x,y)p(x)=p(xy)p(y)yp(xy)p(y)p(y\mid x)=\frac{p(x,y)}{p(x)}=\frac{p(x\mid y)\,p(y)}{\sum_{y'}p(x\mid y')\,p(y')}

要するに:識別モデルは「ねこ と いぬ の間に線を引く」係、生成モデルは「ねこ画像はこういう分布、いぬ画像はこういう分布」と各クラスの見た目そのものを覚える係です。線を引くだけなら後者は遠回りに見えますが、分布を持っているぶん新しいねこを描けるのが強みです。

ナイーブベイズ が「生成的分類器」と呼ばれるのはまさにこれで、p(xy)p(y)p(x\mid y)p(y) を作ってからベイズで p(yx)p(y\mid x) に変換しています。一方 ロジスティック回帰p(yx)p(y\mid x) を直接モデリングする識別側の代表です。

2. 生成モデルで何ができるか

分布 p(x)p(x)(または p(x,y)p(x,y))が手に入ると、分類以外にも次のことができます。

識別モデルは1番目(生成)が原理的にできません。「p(x)p(x) を持っていない」からです。ここが生成モデルを学ぶ最大の動機になります。

3. 尤度 p(x)p(x) を最尤で学ぶ — そして高次元の壁

生成モデルの学習は、基本的に ナイーブベイズ と同じ最尤推定です。パラメータ θ\theta を持つモデル pθ(x)p_\theta(x) で、データ {x(1),,x(N)}\{x^{(1)},\dots,x^{(N)}\} の対数尤度を最大化します:

θ^=argmaxθi=1Nlogpθ(x(i))\hat\theta=\arg\max_\theta \sum_{i=1}^{N}\log p_\theta(x^{(i)})

要するに:「手元のデータが一番出やすくなるように分布の形を調整する」だけです。考え方はナイーブベイズの P(xy)P(x\mid y) 推定と何も変わりません。

ところが xx が高次元(数百×数百の画像など)になると、ここに2つの壁が立ちます。

  1. 尤度 pθ(x)p_\theta(x) がそもそも計算できない。確率分布は全体で積分1の正規化が要りますが、pθ(x)dx=1\int p_\theta(x)\,dx=1 を保つ正規化定数が高次元では手に負えないことが多い。
  2. サンプリングが難しい。仮に分布の形が分かっても、xpθ(x)x\sim p_\theta(x) で実際にもっともらしいサンプルを引く操作が高次元では非自明です。

この**「尤度をどう扱うか」「サンプリングをどう実現するか」の答え方**こそが、生成モデルを分類する軸になります。

4. 分類地図:明示的尤度 vs 暗黙的

生成モデルは大きく、尤度 pθ(x)p_\theta(x) を陽に(明示的に)扱うか/扱わないかで分かれます。

graph TD
  G["生成モデル<br/>p(x) を学ぶ"] --> E["明示的尤度<br/>p(x) を式として持つ"]
  G --> I["暗黙的<br/>p(x) は計算せずサンプルだけ作る"]
  E --> EX["厳密に計算できる"]
  E --> AP["近似で扱う"]
  EX --> AR["自己回帰モデル<br/>連鎖律で厳密分解"]
  EX --> FL["フローベース<br/>可逆変換で厳密"]
  AP --> VAE["VAE<br/>下界 ELBO で近似"]
  AP --> DIff["拡散モデル<br/>段階的ノイズ除去"]
  I --> GAN["GAN<br/>識別器との敵対学習"]

各枝を一言ずつ整理します。

flowchart LR
  Z["潜在 / ノイズ z"] --> Gen["生成器"]
  Gen --> X["生成サンプル x"]
  Real["本物データ"] --> Disc["識別器"]
  X --> Disc
  Disc --> J["本物 / 偽物 の判定"]
  J -.->|"敵対的な学習信号"| Gen

要するに:明示的モデルは「分布の数式を持つので尤度で評価でき、密度推定や異常検知にも使える」。暗黙的モデル(GAN)は「数式は持たないがサンプルだけは上手に作る」。この差が用途の差に直結します。

5. 生成 vs 識別のトレードオフ

「分類したいだけ」なら、わざわざ p(x)p(x) まで学ぶ生成モデルは遠回りです。実際、純粋な分類性能では識別モデルの方が有利なことが多い。理由は、識別モデルは境界だけに資源を集中でき、p(x)p(x) という余計な部分のモデル化ミスに引きずられないからです。

一方で生成モデルには次の利点があります(→ 古典的には ナイーブベイズ vs ロジスティック回帰 の比較が典型)。

graph LR
  D["識別モデル<br/>p(y|x)"] --> Dp["分類は得意<br/>境界に集中"]
  D --> Dm["生成はできない"]
  Gn["生成モデル<br/>p(x) , p(x,y)"] --> Gp["生成・補完・異常検知<br/>少データに強いことも"]
  Gn --> Gm["学習が難しい<br/>分類だけなら遠回り"]

要するに:「とにかく当てたい」なら識別、「データそのものを理解・生成したい/使える情報を増やしたい」なら生成、という棲み分けです。

⚠️ よくある誤解・落とし穴

6. 対応するシミュレーション

simulations/generative_vs_discriminative.py:識別モデル(ロジスティック回帰)は境界 p(yx)p(y\mid x) だけを学んで分類するのに対し、生成モデル(クラスごとのガウス p(xy)p(x\mid y))はデータの“作られ方”を学ぶので、そこから新しいデータをサンプリングできることを可視化します。分類だけなら識別モデルが高精度なことが多い一方、生成・欠損補完・異常検知は生成モデルの強み。VAE・GAN・拡散はこの「p(x)p(x) を学んで生成」を高次元で行う発展形です(オートエンコーダとVAE)。

生成は標本を作れる・識別は境界のみ

関連ノート