- 5
- 0
- 约8.69千字
- 约 7页
- 2023-08-18 发布于湖北
- 举报
最简单易懂的GAN (⽣成对抗⽹络)教程:从理论到实践 (附
代码)
之前
GAN⽹络是近两 深度学习领域的新秀,⽕的不⾏,本⽂旨在浅显理解传统GAN,分享学习⼼得。现有GAN⽹络⼤多数代码实现使⽤
Python、torch等语⾔,这⾥,后⾯⽤matlab搭建⼀个简单的GAN⽹络,便于理解GAN原理。
GAN的⿐祖之作是2014 NIPS⼀篇⽂章:,可以细细品味。
● 分享⼀个⽬前各类GAN的⼀个论⽂整理集合
● 再分享⼀个⽬前各类GAN的⼀个代码整理集合
开开始始
我们知道GAN的思想是是⼀种⼆⼈零和博弈思想 (two-player game),博弈双⽅的利益之和是⼀个常数,⽐如两个⼈掰⼿腕,假设总的空
间是⼀定的,你的⼒⽓⼤⼀点,那你就得到的空间多⼀点,相应的我的空间就少⼀点,相反我⼒⽓⼤我就得到的多⼀点,但有⼀点是确定的
就是,我两的总空间是⼀定的,这就是⼆⼈博弈,但是呢总利益是⼀定的。
引申到GAN⾥⾯就是可以看成,GAN中有两个这样的博弈者,⼀个⼈名字是⽣成模型 (G),另⼀个⼈名字是判别模型 (D)。他们各⾃有
各⾃的功能。
相同点是:
● 这两个模型都可以看成是⼀个⿊匣⼦,接受输⼊然后有⼀个输出,类似⼀个函数,⼀个输⼊输出映射。
不同点是:
● ⽣成模型功能:⽐作是⼀个样本⽣成器,输⼊⼀个噪声/样本,然后把它包装成⼀个逼真的样本,也就是输出。
● 判别模型:⽐作⼀个⼆分类器 (如同0-1分类器),来判断输⼊的样本是真是假。 (就是输出值⼤于0.5还是⼩于0.5)
直接上⼀张个⼈觉得解释的好的图说明:
在之前,我们⾸先明⽩在使⽤GAN的时候的2个问题
● 我们有什么?
⽐如上⾯的这个图,我们有的只是真实采集⽽来的⼈脸样本数据集,仅此⽽已,⽽且很关键的⼀点是我们连⼈脸数据集的类标签都没有,也
就是我们不知道那个⼈脸对应的是谁。
● 我们要得到什么
⾄于要得到什么,不同的任务得到的东西不⼀样,我们只说最原始的GAN ⽬的,那就是我们想通过输⼊⼀个噪声,模拟得到⼀个⼈脸图像,
这个图像可以⾮常逼真以⾄于以假乱真。
好了再来理解下GAN的两个模型要做什么。⾸先判别模型,就是图中右半部分的⽹络,直观来看就是⼀个简单的神经⽹络结构,输⼊就是⼀
副图像,输出就是⼀个概率值,⽤于判断真假使⽤ (概率值⼤于0.5那就是真,⼩于0.5那就是假),真假也不过是⼈们定义的概率⽽已。其
次是⽣成模型,⽣成模型要做什么呢,同样也可以看成是⼀个神经⽹络模型,输⼊是⼀组随机数Z ,输出是⼀个图像,不再是⼀个数值⽽
已。从图中可以看到,会存在两个数据集,⼀个是真实数据集,这好说,另⼀个是假的数据集,那这个数据集就是有⽣成⽹络造出来的数据
集。好了根据这个图我们再来理解⼀下GAN的⽬标是要⼲什么:
● 判别⽹络的⽬的:就是能判别出来属于的⼀张图它是来⾃真实样本集还是假样本集。假如输⼊的是真样本,⽹络输出就接近1,输⼊的是
假样本,⽹络输出接近0,那么很完美,达到了很好判别的⽬的。
● ⽣成⽹络的⽬的:⽣成⽹络是造样本的,它的⽬的就是使得⾃⼰造样本的能⼒尽可能强,强到什么程度呢,你判别⽹络没法判断我是真样
本还是假样本。
有了这个理解我们再来看看为什么叫做对抗⽹络了。判别⽹络说,我很强,来⼀个样本我就知道它是来⾃真样本集还是假样本集。⽣成⽹络
就不服了,说我也很强,我⽣成⼀个假样本,虽然我⽣成⽹络知道是假的,但是你判别⽹络不知道呀,我包装的⾮常逼真,以⾄于判别⽹络
⽆法判断真假,那么⽤输出数值来解释就是,⽣成⽹络⽣成的假样本进去了判别⽹络以后,判别⽹络给出的结果是⼀个接近0.5的值,极限
情况就是0.5,也就是说判别不出来了,这就是纳什平衡了。
由这个分析可以发现,⽣成⽹络与判别⽹络的⽬的正好是相反的,⼀个说我能判别的好,⼀个说我让你判别不好。所以叫做对抗,叫做博
弈。那么最后的结果到底是谁赢呢?这就要归结到设计者,也就是我们希望谁赢了。作为设计者的我们,我们的⽬的是要得到以假乱真的样
本,那么很⾃然的我们希望⽣成样本赢了,也就是希望⽣成样本很真,判别⽹络能⼒不⾜以区分真假样本位置。
再再理理解解
知道了GAN⼤概的⽬的与设计思路,那么⼀个很⾃然的问题来了就是我们该如何⽤数学⽅法解决这么⼀个对抗问题。这就涉及到如何训练这
样⼀个⽣成对抗⽹络模型了,还是先上⼀个图,⽤图来解释最直接:
需要注意的是⽣成模型与对抗模型可以说是完全独⽴的两个模型,好⽐就是完全独⽴的两个神经⽹络模型,他们之间没有什么联系。
好了那么训练这样的两个模型的⼤⽅
原创力文档

文档评论(0)