深層学習

生成モデルと識別モデル

生成モデルはデータとラベルの同時分布を、識別モデルはラベルの条件付き分布を学習します。分類だけなら識別モデルが効率的で、生成・欠損補完・異常検知まで扱うなら生成モデルを選びます。

  • A|中核
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

生成モデルは観測データ x\mathbf{x} とラベル yy の同時分布 p(x,y)p(\mathbf{x}, y) をモデル化し、識別モデルは入力からラベルへの条件付き分布 p(y∣x)p(y \mid \mathbf{x}) を直接モデル化します。前者は「データがどう生じたか」まで扱い、後者は「この入力をどのクラスに置くか」に計算を集中させます。

生成モデルは、料理の材料と完成品の出方を含むレシピ全体を覚える方法です。識別モデルは、完成品を見て料理名を当てる判定基準だけを覚えます。料理名を当てるだけなら判定基準のほうが軽く、材料の一部から完成品を推測するならレシピ全体が要ります。

なぜ必要か

同じ画像分類でも、設計の出発点は一つではありません。生成モデルなら同時分布を分解して

p(x,y)=p(y)p(x∣y)p(\mathbf{x}, y) = p(y)p(\mathbf{x} \mid y)

と表し、入力に対するクラスの確率を p(y∣x)p(y \mid \mathbf{x}) として計算できます。ここで p(y)p(y) はクラスの事前確率、p(x∣y)p(\mathbf{x} \mid y) はクラスごとのデータ分布です。識別モデルはこの条件付き分布を最初から直接近似するので、画像全体の確率を説明する必要がありません。

この差は、必要な出力で選び分けます。

欲しいもの向く枠組み理由
ラベル予測だけ識別モデル判別境界の学習に目的を絞れる
新しいデータの生成生成モデルp(x)p(\mathbf{x}) や p(x∣y)p(\mathbf{x}\mid y) を扱える
一部が欠けた入力の補完生成モデル観測部分から欠損部分の条件付き分布を求められる
未知・外れ値の検出生成モデルデータの尤度や整合性を評価できる

もちろん実装では、識別モデルに別の再構成器や異常スコアを足すこともあります。ただし、それは p(y∣x)p(y\mid\mathbf{x}) だけを学習した結果として自然に得られる機能ではありません。

仕組み

生成モデルでは、ラベルを周辺化して入力の分布を

p(x)=∑yp(x,y)p(\mathbf{x}) = \sum_y p(\mathbf{x}, y)

と求められます。連続潜在変数 z\mathbf{z} を使うモデルなら、和の代わりに積分を使います。観測された特徴を xobs\mathbf{x}_{\mathrm{obs}}、欠損部分を xmiss\mathbf{x}_{\mathrm{miss}} とすると、欠損補完で必要なのは

p(xmiss∣xobs)=p(xmiss,xobs)p(xobs)p(\mathbf{x}_{\mathrm{miss}} \mid \mathbf{x}_{\mathrm{obs}}) = \frac{p(\mathbf{x}_{\mathrm{miss}}, \mathbf{x}_{\mathrm{obs}})}{p(\mathbf{x}_{\mathrm{obs}})}

です。分母は観測部分に合う全候補の確率を正規化する項です。このように、生成モデルは分類以外の問いにも同じ分布から答えを作れます。

一方、識別モデルはパラメータ θ\theta で pθ(y∣x)p_\theta(y\mid\mathbf{x}) を表し、教師データに対する条件付き対数尤度

L(θ)=∑i=1Nlog⁡pθ(yi∣xi)\mathcal{L}(\theta) = \sum_{i=1}^{N} \log p_\theta(y_i \mid \mathbf{x}_i)

を最大化する形が基本です。NN は訓練例数、(xi,yi)(\mathbf{x}_i,y_i) は ii 番目の入力とラベルです。不要な入力分布まで合わせないため、分類境界に利用できるラベル情報へ容量を使いやすい反面、入力そのものの確率はこの目的からは得られません。

観点生成モデル識別モデル
学習対象p(x,y)p(\mathbf{x},y) または p(x)p(\mathbf{x})p(y∣x)p(y\mid\mathbf{x})
分類ベイズ則で導出直接予測
生成・補完分布から可能目的に含まれない
分類の効率分布全体の学習が必要境界に集中しやすい

