ひとことで言うと
条件付きGAN(cGAN)は、乱数だけでなくクラスラベルや別モダリティの情報 も使って生成するGANです。ポイントは生成器だけを条件付きにしないことです。生成器と識別器の双方へ を渡し、識別器は「本物か」だけでなく「条件 に合った本物か」を判定します。
注文票 が付いた製造ラインです。生成器は注文票を見て製品 を作り、識別器は製品だけでなく注文票との組合せを検品します。数字の画像を作るなら、「本物らしい画像」だけでなく「7という注文に合う画像」であることまで通す必要があります。
なぜ必要か
通常のGANでは、生成されたサンプルがデータ分布らしくても、どのクラスや属性を表すかを生成時に指定できません。条件を入れると、生成時に狙う分布を選べます。原論文ではMNISTのクラスラベルを条件にした生成と、画像特徴を条件にタグベクトルを生成するマルチモーダルな例が示されています。
ここで識別器に条件を渡さない設計は不十分です。生成器がラベルを無視しても、識別器が画像単体の本物らしさしか見なければ、その誤りを検出できないからです。条件を使った判定まで含めて、学習する対象が変わります。
| 設計 | 生成器の入力 | 識別器が判定するもの |
|---|---|---|
| 通常のGAN | 乱数 | 画像 の本物らしさ |
| 条件付きGAN | 乱数 と条件 | 画像 と条件 の整合性 |
仕組み
を事前分布から得る乱数、 を条件、 を生成器、 を識別器とします。条件付き生成器は を出力し、識別器は画像 と条件 の組に対する本物確率 を返します。目的関数は次です。
は実データの分布、 は乱数の分布、 はその分布上の平均です。生成器側では、同じ に対しても を変えることで複数の候補を作れます。一方、識別器の入力が だけなら、条件不一致を負例にできず、条件付けの効果が判定に反映されません。
実装では と を生成器内の表現で結合し、識別器では と を入力表現にして結合します。結合方法はモデルの設計事項ですが、「条件を生成器と識別器の両方に入れる」という接続点は変わりません。画像の一部や別モダリティを条件にする発想へも拡張でき、画像対画像のpix2pixのような構成を読むときも、この組合せを確認すると迷いません。
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけ |
|---|---|---|
| 条件付きGANの入力 | と の両方に条件 を与える | 生成器だけにラベルを与える |
| 識別器の役割 | は条件に合う本物らしさを判定する | と同じく画像単体だけを見る |
| 目的関数の変更 | 生成・識別の項を条件付き確率にする | 条件を損失の外に置く |
| 応用の読み分け | クラス指定、別モダリティ、画像の一部などを条件にできる | 条件を入れれば必ず一意の画像になると考える |
実装で確かめる
条件を結合しない識別器と、結合する識別器で同じ画像のスコアが変わる最小例です。ここでは学習はせず、条件が判定入力に存在することだけを確認します。
import numpy as np
x = np.array([[0.8, 0.2]])
y = np.array([[1.0, 0.0]]) # 条件: クラス0
w_x = np.array([[1.0], [1.0]])
w_y = np.array([[2.0], [-1.0]])
score_without_y = x @ w_x
score_with_y = x @ w_x + y @ w_y
print(score_without_y.ravel()[0], score_with_y.ravel()[0])
条件なしのスコアは画像だけで決まり、条件付きのスコアは同じ画像でも によって変わります。実際の識別器ではこのスコアを確率へ変換しますが、条件を結合する位置が本質です。
取り違えやすいもの
| 用語 | 条件付きGANとの切り分け |
|---|---|
| 通常のGAN | と で、生成時にクラスなどを直接指定する入力がない |
| 条件付きGAN | と 。条件整合性を生成と判定の両方へ入れる |
| 条件付き識別器 | 判定だけに を使う設計。cGANの要点である生成器への条件入力を含むとは限らない |
| 画像対画像モデル | 入力画像を条件として出力画像を生成する応用形。条件の渡し方がcGANの考え方とつながる |
想起チェック
条件付きGANで、条件はどのモデルに与えるか
生成器と識別器の両方です。生成器は を作り、識別器は として画像と条件の整合性を判定します。
識別器が画像単体だけを見た場合に起きることは
条件に合わない画像でも本物らしければ通るため、生成器が条件を無視しても識別器から十分な反作用を受けません。
条件の例を二つ挙げると
MNISTのクラスラベル、画像の一部や別モダリティの情報です。条件は必ずカテゴリラベルに限りません。