深度卷积生成式对抗网络,2019-03-26
论文链接:https://arxiv.org/abs/1511.06434
目录
一、预备知识
(一)卷积神经网络
参考博文:
https://www.cnblogs.com/skyfsm/p/6790245.html
1. 层级结构
- 数据输入层/Input Layer:主要是数据预处理(去均值、归一化、PCA/白化等);
- 卷积计算层/CONV Layer:局部关联、窗口滑动(特征提取);
- 激励层/ReLU Layer:把卷积层的输出结果做非线性映射(一般采用ReLU函数);
- 池化层/Pooling Layer:夹在连续的卷积层中间,用于压缩数据和参数的量,减小过拟合(若输入图像,池化层的主要作用就是压缩图片,用的较多的方法是Max pooling);
- 全连接层/FC Layer:两层之间的所有神经元都有权重连接,通常位于卷积神经网络的尾部。
一般的CNN结构依次为:
- INPUT;
- [[CONV - > RELU] * N -> POOL?] *M;
- [FC -> RELU] * K;
- FC
2. 训练算法
- 先定义Loss Function,衡量和实际结果之间的差距;
- 找到最小化损失函数W和b,CNN中用的算法是SGD(随机梯度下降)
3. 优缺点
- 优点
共享卷积核,对高维数据处理无压力;
无需手动选取特征,训练好权重,即可使得特征分类效果好。 - 缺点
需要调参,需要大量样本,训练最好要用GPU;
物理含义不明确。
(二)GAN
GAN模型是由以下两个模型构成的:
- 生成模型:捕捉数据分布(伪造数据)
- 判别模型:评价数据来自于真实数据集的概率(鉴别数据)
在GAN的框架中,有两个模型,一是生成模型G,另一个是判别模型D。生成模型G主要用于根据给定的隐含信息来随机生成观测数据,判别模型D主要是输入变量,通过模型来预测它是真实的数据还是虚假的数据。
在GAN中,我们不断地训练模型,目的就是为了得到一个效果良好的生成模型,可以生成与数据集中的真实数据相似的的数据,这就是GAN中的“生成”的含义。
而由于G希望不断更新,生成更加真实的数据,试图欺骗D,而D也不断更新,提升自己鉴别数据的能力,希望能够将G生成的数据和真实数据区分开来,从而产生了一个博弈过程,这也就是GAN中的“对抗”的含义。
详细说明可参考我的另一篇博文:生成式对抗网络(Generative Adversarial Nets,GAN)
二、模型结构
(一)模型总体思想
将生成式对抗网络GAN中的生成器G和判别器D中的多层感知机用改进后的卷积神经网络CNN替代。
(二)对CNN的改进
1. 全卷积网络
使用步长卷积代替确定性的空间池化函数(例如:最大池化),允许网络学习自己的空间下采样。在生成器和判别器中使用这种方法,这样能允许生成器学习自己的空间采样。
2. 消除完全连接层
在卷积特征上消除完全连接层的趋势。例如:全局平均池化。
全局平均池化提高了模型的稳定性,但是降低了收敛速度。
将最高卷积特性直接连接到生成器和判别器的输入输出的中间地带工作得很好。
3. 批规范化
通过将每个单元的输入标准化,使其均值和单位方差为0,从而稳定学习。这有助于处理由于初始化不良而出现的训练问题,并有助于在更深层次的模型中实现梯度流。
这对于让深层生成器开始学习非常关键,可以防止生成器将所有样本压缩到一个点,这是在GANs中观察到的常见故障模式。
但是,直接将批规范化应用于所有层,会导致样本振荡和模型的不稳定。通过不在生成器输出层和判