0
点赞
收藏
分享

微信扫一扫

深度学习《GAN模型学习》


前言:今天我们来一起学习下GAN神经网络,上一篇博文我先用pytorch运行了几个网上的代码例子,用于生成MNIST图片,现在我才反过来写GAN的学习,这次反了过来,效果也是很显而易见的,起码有个直观的感觉,这一篇回归基本知识,介绍下GAN是什么?本文不会引用论文很复杂的公式。
论文参考自:https://arxiv.org/pdf/1406.2661.pdf
建议想学习的可以去论文学学,毕竟是大神之作,然后形成自己的认知。

一:什么是GAN?
在以前学习机器学习算法的时候,比如线性回归,逻辑回归,SVM等,或者是高斯混合模型的时候,我们心里已经大致知道了大概数据的特征的样子,然后用某个合适的模型去根据数据特征做出一些分类,在BP神经网络中,比如识别MNIST数字的例子,我们人眼也能看出来数字的特征(‘1’就是一个竖线),然后通过卷积、池化、全连接等方式去根据特征做出分类,诶呦不错哦,这个模型能根据已知的数据的分布特征(对于图片来说,像素就是数据)去做出一些机智的判断,大大提升效率。

但是如果我说,既然你的模型这么聪明,模型也看过的数字图片,它能根据数据的分布特征找到不同的数字类别,那模型你能跟我说一下数字‘1’到‘9’的特征是啥么?你能不能制造出这些类似的数字图像呢?(比如我说数字‘1’,你能画出来它的样子么?)

这就是GAN所做的工作,根据现实的数据,去学习出数据的分布特征,从而制造出类似的数据,这个模型就叫做GAN。

二:慢慢深入
前段时间有个热播的电视剧《古董局中局》,讲的就是古董造假行业和鉴别真伪世家之间的无休无止纠缠错乱的故事。
举个例子,小D是一名鉴别师,小G是一名造假师,他俩自出生开始就是宿命相对。

小D出生古董行世家,从小看了很多真实的古玩名迹,金石玉器,拥有了一定程度的鉴别古董真伪的能力。小G也能简单的造出一些常人都能识破的假物件,当然小D更能识破,让后告诉小G你拿给我的都是假的。

小G很刻苦,继续训练,虚心接受小D的评判结果和反馈更新,不断提升造假能力,而小D也没闲着,也在不断提升鉴别能力,相互促进相互提高,最后小G的造假能力大大提升,足够以假乱真,直到小D再也分不清楚哪个是真哪个是假,对每一个物件的判别真实度都是50%概率了,这个博弈过程就结束了。

GAN的模型也是有一个鉴别模型(Discriminator)和一个造假模型(Discriminator)组成,如下图:

深度学习《GAN模型学习》_损失函数

简单描述下就是:D是一个判别器,X是真实的数据,D(X)表示X是真实数据的概率(同样的1- D(X)则表示判定X是假数据的概率),范围是0~1。另一方面,Z是噪声随机数,维度任意,G是构造器,经过G后的G(X)是和X相同维度的数据,是假数据Xg = G(X),然后同样交给D模型去判别真伪。真和假是两个分类,我们是不是想到了逻辑回归?稍等下我们会涉及到。我们来分析下各个模型的内心活动啊。

1)对于D来说,D想要把真实数据X尽可能都识别成真实数据,也就是希望D(X)尽量越大越好,最好趋近于1。相反对于构造的数据G(X),希望鉴别出来都是假,也就是希望D(G(X))尽量越小越好,最好趋近于0,希望越小的概率认为真实的就等希望同于越大的概率认为是虚假的,所以换句话说就是对于构造的数据G(X),希望鉴别出来都是假,也就是希望1-D(G(X))尽量越大越好,最好趋近于1。

2)对于G来说,真实数据G管不着,我只能希望构造生成的数据能骗过D认为是真实的,使得D(X)逼近于1。这就是二者博弈的过程,最终达到一个均衡点,使得D(X)傻傻分不清了,什么都是50%的概率进行判别。

三:详细计算

下面给出损失函数,截图自论文:

深度学习《GAN模型学习》_损失函数_02

这里简单说一下,这里是俩个损失函数的合并写法,现在我拆开分析,就更加清晰了。

1)对于D来说希望把真实数据尽量大概率预测为真,把构造数据尽量大概率预测假,上述也说了,1-D(x)就是预测为假数据的概率。

深度学习《GAN模型学习》_深度学习_03

假设真实数据的标签是1,虚假数据的标签是0。上述式子可以合并,给出损失函数,按照逻辑回归的代价函数:

深度学习《GAN模型学习》_深度学习_04

对D来说如果想最小化代价函数L,那么就是最大化V(D,G)。

2)对G来说希望骗过D,使得D认为G构造的数据尽可能大概率认为真实的,即D(G(X))尽可能等于1,也可以说是希望D判别出是假数据的概率越小越好,1-D(x)尽可能等于0,只需要这点就够了,真实数据不归G管,如下。

深度学习《GAN模型学习》_深度学习_05

G希望P越大越好,越接近1越好,即F越小越好,越接近0越好,二者是熵等价的。由于我们出于习惯一般都是求最小化,而且为了和D的式子保持统一风格,因为选F计算的概率,又因为G只管Z数据,所以G模型的样本都是来自假的数据。

深度学习《GAN模型学习》_最小化_06

二者式子归并在一起就是论文中给出的式子了,我感觉它就是个抽象的定义。希望上述的公式分析,对下面展示的梯度下降过程有一定的帮助,具体的论文中给的梯度下降过程是如下所示:

深度学习《GAN模型学习》_深度学习_07

上述注意几点啊(前面已经分析了代价和函数,请一起参考)。
1:每一轮迭代都是先训练D,且D会训练K轮,K=1是最低的要求。然后再训练G。

2:对D来说,因为论文中它给的式子是V(D,G),对V(D,G)求偏导数,所以参数更新的时候需要加上这个偏导,而我们习惯上是对Loss函数求偏导,刚好Loss函数就是V(D,G)的相反数,使用正常的方式对Loss求偏导的话,结果也是一样的。

3:对G来说,V(D,G)和Loss的函数是一样的。都是求最小化,因为求完偏导数。需要做减法。

四:后续学习介绍:
在图像处理领域,最好最多的模型是CNN,怎么将二者结合起来呢?之前我也在Pytorch《GAN模型生成MNIST数字》使用了CNN的构造生成模型,有兴趣可以看看。

DCGAN(Deep Convolutional Generative Adversarial Networks)模型就是一个在这方面非常好的尝试,也是比较流行使用的模型方式,下一篇文章我将好好学习这个,并且给出实际的图像生成的例子,请见下一篇Pytorch《DCGAN模型》。

推荐个github地址,这里有很多GAN相关的论文:
​​​ https://github.com/zhangqianhui/AdversarialNetsPapers​​


举报

相关推荐

0 条评论