一、GAN介绍
生成式对抗网络GAN(Generative Adversarial Networks)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。模型通过框架中(至少)两个模块:生成模型(Generative model)和判别模型(Discriminative model)的相互博弈学习产生相当好的输出。原始GAN理论中并不要求G和D都是神经网络,只需要是能够拟合相应生成和判别的函数即可。但实际应用中一般均使用深度神经网络DNN/MLP作为G和D。一个优秀的GAN应用需要有良好的的训练方法,否则可能由于神经网络模型的自由性而导致输出不理想。
GAN将机器学习中的两大模型紧密结合在了一起,在这个框架中将会有两个模型被同时训练:G用来捕获数据分布,D用来估计样本来自训练数据而不是G的概率,G的训练目的是最大化D产生错误的概率。这个框架相当于一个极小化极大的双方博弈。在任意函数G和D的空间中存在唯一解,此时G恢复训练数据分布,且D处处都等于1/2。在G和D由DNN构成的情况下,可以使用反向传播进行训练,在训练或生成样本时不需要任何马尔可夫链或展开的近似推理网络。
以生成图片为例,G为一个生成图片的网络,接收一个随机的噪声z生成图片G(z);D为一个判别网络,判断一张图片x是不是真实的,D(x)表示x是真实图片的概率,若D(x)等于1表示x是100%真实的图片、等于0表示x不可能是真实的图片。训练过程中G和D构成一个动态博弈过程,博弈的结果就是G可以生成足以“以假乱真”的图片G(z),而D难以判断G生成的图片是不是真实的,即D(G(z))=0.5。这样就得到了一个生成模型G,可以用来生成图片。Goodfellow从理论上证明了该算法的收敛性,且在模型收敛时,生成数据和真实数据具有相同的分布。
GAN的应用有:图像生成(超分辨率),语义分割,文字生成,数据增强,信息检索/排序,聊天机器人等。
二、对抗网络
为了学习生成器G对数据x的分布 ,先从一个简单的分布中采样一个噪声信号z(均匀分布or正态分布),先验概率为 。DNN/MLP的参数为 ,z经过映射得到 ; 的输出是一个标量,表示x是真实数据而不是 生成的概率,G和D都是可微函数,可以用BP算法训练。内循环训练k次D最大化正确分配标签概率,同时训练1次G最小化log(1-D(G(z))):G和D的训练是关于V(G,D)的极小化极大的二者博弈问题 two-player minimax game。
Minimax game是一种递归寻找失败的最大可能性中的最小值的算法,即最小化对方的最大得益。该算法是一个零和算法,一方要在可选的选项中选择将其优势最大化的选择,而另一方则选择令对方优势最小化的选项,输赢的总和为零。
这个方程在训练初期可能无法为G提供足够的梯度进行学习,在训练初期当G生成的效果很差、与训练数据明显不同时,D会以高的置信度拒接生成样本,log(1-D(G(z)))趋近于零梯度饱和;因此选择最大化logD(G(z))而不是最小化log(1-D(G(z)))来训练G。
在训练GAN时,同时更新判别分布(D,蓝色的虚线)使其能够区分数据生成分布 (黑色的点线)中的样本和生成分布 (G,绿色实线)中的样本。下面的水平线为均匀采样z的区域,上面的水平线为x的部分区域,朝上的箭头为映射x=G(z)将非均匀分布 作用在转换后的样本上。G在 高密度区域收缩,在 低密度区域扩散。
(a) 考虑一个接近收敛的对抗模型对: 与 相似,D是个部分准确的分类器;
(b) 算法的内循环中,保持G不变优化D,直到分类的准确率最高:;
(c) 在G更新1次后,D的梯度引导G(z)流向更可能分类为数据的区域;
(d) 训练若干步后,如果G和D接近某个稳定点且无法继续提高性能,则 ,D(x)=1/2。
三、公式推导
生成器G隐式定义了概率分布 作为 时G(z)的样本,如果有足够的训练容量及训练时间,下面的算法可以收敛到 的近似估计。
1、 全局最优解
训练包括顺序完成的两个阶段:固定G训练D,再固定D训练G,固定的意思是不进行训练,神经网络只是向前传播,不进行反向传播。
Proposition 1. G固定时,最优的D为:
Proof:对于任意G,D的训练目的是使V(G,D)的值最大
对于任意 {0,0},函数 在[0,1]之间取最大值。注意到D的训练目标可以被解释为最大化估计条件概率P(Y=y|x)的对数似然,Y表示x为真实分布 (y=1)或者生成分布 (y=0),因此:
Theorem 1. 训练目标C(G)的全局最优解仅在 时获得,此时
Proof:对于 ,,因此
后两项是Jensen-Shannon散度,衡量两个概率分布的相似度,取值在0到1之间。JS散度是KL散度的变体,解决了KL散度不对称的问题。当两个分布距离较远、完全没有重叠时,KL散度没有意义,而JS散度是一个常数,这在学习算法中是比较致命的问题,意味着梯度为零无法训练。
由于两个分布的JS散度的值非负,且二者相同的时候为0,因此 是C(G)的全局最小值,唯一解为 ,这表明生成模型完美的复制了数据产生的过程。
2、算法收敛性证明
Propostion 2. 如果G和D有足够的性能,对于算法1的每一步,给定G时D能够达到最优解,并且通过更新 来提高这个判别准则。
因此 收敛为 。
Proof:考虑 为关于 的凸函数,上确界的次导数包含达到最大值处的该函数的导数。如果 且对每一个ɑ, 是关于x的凸函数,那么如果,则 。这等价于给定对应的G和最优的D,计算 的梯度更新。如Thm1已经证明的, 是关于 的凸函数且有唯一的全局最优解,因此当 的更新足够小时, 收敛到 。
实际上对抗网络通过 表示 分布的有限簇,并且我们优化 而不是 本身,使用MLP定义G在参数空间引入的多个临界点。尽管缺乏理论证明,但在实际中MLP的优良性能表明了这是一个合理的模型。
四、GAN总结
1、优点
(1)生成模型G不需要直接用样本更新,避免了损失函数设计的困难;
(2)GAN是一个非常灵活的框架,各种类型的损失函数都可以整合到GAN模型中,可以产生更加清晰、真实的样本,广泛用于无监督学习和半监督学习领域;
(3)相比于变分自编码器,GAN没有引入任何决定性偏置(deterministic bias),由于变分方法引入了决定性偏置,是优化对数似然的下界,而不是似然本身,导致VAE生成的实例比GAN模糊。GAN没有变分下界,如果训练良好,GAN是渐进一致的。
(4)GAN相比其他的生成模型(受限玻尔兹曼机RBM、DBM、生成随机网络GSN等)只用到了反向传播,不需要复杂的Markov链;GAN的表达能力更强,而基于Markov链的模型需要分布比较模糊才能在不同的模式间进行混合。
2、缺点
(1) 是隐式表示,没有直接关于G的表达,而是通过一些参数进行控制;
(2)训练GAN需要达到纳什均衡,有时梯度下降法无法做到,相比VAE、PixelRNN不太稳定;
(3)GAN不适合处理离散形式的数据,如文本;
(4)GAN存在训练不稳定、梯度消失、模式崩溃等问题。
纳什均衡(Nash equilibrium)
在一个博弈过程中,无论对方的策略选择如何,当事人一方都会选择某个确定的策略,则该策略被称作支配性策略。如果两个博弈的当事人的策略组合分别构成各自的支配性策略,那么这个组合就被定义为纳什均衡。
一个策略组合被称为纳什均衡,当每个博弈者的均衡策略都是为了达到自己期望收益的最大值,与此同时,其他所有博弈者也遵循这样的策略。
模式崩溃(model collapse)
一般出现在GAN训练不稳定时,具体表现为生成结果很差,即使经过长时间训练也无法得到很好的改善。
原因在于GAN采用的是对抗训练的方式,G的梯度更新来自于D,所以当G生成的样本不是很真实,但D给出了正确的评价,这时G就会继续按照这样进行输出,这样G和D就会自我欺骗下去,导致最终生成结果特征不全。
3、训练GAN的一些技巧
(1)输入规范到(-1,1)之间,最后一层的**函数使用tanh(BEGAN除外);
(2)使用wassertein GAN的损失函数;
(3)如果有标签数据,尽量使用标签,还可以使用标签平滑(单边标签平滑、双边标签平滑);
(4)使用BN、instance norm或weight norm;
(5)避免使用ReLU和pooling,减少梯度稀疏的可能性,可以使用Leaky ReLU;
(6)优化器尽量使用Adam,学习率初始值可以选择1e-4,随着训练进行不断减小学习率;
(7)给D的网络增加高斯噪声,相当于一种正则措施。
五、GAN的变体
在论文的future work部分,作者提出了5个可能扩展的方向:
1、DCGAN(Deep Convolutional GANs)
DCGAN提升了GAN训练的稳定性以及生成结果的质量,为GAN的训练提供了一个很好的网络拓扑结构,表明生成的特征具有向量的计算特性。
DCGAN使用fractional-strided步长卷积代替上采样层,从小的维度产生大的维度(上卷积),使用全卷积代替全连接层,不使用pooling层。D几乎和G是对称的,且几乎每一层都使用BN加速训练提升稳定性,D使用LeakkyReLU防止梯度稀疏,G使用ReLU、输出层使用tanh。使用Adam优化器训练,初始学习率为0.0002。
2、WGAN
自从2014年Ian Goodfellow提出以来,GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多论文都在尝试解决,但是效果不尽人意,比如最有名的一个改进DCGAN依靠的是对判别器和生成器的架构进行实验枚举,最终找到一组比较好的网络架构设置,但是实际上没有彻底解决问题。
Wassertein 距离
用于衡量两个分布P、Q之间的距离:
是P和Q分布组合起来的所有可能的联合分布的集合,对于每一个可能的联合分布γ,可以从中采样 得到一个样本x和y,并计算出这对样本的距离||x-y||、以及样本对距离的期望。在所有可能的联合分布中能够对这个期望值得到的下界就是Wasserstein距离。直观上可以把E理解为在γ这个路径规划下将土堆P挪到Q所需要的消耗,所以Wasserstein距离又称Earth-Mover距离(EM距离)。
Wasserstein距离比JS散度的优势在于,即使两个分布重叠的部分很少,仍然能够反映两个分布的远近。根据Kantorovich-Rubinstein对偶原理,可以得到Wasserstein距离的等价形式:
Lipschitz连续
是一个比通常连续更强的光滑性条件,Lipschitz连续函数限制了函数改变的速度,符合Lipschitz条件的函数的斜率,必小于一个Lipschitz常数的实数(该常数依函数而定):
对于在实数集的子集的函数,若存在常数K,使得,则称f符合Lipschitz条件,对于f最小的常数K称为f的Lipschitz常数。若K<1,f为收缩映射。
GAN的目标函数是最小化真实样本分布和生成样本分布之间的JS散度,但如果两个分布的样本空间往往不完全重合,是无法定义JS散度的。解决方案是使用Wasserstein距离代替JS散度,得到WGAN算法,相比GAN参数更加不敏感,训练过程更加平滑。WGAN对GAN的改进之处在于:
(1)D最后一层去掉sigmoid;
(2)G好D的loss不取log;
(3)对更新后的权重强制截断到不超过一个固定常数c,如[-0.01,0.01]内,以满足论文中提到的lipschitz连续性条件;
(4)优化器使用RMSProp、SGD等,不要使用基于动量的算法如Momentum、Adam等。
使用Wasserstein距离需要满足Lipschitz连续性条件,因此要将权重限制到一定范围内,这就造成了隐患,虽然理论证明很漂亮,但实际训练时生成结果并没有期待的那么好。
3、WGAN-GP
是WGAN的改进,改变了连续性的限制条件,因为将权重剪切到一定范围后,如[-0.01,0.01],大多数权重都集中到-0.01和0.01上,这就意味着网络大部分权重只有两个可能的数,不能充分发挥深度神经网络的拟合能力,而且强制剪切权重容易导致梯度消失或梯度爆炸。比WGAN收敛速度更快,并能生成更高质量的样本。训练方式稳定,几乎不需要调参,成功训练多种针对图片生成和语言模型的GAN架构。
为了解决这个问题、且满足lipschitz连续性条件,WGAN-GP使用梯度惩罚(gradient penalty)的方式,先求出D的梯度d(D(x)),然后建立它与梯度限制K之间的二范数的损失函数。
作者提出没有必要对整个数据集(真实的和生成的)做采样,只需要从每一个批次的样本中采样即可,比如可以产生一个随机数,在生成数据和真实数据上做一个插值
4、LSGAN
使用最小二乘损失函数代替GAN的损失函数,缓解了GAN训练不稳定和生成图像质量差、多样性不足的问题。
使用JS散度并不能拉近真实分布和生成分布之间的距离,而使用最小二乘法可以将图像的分布尽可能的接近决策边界。
5、BEGAN
BEGAN的D使用auto-encoder的结构,输入是图片,输出是经过编码解码后的图片。BEGAN不直接估计生成分布与真实分布的差距,而是设计合理的损失函数拉近它们之间的距离,只要分布的误差分布相近则认为这些分布是相近的。即如果A和B相似,B和C相似,则认为A和C相似。
参考资料
https://arxiv.org/pdf/1406.2661.pdf
https://arxiv.org/pdf/1511.06434.pdf
https://arxiv.org/pdf/1701.07875.pdf
https://ask.julyedu.com/question/7668
https://blog.csdn.net/qq_25737169/article/details/78857788
https://baijiahao.baidu.com/s?id=1608234436964134667&wfr=spider&for=pc
https://www.leiphone.com/news/201702/EU12GVIe2pNGtgEk.html?viewType=weixin
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深度学习之生成式对抗网络GAN - Python技术站