Table of Contents

基本思想:

训练过程:

GANs的值函数

GANs如何避开大量概率推断计算

GANs在实际训练中会遇到什么问题?

生成器的坍缩模式

原因:

解决办法:

图像生成DCGAN:GANs+卷积神经网络

ALI:生成+推断+判别

IRGAN:生成离散样本,比如文本序列场景


基本思想:

GANs:世间万物都是在相互制约和相互对抗中逐渐演化升级

  • 生成器Generator,从先验分布中采得随机信号,经过神经网络的变换,得到模拟样本;尽可能早出样本迷惑判别器
  • 判别器Discriminator,既接收来自生成器的模拟样本,也接收来自实际数据集的真实样本,判别样本来源;尽可能识别出来自生成器的样本

训练过程:

采用对抗策略训练模型。

  • 训练判别器,先固定G,利用G随机模拟产生样本作为负样本,并从真实数据中采样获得正样本;将正负样本输入到判别器中,根据判别器的输出和样本标签来计算误差,最后利用误差反向传播算法来更新判别器的参数——二分类问题
  • 训练生成器,先固定D,利用当前G随机模拟产生样本,并输入到判别器D中;根据判别器的输出和样本标签来计算误差,最后利用误差反向传播算法更新G的参数。

GANs的值函数

判别器的二分类问题:

损失函数,log-likelihood, categorical cross-entropy loss。最小化交叉熵损失函数,最大化该分类问题的对数似然函数,

优化生成器G实际是在最小化生成样本分布于真实样本分布的JS距离。

GANs本质是在最小化生成分布和真实数据分布的JS距离,当算法收敛时生成器刻画的分布就是真实数据的分布。

深度学习——GAN生成对抗神经网络深度学习——GAN生成对抗神经网络

 

GANs如何避开大量概率推断计算

概率生成模型的估计问题,比如传统概率生成模型(马尔科夫随机场、贝叶斯网络)会涉及大量概率推断计算。

传统上,先定义一个该分布表达式P(X),通常是一个多变量联合概率分布密度函数p(X1,X2, ..., Xn),并基于此做最大似然估计。其中包括计算边缘概率P(Xi),条件概率等等。当随机变量很多是,概率模型很复杂计算很困难。

GANs,并不对概率密度函数p(X)直接建模,而是通过制造样本x,简洁体现出分布p(X)。如果随机变量X与Z之间满足某种映射关系,则其概率分布也满足某种映射关系。因此,已知Z的分布,对随机变量间的映射转换函数建模,就唯一确定了X的分布。由此避开大量复杂的概率计算,可以用神经网络来训练这个映射函数。

深度学习——GAN生成对抗神经网络

GANs在实际训练中会遇到什么问题?

最小化目标函数时,在早期阶段G很差,生成的模拟样本很容易被D识别,使得D回传给G的梯度极其小,达不到训练的目的,即优化饱和。

解决办法,将目标函数中的log(1-D)调整为logD,两者在最优时解相同,但是前者会出现IDU饱和,后者目标函数的梯度不会消失。

深度学习——GAN生成对抗神经网络深度学习——GAN生成对抗神经网络

注意,改进后依然可能有其他问题,比如训练梯度不稳定,惩罚不平衡导致的模式坍缩(缺乏多样性)、不好判断收敛性,难以评价生成数据的质量和多样性等

深度学习——GAN生成对抗神经网络

 

生成器的坍缩模式

反复生成相似或相近的样本,样本的多样性比较差,D似乎将原始样本记住,没有泛化。

原因:

高维空间不是每个店都能表达一个样本,空间大部分是多余的,真实数据蜷缩在低纬度子空间的流形(高维曲面)上,因为维度低,所占空间体积测度几乎为0,很难被发现。

公式上看,考虑生成器分布于真实数据分布的JS距离,即两个KL距离的平均:

 

JS 距离等于log2常量。无论生成器怎么训练,JS距离不变,对生成器的梯度为0。训练神经网络是基于梯度下降的,用梯度一次次更新模型参数,如果梯度为0,则无法训练生成器。

 

解决办法:

WGAN方法,采用了Wasserstein距离代替JS距离,也称为推土机距离

