matlab判断double_⽣成对抗⽹络(GAN)及其MATLAB实现
本⽂讲解⽣成对抗⽹络的相关知识及其MATLAB实现。 1)GAN的初步理解
GAN的思想是是⼀种⼆⼈博弈思想:博弈双⽅的利益之和是⼀个常数。⽐如两个⼈掰⼿腕,假设总空间是⼀定的。你的⼒⽓⼤⼀点,那你就得到的空间多⼀点,我得到引申到GAN⾥⾯可以看成:GAN中有两个这样的博弈者。⼀个⼈名字是⽣成模型(G),另⼀个⼈名字是判别模型(D)。相同点是:这两个模型都可以看成是⼀个⿊匣⼦
// 我们有什么?⽐如上⾯的这个图,我们有的只是真实采集⽽来的⼈脸样本数据集。⽽且很关键的⼀点
是我们连⼈脸数据集的类标签都没有,也就是我们不知道那个⼈// 我们要得到什么我们想通过输⼊⼀个噪声,模拟得到⼀个⼈脸图像,这个图像可以⾮常逼真,以⾄于以假乱真。
// GAN的两个模型要做什么判别模型:输⼊⼀幅图像,输出⼀个概率值,⽤于判断真假使⽤(概率值⼤于0.5就是真,⼩于0.5就是假)。⽣成模型:输⼊⼀组随机数2)GAN的深⼊理解
该如何⽤数学⽅法解决这么⼀个对抗问题呢?
⽣成模型与对抗模型可以说是完全独⽴的两个模型,他们之间没有什么联系。那么训练这样的两个模
型的⽅法就是:单独交替迭代训练。假设现在⽣成⽹络模型
对于⽣成⽹络,想想我们的⽬的,是⽣成尽可能逼真的样本。那么⽣成⽹络⽣成的样本你怎么知道它真不真呢?就是送到判别⽹络中。所以在训练⽣成⽹络的时在完成⽣成⽹络的训练后,那么我们是不是可以根据⽬前新的⽣成⽹络再对先前的那些噪声Z⽣成新的假样本了。没错,并且训练后的假样本应该是更真了才对。然后3)GAN的更深⼊理解原论⽂中的公式如下:
这个公式是最⼤最⼩的优化问题,那就不是⼀步完成的。其实对⽐我们的分析过程也是这样的,这⾥先优化D,然后再去优化G,本质上是
两个优化问题,把它拆解就如同下⾯两个公式:
可以看到,优化D的时候,也就是判别⽹络,其实没有⽣成⽹络什么事,后⾯的G(z)这⾥就相当于已经得到的假样本。优化D的公式的第⼀项,使得当真实样本x输⼊的GAN强⼤之处在于可以⾃动的学习原始真实样本集的数据分布,不管这个分布多么的复杂,只要训练的⾜够好就可以学出来。GAN强⼤之处也在于可以⾃动定义潜在损
4)代码实现
matlab生成随机数clearclc% 真实训练样本:60000个样本 1*784维(28*28展开)load mnist_uint8;train_x = double(train_x(1:60000,:)) / 255;train_x = mapminmax(train_x, 0, 1);rand('s
注: 这⾥⽤到了⼀个⼯具箱  DeepLearnToolbox,下载后将上述⼯具箱添加到路径,然后再运⾏代码。 5)结语
现在的GAN已经到了五花⼋门的时候了,各种应⽤也很多,理解底层原理再慢慢往上层扩展。GAN还是⼀个很厉害的东西,它使得现有问
题从有监督学习慢慢过渡到⽆监督学习,⽽⽆监督学习才是⾃然界中普遍存在的,因为很多时候没有办法拿到监督信息的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。