DC-GAN
本期基于GAN实现图片生成,笔者本来计划在NLP中使用GAN实现文本生成,但是由于NLP中G生成word是不可导的,所以最后改为使用VAE实现,点我具体查看
GAN开山之作:https://arxiv.org/abs/1406.2661
据说是Goodfellow和朋友打赌时产生的灵感,论文第四章Theoretical Results值得反复揣摩。模型有两个,Generator(生成器,下称G)和Discriminator(判别器,下称D),数据来源有两个,真实样本和噪音样本,笔者本期使用高斯分布代替随机向生成噪音样本。
优化函数:SGD+momentum,迭代使用minibatch算法,minibatch中分别更新k次D,更新1次G。更新D时,分别对真实样本和G生成样本采样,喂入模型,使D的目标函数最大化;更新G时,仅对G生成样本采样,喂入模型,使G的目标函数最小化。
D目标函数构成
假设G固定,公式1可变化为
可见公式2由两部分组成: $alog(y) + blog(1-y)$ 其中 $y = D(x)$, $a = p_{data}$, $b = p_g$
如图: $log(x)$ 在(0, 1)上单调递增
如图: log(1-x) 在(0, 1)上单调递减
求公式1中最大D可转化为求其导数
求公式1在D最大是,最小G
由于 $D_{kl}$ 非负,所以当且仅当 $p_{data} = p_{g}$ 时等式最小
代码实现
本期使用CNN充当G和D
生成模型是一个反向CNN
判别模型,使用LeakyReLU
噪音样本服从高斯分布
G和D的参数更新
结果
epoch 2
epoch 40