作者janus7799 (Janus逍遥)
看板DataScience
标题Re: [问题] GAN 实作以及loss function的问题
时间Mon Sep 28 23:37:49 2020
※ 引述《eggy1018 (罗密欧与猪过夜)》之铭言:
: 各位Data Science 版的大大们好,最近在深入研究GAN时,对於他的loss function的
了
: 解以及实作上仍存有疑惑。
: 问题点
: 最初开始推导的loss function 如下图
: https://i.imgur.com/cafOjej.jpg
: 意思是G, D min max这个function吧?换句话说是同个loss funcion?
: 可是....
: 在实作上G, D的loss function却不太一样
: Generator loss function
: https://i.imgur.com/tNVfz6s.jpg
: Discriminator loss function
: https://i.imgur.com/4pzT6Hh.jpg
: 在自己以前学习的认知中,D要max上图的Lisa function, G要min之,,所以我以为可
能
: 是同个loss function但是一个是正的一个是负的,然而实作上的方式却跟数学意义上
不
: 太一样...
: 希望各位版友能给我一点意见,真的卡了很久,谢谢大家!
刚好对GAN有些许了解,在这边分享一下个人看法。
不常在PTT发文,希望排版不会太难看。
首先,GAN的发展非常快速,以下皆基於原始的GAN(Goodfellow et al. in NIPS 2014)讨
论。
先回答原Po的问题:为什麽原Po贴的程式码(应该是PyTorch-GAN)中,generator与discri
minator实作是这样写?
参考下图GAN的objective function V,以gradient decent来说,一般GAN实作的loss fu
nction确实是只差一个负号:discriminator为-V,generator为V。至於程式码上为什麽
好像不只是差一个负号是因为V的其中一部分generator根本不需要考虑,也就是真实的观
测资料部分,就算写进loss function,对generator来说也是属於常数,偏微分後会消去
,因此在写code时一般直接省略。
https://i.imgur.com/EtDkvLi.jpg
在原Po贴的程式码中,先不管那个auxiliary_loss,discriminator在adversarial_loss
计算了两次:一次计算真实资料与正类标签(code中的valid)的binary cross entropy (
以下简称BCE),一次计算生成资料与副类标签(code中的fake)的BCE。而generator只计算
生成资料与「正类标签」的BCE。
以实作上来说,generator与discriminator的loss好像是差一个负号的事情。但以理论上
两者的目标却不是仅仅是差一个负号这麽单纯。要说到generator与discriminator的目标
,那就不得不谈一下GAN到底解决的什麽问题。
回顾一下所谓的generative model。在机率统计理论中, 生成模型(generative model)是
指能够随机生成观测数据的模型。所以训练一个generative model其实就是希望模型输出
与观测数据的分布越接近越好,或者说minimize这两者之间的divergence。
如果说我们的generative model是一个简单的model,比如说Gaussian mixture model,
那麽算个divergence,比如说JS divergence,就是一件不难的事情。但如果今天generat
ive model是一个neural network,那就有点困难了。
而这就是GAN厉害的地方,GAN很聪明地使用到了经过训练的分类器其实可以一定程度第代
表资料的divergence这件事,用实质为分类器的discriminator估divergence,并以此训
练generator。
所以实际上也不能说discriminator在minimize BCE而generator在maximize BCE,而是di
scriminator在minimize BCE,而generator在maximize discriminator可以找到的最小BC
E。
https://i.imgur.com/9IpLHvy.jpg
为了尽量逼近这个目标,GAN一般采用交互训练的方法,先训练discriminator数次,在训
练generator一次,如此重复直到训练结束。
https://i.imgur.com/YCtPw4T.jpg
附带一提,Goodfellow在2014年的论文中discriminator与generator的loss也不只是差一
个负号,不过其实照他的方法或是直接加负号都是可以训练的。
---
以上抛砖引玉提供一点粗浅见解。
希望有帮助,也欢迎一起讨论。
关於一些GAN的细节可以参考这篇文章
https://tinyurl.com/y4l2q5vf
或是李宏毅老师的这段投影片
https://youtu.be/DMA4MrNieWo
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.194.88.184 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1601307471.A.C6F.html
※ 编辑: janus7799 (123.194.88.184 台湾), 09/29/2020 01:20:57
1F:推 jasoncph: 推 09/29 23:21
2F:推 wtchen: discriminator的目标是减少分类损失(不是真阳就是真阴) 10/01 02:32
3F:→ wtchen: 但generator只希望增加伪阳,让discriminator接受 10/01 02:33
4F:→ wtchen: 自己生成的假样本,至於discriminator对於真样本的监别度 10/01 02:34
5F:→ wtchen: generator是不在乎的 10/01 02:34
6F:→ hippo130: 推 10/05 00:38
7F:推 jason2718: 真详细,推推 10/11 19:43