再换句话说,它们俩一个是激进派一个是保守派。而因为我们数据是有限的,在复杂的社会环境下,保守派能确保至少算出来的那一部分是靠谱的,而激进派却容易犯错。 先不管 Q 和 P 谁前谁后,我们都把我们 G 的目标函数改造成解最大似然的形式:
此时对 J(G) 求导,得到的就是一个最大似然表达形式。(为什么要求导?请自行搜索 SGD(随机梯度下降)) 以上我们讲到的三种生成模型目标函数的方法,效果比较如下:
其中,还是 Maximal Likelihood 最像香港记者,跑得最快。 GAN 不光可以用来生成(复刻)样本,还可以被转型成强化学习模型(Reinforcement Learning)
关于这方面,上海交大的 SeqGAN [Yu et al. 2016] 也是一片很有趣的论文,有兴趣的同学可以阅读。 以上便是这篇教程的前半部分内容,主要是讲解了生成模型和 GAN 的一些理论知识。而后半部分则从实际运用中的技巧开始,延伸到了这个门类发展的前沿,并探索了 GAN 与其它算法结合的可能。 Tips and Tricks 实战技巧 第一个技巧是把数据标签给 GAN
虽然 GAN 是一种无监督算法。但是,如果要想提高训练学习的效果,有点标签还是会有很大的帮助的。也就是说,学习一个条件概率 p(y|x) 远比一个单独的 p(x) 容易得多。 实际运用中,我们可以只需要一部分有标签数据(如果有的话)就能大幅提升 GAN 的训练效果;我们称之为半监督(semi-supervising)。当然,要注意的是,如果我们用了半监督学习,我们的数据就有三类了:真实无标签数据、有标签数据和由噪音数据生成的数据。它们互相之间是不能混的。同时,我们的目标函数也成了监督方法和无监督方法的结合。 跟其它机器学习算法一样,如果我们给了 GAN 一些有标签的数据,这些标签最好是平滑(smooth)过的,也就是说把要么是 0 要么是 1 的离散标签变成更加平滑的 0.1 和 0.9 等等。
然而,这样又会造成一些数学问题。因为,如果我们的真实数据被标注为 0.9(alpha),假数据被标注为 0.1(beta),那么我们最优的判别函数就会被写成如下图所示的样式。大家发现问题了吗?这个式子的分子不纯洁了,混进了以 beta 为系数的假数据分布。所以,对于假数据,我们还是建议保留标签为 0。一个平滑,另一个不平滑,也就称为 one-sided label smoothing(单边标签平滑)。
标签平滑化有很多好处,特别对于 GAN 而言,这能让判别函数不会给出太大的梯度信号(gradient signal),也能防止算法走向极端样本的陷阱。
第二个技巧是 Batch Norm
Batch Norm 的意思就是说,取「一批」数据,把它们给规范化(normalise)一下(减平均值,除以标准差)。它的作用就不用说了:让数据更集中,不用担心太大或者太小的数据,也让学习效率更高。 (责任编辑:本港台直播) |