关于生成模型GAN的几点思考
一、GAN(Generative Adversarial Networks)的基本原理:
一个GAN的结构包括两个模型(生成模型和判别模型):
生成模型的作用:生成假的数据(以图像为例,图像的本质就是数组),并将假的数据交给判别模型
判别模型的作用:对生成器生成的假数据作对比
二者在神经网络中都在不断的学习:最终的达到的效果是生成模型生成的假数据越来越接近于真实数据,而判别模型判别假数据的能力也越来越强。最好的状态是最终到达一个平衡点使得生成模型和判别模型的能力各占据0.5,然而这种情况是不存在的,因为如果二者能力是一样的就无法再继续学习,那么神经网络就失去了作用,在二者之间必然存在着你强我弱的局面。
二、GAN的训练过程:
判别模型的损失函数有两部分组成:
判别真实数据与真实数据标签的损失+判别假数据(假数据传入生成器的输出值再传入到判别器的输出值)与假标签的损失
生成模型的孙淑函数只有一部分:
假数据输入到判别器的输出值与真实数据的损失
交替进行:判别器判别真假数据--> 生成器生成假数据-->判别器判别真假数据
三、GAN的优缺点
1、GAN的优点:
(1)对抗训练避免损失了损失函数设计的困难,在图像风格迁移,超分辨率,图像去噪,图像补全等场景有较 好的表现
(2)采用无监督的学习方式进行训练,不用费很大力气去做标签,可以广泛应用在无监督和半监督学习领域
(3)相比于传统VAE变分自编码器偏差小
2、GAN的缺点:
(1)不适合处离散文本数据
(2)难以训练:模型崩溃、模型坍塌、梯度消失
(3)训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到.
四、GAN的常见问题:
1、为什么损失函数使用BCELoss?
对于判别器:假数据标签为0,真实数据(标签)为1
对于生成器:学习的数据的标签为1
无论是判别器还是生成器最后作的都是二分类(0和1)
2、为什么GAN不适合处理离散的文本数据?
因为神经网络反向传播需要进行求导运算,离散数据无法求导
3、为什么GAN的比VAE偏差小?
因为在VAE中学习的是真实数据的均值和方差再取正态分布中采样,而GAN直接学习真实数据
4、为什么GAN中的优化器不常用SGD?
1. SGD容易震荡,容易使GAN训练不稳定,
2. GAN的目的是在高维非凸的参数空间中找到纳什均衡点,GAN的纳什均衡点是一个鞍点,但是SGD只会找到局部极小值,因为SGD解决的是一个寻找最小值的问题,GAN是一个博弈问题。
五、GAN的训练技巧
1、对输入进行标准化
将图片标准化到0到1之间
在最后一层生成器最后一层使用Tanh**函数
2、真实数据和加数据使用不同的批次大小
3、避免使用Relu,Maxpool
4、对一部分标签添加噪声
5、使用DCGAN或图像金字塔, KL + GAN 或 VAE + GAN可能有效
6、尝试对判别模型使用SGD优化器,对生成模型使用Adam优化器
参考:
https://www.jianshu.com/p/93f6c62eadbb