見出し画像

GANの損失関数

はじめに

前回は、GANの考え方について述べました。今回は、GANの数式について触れようと思います。本記事は、しくみがわかる深層学習(2018, 朝倉書店)」を参考にしています。

損失関数の導出

早速見ていきましょう。まず、識別器に与えられるデータが本物か偽物かを表す変数を$${r}$$とおきます。

「実際に本物であること」は$${r=1}$$
「実際に偽物であること」は$${r=0}$$

と表します。

次に、本物か偽物かの判定結果を$${y}$$で表します。つまり、

「本物と判定すること」は$${y=1}$$
「偽物と判定すること」は$${y=0}$$

となります。

識別器の学習では、$${r}$$を条件とする$${y}$$の確率分布$${q}$$が以下のようになるように行います。

$${q(y=1|r=1)=1,   q(y=1|r=0)=0}$$
$${q(y=0|r=1)=0,   q(y=0|r=0)=1}$$

上の式は理想です。実際に識別器に与えるデータを$${d}$$とすると、確率分布$${q(y|r, d)}$$は以下のようになります。

$${q(y=1|r=1, d)=D(x),   q(y=1|r=0, d)=D(G(z))}$$
$${q(y=0|r=1, d)=1-D(x),   q(y=0|r=0, d)=1-D(G(z))}$$

ここで、クロスエントロピーの登場です。$${r}$$と$${d}$$で条件づけられたクロスエントロピーを計算します。

$${r=1}$$のときを考えます。求める値を$${ H(q, p \mid r=1, {d})}$$とします。

$${y=1}$$のときは$${D(x)}$$
$${y=0}$$のときは$${1-D(x)}$$

でしたね。したがって、求める値は、

$${ H(q, p \mid r=1, {d})}$$
$${=q(y=1|r=1, d)×-\log(D(x)) + q(y=0|r=1, d)×-\log(1-D(x))}$$
$${=1×-\log(D(x))+0×-\log(1-D(x))}$$
$${=-\log(D(x))}$$・・・(1)

となります。

$${r=0}$$のときも同様に考えます。

$${ H(q, p \mid r=0, {d})}$$
$${=q(y=1|r=0, d)×-\log(D(G(z))) + q(y=0|r=0, d)×-\log(1-D(G(z)))}$$
$${=0×-\log(D(G(z)))+1×-\log(1-D(G(z)))}$$
$${=-\log(1-D(G(z)))}$$ ・・・(2)

識別器の学習とは、この二つのクロスエントロピーの和を最小にすることです。一方、生成器の学習とは、(2)の符号を反転させたものを最小にすることです。
この二つのことを同時に表したのがおなじみGANの価値関数です。識別器は符号が反転され、最大化問題になっています。

$${\underset{G}{min}  \underset{D}{max}  V(D, G)=\mathbb{E}_{x \sim p{\text {data }}(x)}[\log D(x)]+\mathbb{E}_{z \sim p{z}(z)}[\log (1-D(G(z)))]}$$

おわりに

今回は、GANの損失関数の導出を行いました。GANの数式には確率論や微分積分への理解が必要になります。私もまだまだ理解できていない部分も多いため、もし間違っていた場合はご指摘下さい。

いいなと思ったら応援しよう!