达观数据:数据不够?GAN来凑!

大名鼎鼎的深度学习之父Yann LeCun曾评价GAN是“20年来机器学习领域最酷的想法”。的确,GAN向世人展示了从无到有、无中生有的神奇过程,并且GAN已经在工业界有着广泛的应用,是一项令人非常激动的AI技术。今天我将和大家一起去了解GAN及其内部工作原理,洞开GAN的大门。

本文尽量用浅显易懂的语言来进行表述,少用繁琐的数学公式,并对几个典型的GAN模型进行讲解。

一、GAN(GenerativeAdversarial Networks)

GAN全名叫Generative Adversarial Networks,即生成对抗网络,是一种典型的无监督学习方法。在GAN出现之前,一般是用AE(AutoEncoder)的方法来做图像生成的,但是得到的图像比较模糊,效果始终都不理想。直到2014年,Goodfellow大神在NIPS2014会议上首次提出了GAN,使得GAN第一次进入了人们的眼帘并大放异彩,到目前为止GAN的变种已经超过400种,并且CVPR2018收录的论文中有三分之一的主题和GAN有关,可见GAN仍然是当今一大热门研究方向。

GAN的应用场景非常广泛,主要有以下几个方面:

1.图像、音频生成。比如训练数据的生成。

2.图像翻译。从真实场景的图像到漫画风格的图像、风景画与油画间的风格互换等等。

3.图像修复。比如图像去噪、去除图像中的马赛克(嘿嘿…)。

4.图像超分辨率重建。卫星、遥感以及医学图像中用的比较多,大大提升后续的处理精度。

(一) GAN原理简述

GAN的原理表现为对抗哲学,举个例子:警察和小偷的故事,二者满足两个对抗条件:

1.小偷不停的更新偷盗技术以避免被抓。

2.警察不停的发现新的方法与工具来抓小偷。

小偷想要不被抓就要去学习国外的先进偷盗技术,而警察想要抓到小偷就要尽可能的去掌握小偷的偷盗习性。两者在博弈的过程中不断的总结经验、吸取教训,从而都得到稳步的提升,这就是对抗哲学的精髓所在。要注意这个过程一定是一个交替的过程,也就是说两者是交替提升的。想象一下,如果一开始警察就很强大,把所有小偷全部抓光了,那么在没有了小偷之后警察也不会再去学习新的知识了,侦查能力就得不到提升。反之亦然,如果小偷刚开始就很强大,警察根本抓不到小偷,那么小偷也没有动力学习新的偷盗技术了,小偷的偷盗能力也得不到提升,这就好比在训练神经网络时出现了梯度消失一样。所以一定是一个动态博弈的过程,这也是GAN最显著的特性之一。

在讲完了警察与小偷的故事之后,我们引入今天的主人公——GAN。

(二) 模型架构图

从上图能够看出GAN的整个网络架构是非常简单明了的,GAN由一个生成器(Generator)和一个判别器(Discriminator)组成, 两者的结构都是多层感知机(MLP),具体有多少层、每层多少个神经元可以根据实际情况自行设计,比较灵活。在这里,生成器充当着“小偷”的角色,判别器就扮演“警察”的角色。为了方便讲解,后面把生成器简称为G,判别器简称为D。

G:接收一个随机噪声向量z(比如z服从高斯分布),G的目标就是通过这个噪声来生成一个像真实样本的假样本

D:判别一个样本是真实样本还是G自己造的假样本。它接收一个样本数据作为输入,所以这个样本可以是G生成的假样本也可以是真实样本。它输出一个标量,标量的数值代表了输入样本到底是真实样本还是G生成的假样本的概率。如果接近1,则代表是真实样本,接近于0则代表是生成器生成的假样本,所以此时D最后一层的激活函数一定为sigmoid。

网络的最终目标是在D很强大的同时,G生成的假样本送给D后其输出值变为0.5,说明G已经完全骗过了D,即D已经区分不出来输入的样本到底是还是,从而得到一个生成效果很好的G。

损失函数的设计:

从上面的式子可以看出,损失函数是两个分布各自期望的和,其中是真实数据的概率分布,是生成器所生成的假样本的概率分布。对于D,它的目的是让中的样本的输出结果尽可能的大,即变大,而让生成的样本x的输出结果尽可能的小,即

变大,导致变大。对于G,它的目的是用噪声z来生成一个假样本x并让D给出一个较大的值,即让变小,导致变小。综上,我们得出:

(三) GAN的训练流程

假设batch_size=m,则在每一个epoch中:

先训练判别器k(比如3)次:

1. 从噪声分布z(比如高斯分布)中随机采样出m个噪声向量:

2. 从真实样本x中随机采样出m个样本:

3. 用梯度下降法使损失函数: 与1之间的二分类交叉熵减小(因为最后判别器最后一层的激活函数为sigmoid,所以要与0或者1做二分类交叉熵,这也是为什么损失函数要取log的原因)。

4. 用梯度下降法使损失函数:与0之间的二分类交叉熵减小。

5. 所以判别器的总损失函数即让d_loss越小越好。注意在训练判别器的时候生成器中的所有参数要固定住,即不参加训练。

再训练生成器1次:

1. 从噪声分布中随机采样出m个噪声向量:

2. 用梯度下降法使损失函数:与1之间的二分类交叉熵减小。

3. 所以生成器的损失函数即让g_loss越小越好。注意在训生成器的时候判别器中的所有参数要固定住,即不参加训练。

直到所有epoch执行完毕,训练结束。

从训练方法中可以看出,生成器和判别器是交替进行训练的,呈现出一种动态博弈的思想,非常有意思。不过在训练的时候还有一些注意事项:

1.在训练G的时候D中的参数不参加训练,即不需要梯度反传。同理,训练D的时候G中的参数不参加训练。

2.为了让D保持在一个相对较高的评判水平,从而更好的训练G。在每一个epoch内,先对D进行k(比如k=3)次训练,然后训练G一次,加快网络的收敛速度。

3.在原始论文中,作者在训练G的时候给出的公式是,然而这个公式有一些隐患,因为在训练的初始阶段,G生成的样本和真实样本间的差异一般会很大,此时D能很轻松的分辨两种样本,导致一直趋近于0,此时梯度消失,G也就得不到训练,所以这里的策略是,上面训练过程的阐述中已经对该处的损失函数做了更正。

(四) 损失函数相关数学推导

我们先将G中的参数固定住,此时的噪声向量通过G后所生成的样本是一一对应的,则有如下映射:  

由此将由两个数学期望的和组成的展开:

由于是固定的常量,另它们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值