文章目录
前言
学习资源:https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.php
一、初识GAN
1.1 GAN的基本结构:
- x为condition,规定要生成的内容的特性;若无则为uncondition GAN
- 为什么要输入高斯分布空间的随机采样z,是因为现实场景中要生成的内容丰富多样,所以需要用z为GAN的生成内容指定了其中一种,如下图游戏场景中向左/由转向的选择:
1.2 GAN的基本学习思路:
实质上是一个零和博弈的过程,G训练时固定住D的参数,根据D的结果计算梯度以学习生成可以欺骗D的内容,D训练是固定住G的参数,以正确的区分生产和真实的内容,通过不断的交替迭代训练最终让G生成逼真的内容
二、GAN的理论
2.1 基本概念
GAN实质上是做两域转化,从输入的分布转化到输出的分布,因此,GAN的学习目标是让输出的分布要目标分布就可能接近
原始的GAN算法中目标函数可以近视为JS散度
但是JS散度对GAN训练并不友好,很容易出现梯度消失的问题,因此学术界在目标函数领域做了很多的尝试:
2.1 JS散度的推导
三 GAN的技巧
3.1 JS散度的问题
我们的训练的输入维度(假设100)远小于目标的维度(至少256*256),因此真实分布与生成分布很难有交集,即使有也不一定能在训练时采样到,而JS散度在两个分布无空间交集时其距离为一常量log2,这样训练G时梯度往往会消失
3.2 WGAN
Wasserstein距离可以很好的解决这个问题,它的距离定义是一个分布变成另一个分布的平移代价
具体来看WGAN做了哪些改进:
- 判别器最后一层去掉sigmoid
- 生成器和判别器的loss不取log
- 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c(目的是让目标函数符合1−𝐿𝑖𝑝𝑠𝑐ℎ𝑖𝑡𝑧,但是实质上并为做到,只是确保函数平滑)
- 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
WGAN GP的改进
WGAN GP不是通过限制weight的大小,而是限制weight的梯度更新变化大小,并通过增加类似惩罚loss实现,采样空间penalty是在真实样本和生成样本中间的连线的随机点
实验证明,现在限制weight的梯度更新在1附近效果更好
四 Conditional GAN
Conditional GAN多了一个x的输入,D需要判断生成的内容是否符合x的要求
x也可为一张图片
infoGAN
VAE-GAN:
BiGAN
五 Cycle GAN
多域转化,starGAN:
双decode-encode结构,一条路线用于重建原图,一条用于两域转化
六 评价指标
目前GAN普遍存在的问题
Collapse:生成的内容高度相似
Dropping:生成的内容分布仅为目标发布的一部分
GAN的各种评价指标
评价指标:IS
评价指标:FID