敵対的生成ネットワーク (GAN) とその学習プロセス
敵対的生成ネットワーク (Generative Adversarial Network, GAN) は、教師なし学習の一種であり、主に新しいデータを生成するために用いられる深層学習モデルのフレームワークです。Ian Goodfellowらによって2014年に提案されました。GANの最大の特徴は、生成器 (Generator, G) と 識別器 (Discriminator, D) という2つのニューラルネットワークが互いに競い合いながら学習を進める点にあります。
生成器 (Generator, G) の役割
生成器 G は、ランダムなノイズベクトル \(\mathbf{z}\) を入力として受け取り、本物のデータに似せた偽のデータ \(G(\mathbf{z})\) を出力します。生成器の目標は、識別器 D を騙せるほど本物に近いデータを生成することです。
識別器 (Discriminator, D) の役割
識別器 D は、入力されたデータが本物のデータセット \(p_{data}(x)\) から来たものなのか、それとも生成器 G が作った偽物 \(G(\mathbf{z})\) なのかを判定する二値分類器です。識別器の目標は、本物のデータと偽物のデータを可能な限り正確に見分けることです。入力 \(x\) に対して、それが本物である確率 \(D(x)\) を出力します。
敵対的損失関数 (価値関数 V(D, G))
GANの学習は、以下の価値関数 (Value Function) V(D, G) を用いたミニマックスゲーム (Minimax Game) として定式化されます。
$ \min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))] $
この式の意味を分解してみましょう。
- \(\mathbb{E}_{x \sim p_{data}(x)}[\log D(x)]\): 本物のデータ \(x\) に対する識別器の出力 \(D(x)\) の対数。識別器はこれが1に近づくように(本物を本物と識別するように)学習します。
- \(\mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]\): 生成された偽データ \(G(z)\) に対する識別器の出力 \(D(G(z))\) を用い、\(1 - D(G(z))\) の対数を計算したもの。識別器は \(D(G(z))\) が0に近づくように(偽物を偽物と識別するように)学習します。
識別器 D の目的: D は、上記の2つの項の合計、すなわち価値関数 \(V(D, G)\) 全体を最大化 (\(\max_D\)) しようと学習します。これにより、本物と偽物の識別能力を高めます。
生成器 G の目的: G は、識別器 D を騙すことを目的とします。つまり、自身が生成したデータ \(G(z)\) を識別器 D に本物と誤判定させようとします (\(D(G(z))\) を1に近づける)。これは、価値関数 \(V(D, G)\) の第二項 \(\log(1 - D(G(z)))\) を最小化することに相当します。結果として、生成器 G は価値関数 \(V(D, G)\) 全体を最小化 (\(\min_G\)) するように学習します。
したがって、識別器 D は価値関数を最大化し、生成器 G は価値関数を最小化しようとするため、選択肢 B が正しい組み合わせとなります。
GAN学習のポイントと課題 (再掲)
- 交互最適化: D と G の最適化は交互に行われることが多いです。
- 非飽和損失: 実際には G の学習には \(\min_G \mathbb{E}_{z \sim p_z(z)}[-\log D(G(z))]\) が使われることが多いです(目的は同じく \(D(G(z))\\) を最大化すること)。
- ナッシュ均衡: 理論的な収束点では \(p_g = p_{data}\) かつ \(D(x) = 1/2\) となります。
- 学習の不安定性: モード崩壊などの課題があります。