原理:当生成器分布随参数theta变化而连续变化时,生成器分布与真实分布的Wasserstein距离也随theta变化而连续变化,并且几乎处处可导;而JS距离不保证随theta变化而连续变化

具体应用:Wasserstein距离计算比较复杂很难求解,做法是利用它的对偶式来简化计算,Wasserstein距离 和其对欧式的求解值是一样的,但是计算过程更简单。

在一个前向神经网络莉,输入经过多次线性变换和非线性**函数得到输出,输出对输入的梯度,绝大部分都是由线性操作所乘的权重矩阵贡献的,因此约束每个权重矩阵的大小,可以约束网络输出对输入的梯度大小。

判别器也叫做评分器critic,目标函数有“区分样本来源”变成“为样本打分”——越像真实样本分数越高,否则越低。

训练评分器就是计算生成器分布与真实分布的Wasserstein距离;给定评分器,训练生成器就是要缩小这个距离,算法中要计算Wasserstein距离对生成器参数theta的梯度,再通过梯度下降更新参数,让Wasserstein距离变小。

 

图像生成DCGAN:GANs+卷积神经网络

图像的几大学习任务:图像分类、图像分割、物体检测与识别

在生成器和判别器中应该怎么设计深层卷积结构:

  1. 去掉一切会丢失掉位置信息的结构,如池化层
  2. 使用分数步进卷积层
  3. 去掉最后的全连接层
  4. 批量归一化和ReLu**函数

ALI:生成+推断+判别

ALI,Adversarially Learned Inference模型,将生成和推断网络一起放到GANs框架下,进而联合训练生成模型和推断模型。

  • 生成网络:简历从隐空间到数据空间的映射,也叫做解码器Decoder。
  • 推断网络:简历从数据空间到隐空间的映射,也叫做编码器Encoder。

如何融合两个网络在GANs框架下,借助来自判别器的指导,不仅让模拟样本的分布尽量逼近真实分布,而且让模拟样本的隐空间表示与真实样本的隐空间表示在分布上也尽量接近。

深度学习——GAN生成对抗神经网络深度学习——GAN生成对抗神经网络

IRGAN:生成离散样本,比如文本序列场景

生成负样本。

如何构建生成器,生成文字组成的序列来表示句子?

序列建模采用RNN框架,具体单元可以是LSTM或GRU,甚至带上注意力机制。

实际上,RNN每个单元的输出就是联合概率分解后的各个条件概率,根据每个条件概率挑选一个词,依次进行,最终得到一个长度为T的句子。

GAN 在CV的应用比NLP要多得多,因为图片是连续的,可用数值型数据标识,文本是离散的单词最为最基础的语义单元。离散型数据在GAN训练时更加困难和不稳定。

 

 


《百面深度学习》

简述AE、VAE、GAN的联系和区别?

原始GAN在实际应用中存在哪些问题?

  1. 收敛性,理论上是证明了概率密度函数空间上的收敛性,但实际上用深度神经网络的参数空间上的收敛性不能保证
  2. 何时停止训练、生成数据的效果评估,缺乏理想的评价方法
  3. 实际训练时,交替优化的训练过程有可能导致模式坍缩。

GAN的目标函数的演进

原始GAN采用JS散度来度量真实分布和生成分布的距离,容易导致梯度消失。

优化方向:

  • f-散度,
  • 基于IPM、
  • 添加辅助项等方法

GAN的网络结构的演进

  • DCGAN,deep convolutional GAN,
  • 层次化结构,stacked GAN,堆叠多个“生成器-判别器-编码器”,
  • 加入自编码的结构

GAN的训练技巧的演进

  • 特征匹配技术
  • 单边标签平滑
  • 谱归一化
  • 虚拟批归一化、批判别、保留生成器的Dropout等方法

GAN的效果评估

  • IS,Inception score,评价生成图像的质量
  • FID,Frechet Inception Distance,对网络导数第二次的响应即特征图进行操作,通过比较真实样本和生成样本的特征图的均值和方差。
  • 注:以上两者实现了定量评估,但都是度整体表现的刻画,无法从多样性、质量等角度对单个生成样本独立评估。
  • 其他:模式分数Mode score,最大均值差异,最近邻双样本检验,切片Wasserstein距离等

GAN在半监督学习中的应用