长春专业网站制作公司,企业法人查询,适合做视频的自媒体平台,干电商需要学什么目录 1.GAN#xff1a;Generative Adversarial Nets#xff08;生成对抗网络#xff09;1、标题 作者2、摘要 Abstract3、导言 IntroductionGAN的介绍 4、相关工作 Related work5、模型 Adversarial nets总结 6.理论计算 Theoretical Results具体算法公式全局优化 Global O… 目录 1.GANGenerative Adversarial Nets生成对抗网络1、标题 作者2、摘要 Abstract3、导言 IntroductionGAN的介绍 4、相关工作 Related work5、模型 Adversarial nets总结 6.理论计算 Theoretical Results具体算法公式全局优化 Global Optimality of pg pdata期望的计算如下图所示 7.实验总结8.评论写作对于GAN本身这个算法而言对于GAN本身这个算法而言 1.GANGenerative Adversarial Nets生成对抗网络
1、标题 作者
机器学习中有两大类
分辨模型判断数据的类别或者预测实数值一般我们就是这个生成模型generative生成数据
adversarial对抗
Netsnetworks
2、摘要 Abstract
文章提出了一个新的frameworkframework通常是一个比较大的模型用来估计生成模型通过对抗的过程同时会训练两个模型
**生成模型G**用来抓取整个数据的分布生成模型就是要对整个数据的分布进行建模使得能够生成各种分布这里的分布就是指的生成图片、文字或者电影等在统计学中整个世界是通过采样不同的分布来得到的所以如果想要生成东西就应该抓取整个数据的分布**辨别模型D**用来估计样本到底是从真正的数据生成出来的还是来自生成模型生成出来的。生成模型尽量想让辨别模型犯错生成模型一般是尽量使数据分布接近但是这个地方有所不同它是想让辨别模型犯错
这个framework对应的是minmax two-player game博弈论中一个很有名的两人对抗游戏
在任何函数空间的 G 和 D 中存在一个独一无二的解 G 能够将数据的真实分布找出来如果已经把真实数据发掘出来的辨别模型 D 就做不了什么事情了如果 G 和 D 是MLP的话那么整个系统就可以通过误差的反向传播来进行训练
不需要使用任何马尔科夫链或着说对一个近似的推理过程展开相比其他方法更加简单而且实验效果非常好
3、导言 Introduction
深度学习是用来发现一些丰富的有层次的模型这些模型能够对AI中各种应用的各种数据做概率分布的表示
深度学习不仅仅是深度神经网络更多的是对整个数据分布的特征表示深度神经网络只是其中的一个手段
虽然深度学习在辨别模型上取得了很大进展但是在生成模型上做的还是比较差难点在于在最大化似然函数的时候要对概率分布进行很多近似这个近似的计算比较困难
深度学习在生成模型上进展不大是因为要去近似概率分布分布来计算似然函数这篇文章的关键是不用近似似然函数而可以用别的方法来得到一个计算上更好的模型
GAN的介绍
GAN本身是一个较大的框架它并不限制生成器和判别器的具体结构。通常生成器和判别器可以是任何类型的神经网络包括卷积神经网络CNN、递归神经网络RNN等。但是最开始GAN这篇论文使用MLP来构建模型这个框架中有两类模型
**生成模型**类似于造假的人他的目的是去生产假币**辨别模型**类似于警察他的任务是将假币找出来和真币区分开开来
造假者和警察会不断地学习造假者会提升自己的造假技能警察会提升自己判别真币和假币的性能最终希望造假者能够赢得这场博弈也就是说警察无法区分真币和假币这时就能生成跟真实一样的数据了
但是这GAN这篇文章的框架下面的生成模型是一个MLP它的输入是一个随机的噪音MLP能够把产生随机噪音的分布通常是一个高斯分布映射到任何想要拟合的分布中。同理如果判别模型也是MLP的情况下在这个框架下的特例叫做adversarial nets因为两个模型都是基于MLP所以在训练的时候可以直接通过误差的反向传递而不需要像使用马尔科夫链类似的算法来对一个分布进行复杂的采样从而具有计算上的优势
4、相关工作 Related work
视频中所读的版本是GAN在neurips上的最终版本它是一个比较新的版本
在搜索的时候可能会搜索到arxiv版本它是一个比较早期的版本作者没有将最新的版本上传到arxiv上面
以上两个版本的主要区别就是相关工作是不不一样的
arxiv版本上面相关工作的部分其实什么都没写写的并不相关neurips的版本上写了很多真正相关的工作
第一段
首先阐述了其他方法所存在的问题之前的方法是想要构造出一个分布函数出来然后提供一些参数让他可以学习通过最大化这些参数的对数似然函数来做这样的坏处是采样一个分布的时候计算比较困难尤其是维度比较高的时候
因为这些方法计算比较困难所以开展了generative machines的相关工作不再去构造这样一个分布出来而是去学习一个模型去近似这个分布这两种方法是有区别的
前一种方法明确知道分布是什么包里面的均值、方差等后一种方法不用去构造分布只需要一个模型去近似想要的结果就可以了缺点是不知道最后具体的分布是什么样的好处是计算起来比较容易 上式中对 f 的期望求导等价于对 f 自身求导这也是为什么可以通过误差的反向传递对GAN进行求解
(下面是一些不重要的)
VAEs跟GAN非常类似
通过一个辨别模型来帮助生成模型比如说NCE也用了这样的思路但是NCE相对来说损失函数更加复杂一点在求解上没有GAN的性能那么好
和predictability minimization算法的区别
其实GAN就是predictability minimization反过来
一个真实有用的技术会在不同的领域不断被人重新发现给予新的名词大家通常会将功劳归功于那个教会了大家这个技术的人而不是最早发明他的人
adversarial examples和GAN的区别
adversarial examples是说通过构造一些和真实样本很像的假样本能够糊弄到分类器从而测试整个算法的稳定性
5、模型 Adversarial nets
这个框架最简单的应用是当生成器和辨别器都是MLP的时候生成器需要去学一个在数据x上的Pg分布x中每个值的分布都是由pg这个分布来控制的
GAN主要应用在图片生成方面使用图片生成打一个例子假设你在玩游戏你的显示器是4K的分辨率每秒钟能输出60张图片我要学一个生成器也能生成跟游戏一样的图片那么这个数据x就是我们每次在显示器里面看到的4K分辨率的图片大概800万像素具体来说每一个像素是一个随机变量那么你这个x就是一个长800万维的一个多维随机变量我们认为每一个像素的值它都是由后面的一个分布来控制的这个就是Pg
生成模型如何输出x
首先在一个输入分布为Pz的噪音变量 z 在噪音变量上定义一个先验z可以认为是一个100维的向量每一元素是均值为0方差为1的高斯噪音生成模型就是把z映射成x生成模型是MLP他有一个可以学习的参数 θg
回到这个游戏的图片
第一种办法是反汇编游戏代码然后利用代码就知道游戏是如何生成出来的这就类似于构造分布函数的方法在计算上比较困难第二种办法是不管游戏程序是什么假设用一个若干维的向量就足以表达游戏背后隐藏的逻辑再学一个映设MLPMLP理论上可以拟合任何一个函数所以可以通过构造一个差不多大小的向量然后利用MLP强行将z映射成x使得他们相似就可以了这种方法的好处是计算比较简单坏处是MLP不在乎背后真正的分布是什么而是只是每次生成一个东西看起来相似就行了
辨别器D也是一个MLP它也有自己可以学习的参数 θd 它的作用是将数据放进来之后输出一个标量这个标量用来判断x到底是来自真实采样的数据还是生成出来的图片以游戏为例就是这个图片到底是来自游戏中的截图还是生成器自己生成的图片因为知道数据的来源所以会给数据一个标号如果来自真实的数据就是1来自生成的数据就是0
所以就采样一些数据来训练一个两类的分类器
在训练D的同时也会去训练GG用来最小化log(1-D(G(z)))
z 代表随机噪音放到G中就会生成图片假设辨别器正确的话辨别器D(G(z))的输出应该为0表示是生成的数据log(1-D(G(z)))这个式子最终为log1等于0但是如果辨别器没有做好会输出一个大于0的数在极端情况下输出1即辨别器百分之百地确信生成模型所生成的辨别器来自真实的数据即判断错误。则无论无何log1-一个大于零小于1 的数的最终结果就会变成一个负数在极端情况下D(G(z))为1则log0是负无穷大所以如果要训练G来最小化log(1-D(G(z)))就意味着训练一个G使得辨别器尽量犯错无法区分出来数据到底是来自真实数据还是生成模型所生成的数据
总结 目标函数如上图中公式所示是一个两人的minimax游戏VGD是一个价值函数它有两项如下。公式右边第一项是期望x是采样真实分布就是游戏中间的截图那么我们把x放到辨别器D中假设我们的辨别其是完美的情况下这一项是等于1log完之后等于0公式右边第二项是期望z是采样噪音分布把噪音放到生气器中生成我们要的x然后再放入D中同样假设D是完美情况下D(x)等于0log(1-0)等于0在D是完美的情况下公式右边的两项应该都是等于0的如果D不完美、有误分类的情况下这两项因为log的关系都会变成一个负数值所以如果想要辨别器完美地分类这两类的话就应该最大化D的值最小化G目标函数中有两个东西一个是min一个是max和一般的训练步骤有所区别一般只有一个min或者只有一个max这里既有min又有max就是两个模型在相互对抗D是尽量把数据分开G是尽量使生成数据分不开这个在博弈论中叫两人的minimax游戏如果达到了一个均衡就是D不能往前进步G也不能往前进步了就认为达到了均衡这个均衡叫做纳什均衡
在上面的公式中等式右边的第二项存在一定的问题在早期的时候G比较弱生成的数据跟真实的数据差得比较远这就很容易将D训练的特别好D能够完美地区分开生成的数据和真实的数据就导致log(1-D(G(z)))会变成0它变成0的话对他求梯度再更新G的时候就会发现求不动了。所以在这种情况下建议在更新G的时候将目标函数改成最大化log(D(G(z)))就跟第一项差不多了这样的话就算D能够把两个东西区分开来但是因为是最大化的话问题还是不大的但是这也会带来另外一个问题如果D(G(z))等于零的话log(D(G(z)))是负无穷大也会带来数值上的问题在之后的工作中会对其进行改进
6.理论计算 Theoretical Results 上图中一共有四张图分别表示GAN在前面三步和最后一步所做的工作z是一个一维的噪音标量x也是一个一维的真实标量噪音是均匀分布采样来的所以真实拟合的x如图中黑色圆点所示是一个高斯分布z是绿色线所示。a表示第一步的时候生成器将均匀分布进行映射图中绿色的线就是把z映射成了一个高斯分布此时辨别器视图中蓝色的线表现一般b表示更新辨别器尽量把这两个东西分开两个高斯分布的最高点表示真实分布和噪声最有可能出现的地方辨别器需要在真实分布的地方值为1在噪音分布的地方值为0这样就可以尽量将来自真实分布的x和来自于生成器的x尽量分别开来c表示尽量更新生成器使得能够尽量糊弄到辨别器就是将生成器生成的高斯分布的峰值尽量左移向真实数据的高斯分布进行靠拢让辨别器犯错这时候辨别器就需要尽量调整来把这两个细微的区别区别开来。d表示通过不断地调整生成器和辨别器直到最后生成器的模型能够将来自均匀分布的随即噪音z映射成几乎跟真实分布差不多融合的高斯分布即从真实的黑点中采样还是从生成器的绿线采样辨别模型都是分辨不出来的不管来自于哪个分布辨别器对这每个值的输出都是0.5这就是GAN最后想要的结果生成器生成的数据和真实数据在分布上是完全分别不出来的辨别器最后对此无能为力
具体算法公式 第一行是一个for循环每一次循环里面是做一次迭代迭代的部分也是一个k步的for循环每一步中先采样m个噪音样本再采样m个来自真实数据的样本组成一个两个m大小的小批量将其放入价值函数中求梯度就是将采样的真实样本放入辨别器将采样的噪音放进生成器得到的生成样本放进辨别器放进去之后对辨别器的参数求梯度来更新辨别器公式一这样子做k步做完之后再采样m个噪音样本放进第二项中把它对于生成器的模型的梯度算出来然后对生成器进行更新公式二这样就完成了一次迭代每次迭代中先更新辨别器再更新生成器k是一个超参数k不能取太小也不能取太大需要辨别器有足够的更新但也不要更新的太好。如果没有足够好的更新对新的数据生成器生成的东西已经改变了如果辨别器没有做相应的变化那么再更新生成器来糊弄D其实意义不大反过来讲如果将D训练到足够完美log(1-D(G(z)))就会变成0对0进行求导生成模型的更新就会有困难如果辨别器是警察生成器是造假者假设造假者一生产假币警察就将其一锅端了造假者也就不会赚到钱就没有能力去改进之后的工艺了反过来讲如果警察没有能力造假者随便造点东西警察也看不出来也抓不到造假者那么造假者也不会有动力去改进工艺使得假钞和真钞真的长得差不多所以最好是两方实力相当最后大家能够一起进步k就是一个超参数使得D的更新和G的更新在进度上差不多外层循环迭代N次直到完成如何判断是否收敛这里有两项一个是往上走max一个是往下走min有两个模型所以如何判断收敛并不容易。整体来说GAN的收敛是非常不稳定的所之后有很多工作对其进行改进
全局优化 Global Optimality of pg pdata
当且仅当生成器学到的分布和真实数据的分布式相等的情况下目标函数有全局的最优解
算法一确实能够求解目标函数
第一个结论当G是固定即生成器是固定的情况下最优的辨别器的计算如下图公式中所示
表示最优解Pdata表示将x放进去之后在真实产生数据的分布中的概率是多少Pg表示将x放进去之后生成器所拟合的分布的概率是多少分布是在0和1之间的数值所以上式中的每一项都是大于等于0、小于等于1的因此上式中分子、分母中所有的项都是非负的所以整个式子右式的值是在0到1之间的当Pdata和Pg是完全相等的情况下即对每一个x两个p给出来的结果是一样的右式的值是1/2即不管对什么样的x最优的辨别器的输出概率都是1/2表示这两个分布是完全分不开的这里可以看到D是如何训练出来的从两个分布中分别采样出数据用之前的目标函数训练一个二分类的分类器这个分类器如果说给的值都是1/2即什么值都分辨不出来就表示这两个分布是重合的否则的话就能够分辨出来这个东西在统计学中非常有用这叫做two sample test判断两个数据是不是来自同一个分布在统计上其实有很多工具比如说用T分布检测在数据科学中经常使用可以完全不管分布是什么样子的可以无视在高维上很多统计工序不好用就训练一个二分类的分类器如果这个分类器能够分开这两个数据就表示这两个数据是来自于不同分布如果不能分开就表示这个数据是来自同一分布的这个技术在很多实用的技术中经常会用到它比如说在一个训练集上训练一个模型然后把它部署到另外一个环境然后看新的测试数据跟训练数据是不是一样的时候就可以训练一个分类器把它分一下就行了这样就可以避免训练一个模型部署到一个新的环境然后新的环境和模型不匹配的问题
期望的计算如下图所示 等式右边第一项是在Pdata上面对函数求均值 等式右边第二项是在Pz上面对函数求均值 已知xg(z)x是由gz生成出来的假设Pg就是生成器对应的数据映射就将gz替代成x替代之后右边第二项对z的概率求期望就变成了对x求期望x的分布来自于生成器所对应的Pg。 一旦完成替代之后第一项和第二项是可以合并了合并之后积分里面的东西抽象出来经过替换变量就可以得到一个关于y的函数如果y是一个值的话它其实是一个凸函数取决于a、b不一样它的形状不一样。因为它是一个凸函数所以他会有一个最大值因为要求最大值所以会求导结果是ya / (ab)意味着对于任何的x最优解的D对他的输出等于y等于Pdata(x)/(Pdata(x) Pg(x))就证明了之前的结论 将所求到的最优解代入到上图所示的价值函数中最大化D就是将D*直接代进去然后展开就能得到如上图所示的结果就能得到之前的结论再把得到的结果写成一个关于G的函数因为D已经求得最优解并带入了所以整个式子就只跟G相关所以将他记成C(G)到此对整个价值函数求解就只需要对C(G)进行最小化就行了因为D的最优解已经算出来了 定理一是说当且仅当生成器的分布和真实数据的分布是相等的情况下C(G)取得全局最小值的时候 KL散度用来衡量两个分布。如下图左侧红色公式所示它表示的在知道p的情况下至少要多少个比特才能够将q描述出来 上式中最终结果中的两项实际上就是两个KL散度如下图中的公式所示 KL散度一定是大于等于零的KL要等于0那么p和q要相等 如果C(G)要取得最小值所以需要两个KL散度等于零又因为pq所以Pdata(PdataPg)/2所以C(G)的最优解就等价于PdataPg这就证明了D在已经取得了最优解的情况下如果想要对G取最优解的话一定是PgPdata具体来说对于写成这种形式的两个分布又叫做JS散度 JS散度和KL散度的区别JS散度是对称的而KL不是对称的不能将p和q进行互换但是对于JS散度将p和q进行互换也是可以保持不变的所以说它是一个对称的散度而KL是一个不对称的散度 也有评论说因为GAN是一个对称的散度所以使得它在训练上更加容易。但是也可以取一个更好的目标函数使得训练更加艰难 到此就证明了目标函数的选择还是很不错的
结论二是说算法一是能够优化目标函数的
当G和D有足够的容量的时候而且算法一允许在中间的每一步D是可以达到它的最优解的时候如果对G的优化是去迭代下图所示的步骤式中G已经换成最优解了那么最后的Pg会收敛到Pdata
将目标价值函数看成是一个关于Pg模型或者分布的函数Pg其实是一个函数那么目标函数就是一个关于函数的函数一个函数的输入可以是标量或者是向量这里目标函数是一个函数的函数输入不再是一个值而是一个值加上了计算等于是说在python中写一个函数本来是接收一个xx是一个vector然后现在需要接收一个clousureclousure就包括了计算和数之前是在高维的值的空间里面做迭代现在需要在一个函数空间里面做梯度下降Ex~Pg其实是关于Pg的一个很简单的函数这个东西展开之后就是把Pg写出来是一个积分积分里面有一个Pg(x)后面一项跟Pg无关所以他其实就是一个线性函数而且是一个凸函数在每一步中把D求到最优就是说一个凸函数的上限函数还是一个凸函数所以这个凸函数做梯度下降的时候会得到一个最优解虽然假设了每一次会对D优化到极致但实际上在算法上只是迭代了k步所以说这个证明并不能说算法一是工作的但是实际上算法一跑的还是挺好的其实算法一跑的并不好还是挺难收敛的经常会出现各种问题
7.实验总结
下图是生成的一些图片 总结
坏处是整个训练是比较难的G和D需要比较好的均衡如果没有均衡好的话会导致生成的图片比较差优势是因为生成器并没有看真正样本上的数据没有试图去拟合真实数据的特征使得它能够生成一些比较锐利的边缘但是这个说法在后面发现并不是这样的 未来的工作conditional GAN现在生成的时候是不受控制的随便给定一个z然后看最终出来的是什么东西但最好是说控制一下去偏向所想要生成的东西
8.评论
写作
总的来说写作还是比较明确的主要关注GAN在干什么摘要中主要讲述了GAN在干什么事情intro非常短首先写了一点故事性为什么要做这个事情然后接下来就是写GAN在干什么在相关工作中虽然第一个版本写的比较糟糕基本上就是在说与别人不一样但是后来的版本也基本承认了很多想法前面的人工作都已经做过了真正伟大的工作不在乎你的那些想法在别的地方已经出现过还是没有关键是说你能够给大家展示用这个东西在某个应用上能够取得非常好的效果能够让别人信服跟着你继续往下做然后把整个领域做大这个是伟大工作的前提第三章讲的是GAN的目标函数以及如何做优化第四章证明了为什么目标函数能得到最优解以及求解算法在一定程度上能够得到最优解最后一章简单介绍了一些实验和未来的工作,这样的写法比较i清楚想读的东西可以一路读下来
但是如果工作的开创性并不是很高的时候就一定要写清楚跟别人的区别是什么和贡献是什么
对于GAN本身这个算法而言
它开创了一个领域从一般化的角度来及那个它影响了之后的很多工作不仅仅是关于GAN 1、他是无监督学习的不需要使用标号 第三章讲的是GAN的目标函数以及如何做优化 第四章证明了为什么目标函数能得到最优解以及求解算法在一定程度上能够得到最优解最后一章简单介绍了一些实验和未来的工作,这样的写法比较i清楚想读的东西可以一路读下来
但是如果工作的开创性并不是很高的时候就一定要写清楚跟别人的区别是什么和贡献是什么
对于GAN本身这个算法而言
它开创了一个领域从一般化的角度来及那个它影响了之后的很多工作不仅仅是关于GAN 1、他是无监督学习的不需要使用标号2、他用一个有监督学习的损失函数来做无监督学习的他的标号来自于采样的还是生成的来自于数据用了监督学习的损失函数所以在训练上确实会高效很多这也是之后自监督学习比如说BERT的灵感的来源