写在前面:最近看了《GAN实战》,由于本人忘性大,所以仅是笔记而已,方便回忆,如果能帮助大家就更好了。
目录
Frechet Inception Distance(FID)
评估
实际情况中,最大似然估计容易过度泛化,因此生成的样本由于太过于多样化而显得不真实。使用最大似然估计可能会产生现实世界中永远不会出现的样本,例如多个头的狗,或者几十只眼睛的没有身体的长颈鹿。所以应该使用损失函数/评估方法,淘汰“过于泛化”的样本。
Inception Score(IS)
理想评估的要求:
(1)生成的样本既要看起来真实,也要可分辨(看起来逼真,且是数据集中的物品)
(2)不存在类间模崩溃(如,初始的GAN在MNIST数据集中无法生成数字8)
IS被证实它确实与人类对高质量样品构成的直觉有关。
IS过程:
(1)采用真实分布和生成分布之间的Kullback-Leiber(KL)差异
(2)对第一步结果求指数
Frechet Inception Distance(FID)
同常,GAN只能学习每个类别中的一小部分图像。但FID通过提高噪声的鲁棒性并检测类内样本遗漏来改进IS。
FID通过Inception网络运行图像来计算的。在实际应用中,我们比较的是中间表示(特征图/层)而不是最终输出。更具体一点,计算嵌入均值的距离、方差和两个分布(真实分布和生成分布)的协方差。p.s.其实不太明白说的什么?以后有时间去了解一下
训练中的挑战
(1)模式崩溃:在某些模式中(如某些类)在生成样本中没有很好表示出来(例如前面举例的MNIST中的类间模式崩溃,FID也存在类内模式崩溃)
(2)收敛速度慢:
(3)过度泛化
在GAN训练方面,下列技术可用于改善训练过程:
(1)增加网络深度
(2)更该网络设置
- 原始论文提出的最小-最大(Min-Max)设计和停止判则
- 原始论文提出的非饱和(Non-Saturating)设计和停止判则
- 最近改进的——沃瑟斯坦生成对抗网络(Wasserstein GAN)
(3)其它一些训练技巧
- 归一化输入:计算更容易处理,最好使用tanh函数来限制生成器最终输出
- 梯度惩罚
- 多训练鉴别器
- 避免稀疏梯度(如ReLU生成的梯度(负值信息丢失)/ MaxPool生成的梯度(平均池化至少还知道平均值,最大池化得到的信息更少)
- 使用平滑和带噪声的标签
最小-最大GAN
鉴别器的损失函数:
其中表示对x(真实数据分布)或z(潜在空间)的期望。
如果摆脱公式的复杂性,可以改写成
说明鉴别器正尝试最大程度地减少将真实样本误认为伪样本或将伪样本误认为是真实样本的可能性。
生成器损失函数:
使用KL散度和JS散度以及Wasserstein距离来代替最大似然估计。KL散度和JS散度通常被视为GAN最终在试图最小化的东西,两者都是距离指标。
(JS散度是KL散度的对称版,若,则有)
MM-GAN最主要是用来理解GAN的博弈,实际情况下没有任何优势。
非饱和GAN(NS-GAN)
NS-GAN没有让两个损失函数称为彼此竞争对手(相反数)而是使两个损失函数相互独立。
鉴别器损失函数:(与MM-GAN一致)
生成器损失函数:
MM-GAN梯度容易饱和接近0,这样会导致反向传播权重更新为0或很小,从而导致收敛缓慢。
对于NS变体为什么会熟练到纳什均衡,没有很好的理论解释 。即使用NS-GAN训练,也可能不收敛,但要比MM-GAN要好得多。
WGAN(Wassertein GAN)
显著的改进了损失函数,使得损失函数仙子啊可以解释并提供了更清晰的停止标准。
鉴别器的损失函数:
公式中有,它充当鉴别器。鉴别器试图让生成器的处境变的最困难——通过查看共享空间中使用的的不同投影,来最大化生成器必须移动的概率量。p.s.没看明白破折号说的啥?
生成器的损失函数:
试图最小化真实分布与生成分布的期望之间的距离
上面要满足的技术约束为1-Lipschitz:对于所有:
P.S.终于把上面这三总结了完了,太折磨了,说实话现在还不知道有啥意义???