重点
- DCGAN的论文通过大量实验,给出一组结构和参数,提高GAN训练成功率, 其后面的训练算法就是2014年论文中提出的
- GAN损失函数和二类交叉熵损失函数的关系
深度学习给机器学习带来了一次革命,学术研究和实际应用一片欣欣向荣,那么未来继续引领机器学习发展的技术将什么? 无监督学习和强化学习,这个答案得到绝大多数的认同,尤其是体会到深度学习算法对样本量的巨大需求的人们. 无监督学习中最具有发展前景的两类方法是VAE和GAN.
VAE(Variational Autoencode)来自于标准的Autoencode方法. Autoencode方法逻辑上包含两部分:编码器和解码器. 编码器和解码器共享一个隐含层, 编码器输入和解码器输出的维度一致,隐含层的维度要低很多. 一个输入信号通过编码器,降低维度到达隐含层,再经过维度升高到达解码器输入,训练时定义L2损失,即要求编码器的输入和解码器的输入相似,最终人们期望最终训练出来的解码器可以学习到训练集的分布,达到生成的目的.但是大量实验证明,最终训练的解码器并不能达到期望:把编码器的输入送入解码器后,的确可以得到一个符合训练集分布的结果,但是如果时人工调制一个信号送入解码器,输出的就一团糟了.人们发现解决问题的关键时损失函数,L2并不是一个好的分布描述函数,对损失函数的改进就得到了VAE.
GAN的目的和VAE一致,但走了不同的路径.GAN需要两个网络:D网络负责对信号分类,判断信号的真假,G网络负责生成假信号,来迷惑D网络.GAN训练目的是D网络无法区分信号的真假,即G网络输出的假信号和真信号分布一致.训练成功后,D网络可以用来做特征提取,G网络用来生成新样本.
DCGAN
主要贡献
- 提出并验证一些GAN网络结构上的限制,满足这些限制的网络有利于提高GAN训练的稳定性
- 训练出来的D网络进行图像分类,达到较高的指标
- 分析了GAN学习到的filter,分析了filter和特定目标之间的关联
- 分析了G网络的输入-输出对应关系,通过控制输入的一些分量可以决定输出信号一些特性
后两点说明G网络不是简单的”记住”训练集,而是表现出一定的”语意”特性.比如抑制输入信号的某些信号,就可以让输出图中不出现窗户,这十分符合人们对G网络的期望.
具体的建议
- 去掉pooling层,用卷积层的stride做采样
- 去掉CNN之后的全连接层,全连接层有助于提高稳定性,但降低训练效率.
G网络的输入是1维随机向量,经过全连接网络(线性激励函数,相当于矩阵乘法)后reshape成一个4维信号作为后续卷积层的输入.D网络的最后一层用flatten层压缩维度后经过sigmoid函数后输出 - 增加BN层,对G网络的训练很重要,避免G网络把输入映射到同一个输出上.但是G网络的输出层和D网络的输入层不能用BN层,否则网络训练不稳定.
- 使用ReLU激励函数. G网络除了最后一层是Tanh激励,其他都是用ReLU激励.D网络使用LeakyReLU激励
一些细节
- 权重用均值0,标准差0.02的高斯信号初始化
- LeakyReLU的slope设置成0.2
- 采用Adam优化策略
- 训练速率设置成0.0002
- 动量权重 β1 β 1 设置成0.5
至此DCGAN论文原理部分已经结束,论文下半部分是大量实验分析,证明DCGAN的优势,那么我们应该如何复现DCGAN?
GAN
DCGAN通过大量实验,提供了很多建议,保证GAN训练的成功率. 其背后的训练方法在2014年的一篇论文中.
任何训练方法中最重要的损失函数,GAN的损失函数