GAN的loss函數(shù)的解讀

GAN的目標(biāo)是
\min_{G}\max_{D} LOSS
這里的LOSS為
E_{x_-{p_{data}}}(log(D(x))+E_{x_-{p_{z}}}(log(1-D(G(z)))
先訓(xùn)練D,再訓(xùn)練G,
以D為 變量使得loss最大化,同時也是對\theta_G優(yōu)化
但是只能求解最小,因此要變成\min_D-LOSS
在代碼里表現(xiàn)為 cross_entropy,其公式最前面有負(fù)號,如下
H(p,q)=-\sum p(x)log(q(x))

def discriminator_loss(disc_fake, disc_real):
    #輸入是真假圖片的辨別結(jié)果,fake是把假圖片看成什么,real是把真圖片看成什么,
    #是把假圖片看成假,真圖片看成真的能力,與實(shí)際誤差越小越好
    #平均loss
    disc_loss_real = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
        logits=disc_real, labels=tf.ones([batch_size], dtype=tf.int32)))
    disc_loss_fake = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
        logits=disc_fake, labels=tf.zeros([batch_size], dtype=tf.int32)))
    #結(jié)果是用來對discr求解
    return disc_loss_real + disc_loss_fake

然后再對G進(jìn)行優(yōu)化,即是對\theta_G優(yōu)化
目標(biāo)是使得D(z)越大越好,log(D)與D單調(diào)性相同,也就是使得log(D)越大越好,代碼中要求最小,也就是-log(D)
loss_g = -log(D)=-(1*log(D)+0*log(1-D)=H(L|D)
也就是生成讓D判別為真的能力,也就是D與1的交叉熵
在代碼里表現(xiàn)為

def generator_loss(reconstructed_image):
    #輸入是假圖片是真假圖片的 二維值,未經(jīng)過cross entropy

    #識別出重構(gòu)圖片的能力,輸入是D 對重構(gòu)圖片的辨別結(jié)果,D的目標(biāo)是讓這個結(jié)果越大越好
    #為了迷惑判別器,我們給他1,gen_loss越大越好,但是opti都是求最小化
    gen_loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(
        logits=reconstructed_image, labels=tf.ones([batch_size], dtype=tf.int32)))
    return gen_loss

參考1:GAN的Loss的比較研究(1)——傳統(tǒng)GAN的Loss的理解1

參考2:若干常見GAN中的Loss及部分知識

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容