54
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-02-25

#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のそれぞれの理想の状況ってどうなんだっけ?」と落ち着いて考えていけば、「そんな複雑なことを表している式ではないんだな」ということが理解できると思う

54
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?