代表例を位置づけると、VAE は潜在変数を通じて尤度を近似する生成枠組み、GAN は生成器と識別器の対立でデータ生成を学ぶ枠組み、拡散モデルはノイズ除去過程を学ぶ生成枠組みです。これらは同じ分類器の別名ではなく、「データを生成する分布をどう表すか」の異なる実装です。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
2つの確率モデルを対応させる生成は p(x,y)p(\mathbf{x},y)、識別は p(y∣x)p(y\mid\mathbf{x})生成モデルも分類できるから識別モデルと同じ、とする
分類問題での選択分類だけなら識別モデルは目的を絞れて効率的識別モデルは必ず精度が高い、と一般化する
欠損値補完の可否生成モデルは観測部分から欠損部分の分布を計算できる条件付き確率を直接学習する識別モデルだけで補完できるとする
異常検知の根拠正常データの尤度など、入力分布を評価するクラス確率が低いことをそのまま異常度とみなす
同じ分類を2通りで解く生成側は p(y)p(x∣y)p(y)p(\mathbf{x}\mid y) からベイズ則、識別側は p(y∣x)p(y\mid\mathbf{x}) を直接学習生成モデルは分類に使えない、とする

実装で確かめる

二値の1次元データについて、生成側はクラスごとのガウス分布から尤度を作り、識別側はロジスティック関数を直接計算します。どちらも分類確率を返しますが、生成側には入力の尤度も残ります。

import numpy as np

x = np.array([-2.0, -1.0, 0.0, 1.0, 2.0, 3.0])
y = np.array([0, 0, 0, 1, 1, 1])
prior = np.array([(y == 0).mean(), (y == 1).mean()])
mu = np.array([x[y == k].mean() for k in (0, 1)])
var = np.array([((x[y == k] - mu[k]) ** 2).mean() for k in (0, 1)])
def log_normal(z, m, v):
    return -0.5 * (np.log(2 * np.pi * v) + (z - m) ** 2 / v)
log_joint = np.array([np.log(prior[k]) + log_normal(0.5, mu[k], var[k]) for k in (0, 1)])
generative_prob = np.exp(log_joint - np.logaddexp.reduce(log_joint))
discriminative_prob = 1 / (1 + np.exp(-(2.0 * 0.5)))
assert 0 < generative_prob[1] < 1 and 0 < discriminative_prob < 1
print(generative_prob[1], discriminative_prob)

生成側はクラス確率の計算途中に、入力 x=0.5x=0.5 が各クラスの分布にどれだけ適合するかを使っています。識別側は重み 2.02.0 と切片を含まない判定関数を直接評価しているだけです。実際のニューラルネットでは、どちらを損失関数と出力設計の中心に置くかが分岐点になります。

取り違えやすいもの

用語切り分け
分類器yy を当てる機能の総称。生成モデルでも識別モデルでも作れます
識別器GAN では生成データと実データを見分けるネットワークを指す。識別モデル全般と同義ではありません
自己符号化器入力を復元する構造。復元だけでは、明示的な確率モデルとは限りません
条件付き生成モデルp(x∣y)p(\mathbf{x}\mid y) や p(x∣c)p(\mathbf{x}\mid c) を学習する生成モデル。条件を受けるので識別モデル、という意味ではありません
異常検知生成モデルの尤度を使えるが、尤度が低いことと意味的な異常が一致するとは限りません

想起チェック

生成モデルと識別モデルが直接モデル化する確率は何か

生成モデルは p(x,y)p(\mathbf{x},y)、識別モデルは p(y∣x)p(y\mid\mathbf{x}) です。

分類だけなら識別モデルが選ばれやすい理由は何か

入力分布全体を説明せず、条件付き分布または判定境界の学習に目的を絞れるためです。

生成モデルで欠損補完ができるのはなぜか

同時分布から p(xmiss∣xobs)p(\mathbf{x}_{\mathrm{miss}}\mid\mathbf{x}_{\mathrm{obs}}) を計算し、観測部分に整合する欠損部分の分布を得られるためです。

同じ分類問題を生成的にも識別的にも解くときの違いは何か

生成側は p(y)p(x∣y)p(y)p(\mathbf{x}\mid y) を学習してベイズ則で分類し、識別側は p(y∣x)p(y\mid\mathbf{x}) を直接学習します。

出典