Help us understand the problem. What is going on with this article?

GANを学びたいけれど、価値関数の数式に困惑している人へ

More than 1 year has passed since last update.

GANの価値関数(目的関数)

image.png

本記事ではGANを学び始めたら見かけてしまう、一見複雑そうな上記の式を解説していく

GANのモデル

まずはGANのモデルと学習の流れを軽く見てみる
image.png

順伝播(Discriminatorに判定させてみる)

・Generatorがノイズ(例えば100次元のベクトル)から画像っぽいものを生成する
もちろん最初はでたらめな画像しか生成できない

・Discriminatorには本物の画像、もしくはGeneratorが生成した画像のどちらかをランダムに入れる

・Discriminatorがスコアを出すときはシグモイド関数を使うため、
本物だと思ったら1を出力、Generatorが生成した画像(偽物)だと思ったら0を出力する

正確にいうと「Discriminatorに来た画像が本物である確率」

逆伝播(Discriminatorの重みを更新するとき)

Discriminatorの理想は本物が来たら1を出力して、偽物が来たら0を出力

・ここはシンプルに画像分類をしたときのCNNの重みの更新と同じ
GANだからと言って新しい何かがあるわけではない
正しく判定(本物が来たら1を出力して、偽物が来たら0を出力)できるように重みを更新する

逆伝播(Generatorの重みを更新するとき)

Generatorの理想はDiscriminatorが間違って判定(偽物の画像に対して1を出力)すること

・これは実装上のポイントにもなるが
Generatorの重みを更新するときは、誤差がDiscriminatorを通ってくるため
Discriminatorの重みの更新を止めなければならない

もしDiscriminatorの重みの更新を止めなかったら、Discriminatorの重みが偽物に対して1を出力するようになってしまう(今はGeneratorの理想に近づくような更新がされているため)

本題へ

GANの価値関数(再掲)
image.png

右辺について

$E$:期待値
$x$~$p_{data}(x) $:本物の画像がDiscriminatorに来たとき
$D(x)$:Discriminatorに本物の画像が来たときのスコア

$x$~$p_z(x)$:Generatorが生成した画像(偽物)がDiscriminatorに来たとき
$G(z)$:Generatorがノイズzから生成した偽物画像
$D(G(z))$:Discriminatorに(Generatorが生成した)偽物の画像が来たときのスコア

logのグラフ

log(x)のxの値が大きいほどlog(x)は大きくなる
image.png

Discriminatorを評価するとき

・Discriminatorの理想は本物が来たら1、偽物が来たら0を出力すること

右辺第一項

image.png
上記の式を言語化すると、本物の画像がDiscriminatorに来たときのDiscriminatorのスコアである

本物の画像のため、シグモイド関数の出力は0~1の内、を出力してほしい

理想的な出力である$D(x)=1$を出力できれば、結果的に上記の式(右辺第一項)を最大化できる

右辺第二項

image.png
上記の式を言語化すると
Generatorが生成した画像(偽物)がDiscriminatorに来たときのDiscriminatorのスコアである

偽物の画像のため、シグモイド関数の出力は0~1の内、を出力してほしい

理想的な出力である$D(G(z)))=0$を出力できれば、$log(1-0)$になり
結果的に上記の式(右辺第二項)を最大化できる

Discriminatorまとめ

上述のようにDiscriminatorの理想通り(本物の画像には1を出力、偽物の画像には0を出力)になれば、
第一項と第二項はどちらも最大になる(大きい値と大きい値を足し合わせているので右辺トータルも最大)

このことを表しているのが、価値関数の左辺にある$max_D$である

Generatorを評価するとき

・Generatorの理想はDiscriminatorが間違って判定(偽物の画像に対して1を出力)すること

・右辺第一項はGeneratorに関係ないので無視する

右辺第一項

image.png
本物の画像がDiscriminatorに来たときのDiscriminatorのスコアを表している

これはGeneratorとは関係がないのでGeneratorを評価するときは無視する

右辺第二項

image.png
Generatorが生成した画像(偽物)がDiscriminatorに来たときのDiscriminatorのスコアを表している

GeneratorはDiscriminatorが間違ってほしい
Generatorにとっては、偽物画像に対してDiscriminatorが1を出力するのが理想

理想的な出力である$D(G(z))=1$を出力できれば、$log(1-1)$になり
結果的に右辺第二項を最小化できる

Generatorまとめ

上述のようにGeneratorの理想通り(Generatorの生成した画像に対してDiscriminatorが1を出力)になれば、第二項は最小になる(第一項は無視、第二項最小化で右辺トータルは最小)

このことを表しているのが、価値関数の左辺にある$min_G$である

全体まとめ

文字が多くて圧倒されてしまいがちな式だが、
「GeneratorとDiscriminatorのそれぞれの理想の状況ってどうなんだっけ?」と落ち着いて考えていけば、「そんな複雑なことを表している式ではないんだな」ということが理解できると思う

Phoeboooo
何となく思ったことを公開中。 24/7暇人なので、お気軽にご連絡ください。 JDLA Deep Learning for /ENGINEER 2019 #1/ GENERAL 2019 #1/ TOEIC965
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした