深層学習

条件付きGAN

生成器と識別器の両方に条件を入力し、条件に合ったデータを生成・判定するGANです。

  • B|標準
  • 深層学習

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

ひとことで言うと

条件付きGAN(cGAN)は、乱数だけでなくクラスラベルや別モダリティの情報 yy も使って生成するGANです。ポイントは生成器だけを条件付きにしないことです。生成器と識別器の双方へ yy を渡し、識別器は「本物か」だけでなく「条件 yy に合った本物か」を判定します。

注文票 yy が付いた製造ラインです。生成器は注文票を見て製品 xx を作り、識別器は製品だけでなく注文票との組合せを検品します。数字の画像を作るなら、「本物らしい画像」だけでなく「7という注文に合う画像」であることまで通す必要があります。

なぜ必要か

通常のGANでは、生成されたサンプルがデータ分布らしくても、どのクラスや属性を表すかを生成時に指定できません。条件を入れると、生成時に狙う分布を選べます。原論文ではMNISTのクラスラベルを条件にした生成と、画像特徴を条件にタグベクトルを生成するマルチモーダルな例が示されています。

ここで識別器に条件を渡さない設計は不十分です。生成器がラベルを無視しても、識別器が画像単体の本物らしさしか見なければ、その誤りを検出できないからです。条件を使った判定まで含めて、学習する対象が変わります。

設計生成器の入力識別器が判定するもの
通常のGAN乱数 zz画像 xx の本物らしさ
条件付きGAN乱数 zz と条件 yy画像 xx と条件 yy の整合性

仕組み

zz を事前分布から得る乱数、yy を条件、GG を生成器、DD を識別器とします。条件付き生成器は G(z∣y)G(z\mid y) を出力し、識別器は画像 xx と条件 yy の組に対する本物確率 D(x∣y)D(x\mid y) を返します。目的関数は次です。

min⁡Gmax⁡DV(D,G)=Ex∼pdata(x)[log⁡D(x∣y)]+Ez∼pz(z)[log⁡(1−D(G(z∣y)))]\min_G \max_D V(D,G)=\mathbb{E}_{x\sim p_{\mathrm{data}}(x)}[\log D(x\mid y)] + \mathbb{E}_{z\sim p_z(z)}[\log(1-D(G(z\mid y)))]

pdatap_{\mathrm{data}} は実データの分布、pzp_z は乱数の分布、E\mathbb{E} はその分布上の平均です。生成器側では、同じ yy に対しても zz を変えることで複数の候補を作れます。一方、識別器の入力が xx だけなら、条件不一致を負例にできず、条件付けの効果が判定に反映されません。

実装では zz と yy を生成器内の表現で結合し、識別器では xx と yy を入力表現にして結合します。結合方法はモデルの設計事項ですが、「条件を生成器と識別器の両方に入れる」という接続点は変わりません。画像の一部や別モダリティを条件にする発想へも拡張でき、画像対画像のpix2pixのような構成を読むときも、この組合せを確認すると迷いません。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
条件付きGANの入力GG と DD の両方に条件 yy を与える生成器だけにラベルを与える
識別器の役割D(x∣y)D(x\mid y) は条件に合う本物らしさを判定するD(x)D(x) と同じく画像単体だけを見る
目的関数の変更生成・識別の項を条件付き確率にする条件を損失の外に置く
応用の読み分けクラス指定、別モダリティ、画像の一部などを条件にできる条件を入れれば必ず一意の画像になると考える

実装で確かめる

条件を結合しない識別器と、結合する識別器で同じ画像のスコアが変わる最小例です。ここでは学習はせず、条件が判定入力に存在することだけを確認します。

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])

条件なしのスコアは画像だけで決まり、条件付きのスコアは同じ画像でも yy によって変わります。実際の識別器ではこのスコアを確率へ変換しますが、条件を結合する位置が本質です。

取り違えやすいもの

用語条件付きGANとの切り分け
通常のGANG(z)G(z) と D(x)D(x) で、生成時にクラスなどを直接指定する入力がない
条件付きGANG(z∣y)G(z\mid y) と D(x∣y)D(x\mid y)。条件整合性を生成と判定の両方へ入れる
条件付き識別器判定だけに yy を使う設計。cGANの要点である生成器への条件入力を含むとは限らない
画像対画像モデル入力画像を条件として出力画像を生成する応用形。条件の渡し方がcGANの考え方とつながる

想起チェック

条件付きGANで、条件はどのモデルに与えるか

生成器と識別器の両方です。生成器は G(z∣y)G(z\mid y) を作り、識別器は D(x∣y)D(x\mid y) として画像と条件の整合性を判定します。

識別器が画像単体だけを見た場合に起きることは

条件に合わない画像でも本物らしければ通るため、生成器が条件を無視しても識別器から十分な反作用を受けません。

条件の例を二つ挙げると

MNISTのクラスラベル、画像の一部や別モダリティの情報です。条件は必ずカテゴリラベルに限りません。

出典