本文对应李沐老师在哔哩哔哩上的读论文栏目,做一些小记录。
GAN
framework,一般是自己的工作量相当大才会自称提出了一种框架,反之不会这么写。
GAN中的G是一个MLP,输入也是一个noice,采样自$\mathcal N(0, I)$
GAN和DM的一个区别是:
- GAN通过一个MLP,来模拟数据集构成的分布,不需要计算均值、方差(不需要得到这个分布)
- DM则是通过一个网络,来拟合数据集的分布,从而让最终模型的输出是一个分布,输出的值就是这个分布的均值。
若样本来自真实世界,则标记为1,若来生成器,则标记为0。G的目标是:
$$
\min (\log (1-D(G(z))))
$$
假设D判断G生成的样本是真实的,那么极端情况下,$D(G(z))=1$,$\log$就是$-\infty$,假设D判断G生成的样本是fake的话,那么$D(G(z))=0$,那么$\log$就为0。
整个的loss如下:
$$
\min \max V(D,G)=E_{x\sim p_{data}}[\log D(x)]+E_{z\sim p_z(z)}[\log(1-D(G(z)))]
$$
这两项是相悖的:D的目标是最大化第一项,而G的目标则是最小化第二项。最终会达到均衡。
GAN的演算法是先训练一个比较好的D,然后再训练G。在代码上的体现则是:先对D训练k步,然后再去训练G。