根据网络生成培训经验

训练WGAN时,有几个方面可以调整:

?a .调整发电机损耗中GAN损耗的权重。G损耗和Gan损耗在一个尺度上,或者说G损耗比Gan损耗大一个尺度。但一定不能让Gan损耗占优,这样整个网络的权重就会有偏差。

?调整发电机和鉴频器的训练频率比。一般来说,鉴别者比生成者需要更多的训练。比如训练判别器五次,训练生成者(WGAN(WGAN论文就是这么做的)。

?c .调整学习率,不宜过大。一般比Genenrator的速度慢一点。

?d .优化器的选择不能基于动量法,比如亚当和动量。可以使用RMSProp或SGD。

?e .可以改变鉴别器的结构。如果使用WGAN,最后一层鉴频器需要去掉sigmoid。但是用原来的GAN,需要sigmoid,因为它需要在其损失函数中取log,所以值必须是[0,1]。邓伟的批评家模型在这里被用作一个鉴别器。之前推特论文里的鉴别器,即使去掉乙状结肠也不好训练。

?发电机损耗误差曲线趋势。因为发电机的损耗定义为:

G_loss = -tf.reduce_mean(D_fake)

发电机损耗=发电机损耗+λ* G损耗

其中gen_loss是发电机损耗,G_loss是鉴别器损耗,目标是使发电机损耗越来越小。因此,理想的发电机损耗误差曲线应该是一条不断向0下降的抛物线。

?鉴别器损耗误差曲线的趋势。因为鉴别者的损失被定义为:

?D _ loss = TF . reduce _ mean(D _ real)-TF . reduce _ mean(D _ fake)

这是与发电机竞争的损失。目标是让鉴别器不知道哪个是生成器的输出,哪个是真正的标签。所以鉴别仪损失的理想误差曲线应该是最终在0附近震荡,也就是傻傻的,让人摸不着头脑。换句话说,鉴别器有50%的概率你是真的,有50%的概率你是假的。

?h .之前的想法是,即使没有训练鉴别器,它判断图片真假的概率也是50%。d _ loss = TF . reduce _ mean(d _ real)-TF . reduce _ mean(d _ fake)不是已经接近0了吗?

其实不是这样的。如果是wgan,鉴频器的输出是一个从负无穷大到正无穷大的值,所以很难让它对两个不同的输入产生相似的输出。同样,对于gan,鉴频器的输出在[0,1]之间,很难产生两个相似的输出。如果鉴频器的输出是0或者1,那就是上面的情况。所以网络要学会让输出尽可能的相似,就会达到一种愚蠢的状态。