乐鱼电竞登录:练习GAN你应该知道的二三事

发布时间:2021-09-09 11:40:37 来源:leyu乐鱼电竞 作者:leyu乐鱼电竞官网

  笔者触摸 GAN也有一段时间了,从一开端的小白,到现在被 GANs 虐了千百遍但依然深爱着 GANs 的小白,被 GANs 的对立思想所信服,被 GANs 能够生成万物的才干所惊叹。我觉得 GANs 在某种程度上有点类似于我国太极,『太极生两仪,两仪生四象』,太极阐明晰世界从无极而太极,以致万物化生的进程,太极也是考究阴阳谐和。(哈哈,这么说来 GANs 其实在我国古代就已经有了开展雏形了。)

  众所周知,GANs 的练习特别困难,笔者自从跳入了 GANs 这个范畴(坑),就一向在跟怎么练习 GANs 做「对立练习」,受启发于 ganhacks,并结合自己的经历记载总结了一些常用的练习 GANs 的办法,以备后用。

  GANs(Generative Adversarial Networks)能够说是一种强壮的「全能」数据散布拟合器,首要由一个生成器(generator)和判别器(discriminator)组成。生成器首要从一个低维度的数据散布中不断拟合实在的高维数据散布,而判别器首要是为了区别数据是来源于实在数据仍是生成器生成的数据,他们之间彼此对立,不断学习,终究到达Nash均衡,即任何一方的改善都不会导致整体的收益增加,这个时分判别器再也无法区别是生成器生成的数据仍是实在数据。

  GANs 开端由 Ian Goodfellow [1] 于 2014 年提出,现在已经在图画、语音、文字等方面得到广泛研讨和运用,特别是在图画生成方面,可谓是遍地开花,例如图画风格搬迁(style transfer)、图画修正(image inpainting)、超分辨率(super resolution)等。

  其间 P_r 是实在数据散布,P_z 是随机噪声散布。乍一看这个方针函数,感觉有点彼此对立,其实这便是 GANs 的精华地点—— 对立练习。

  在原始的 GANs 中,判别器要不断的进步判别对错的才干,即尽或许的将实在样本分类为正例,将生成样本分类为负例,所以判别器需求优化如下丢失函数:

  作为对立练习,生成器需求不断将生成数据散布拉到实在数据散布,Ian Goodfellow 首要提出了如下式的生成器丢失函数:

  因为在练习初期阶段,生成器的才干比较弱,判别器这时分也比较弱,但依然能够满意精准的区别生成样本和实在样本,这样 D(x) 就十分挨近1,导致 log(1-D(x)) 到达饱满,后续网络就很难再调整过来。为了处理练习初期阶段饱满问题,作者提出了别的一个丢失函数,即:

  也便是说,只有当 P_r=P_g 时分,不管是实在样本和生成样本,判别器给出的概率都是 0.5,这个时分就无法区别样本到底是来自于实在样本仍是来自于生成样本,这是最理想的状况。

  到这儿,咱们就能够看清楚咱们到底在优化什么东西了,在最优判别器的状况下,其实咱们在优化两个散布的 JS 散度。当然在练习进程中,判别器一开端不是最优的,可是跟着练习的进行,咱们优化的方针也逐步挨近JS散度,而问题恰恰就呈现在这个 JS 散度上面。一个直观的解说便是只需两个散布之间的没有堆叠或许堆叠部分能够忽略不计,那么大概率上咱们优化的方针就变成了一个常数 -2log2,这种状况经过判别器传递给生成器的梯度便是零,也便是说,生成器不行能从判别器那里学到任何有用的东西,这也就导致了无法持续学习。

  Arjovsky [2] 以其精深的数学技巧供给一个更谨慎的一个数学推导(手动截图原论文了)。

  抛开上面这些文绉绉的数学表述,其实上面讲的核心内容便是当两个散布的支撑集是没有交集的或许说是支撑集是低维的流形空间,跟着练习的进行,判别器不断挨近最优判别器,会导致生成器的梯度处处都是为0。

  细心盯着上面式子几秒钟,不难发现咱们优化的方针是彼此悖论的,因为 KL 散度和 JS 散度的符号相反,优化 KL 是把两个散布拉近,可是优化 -JS 是把两个散布推远,这「一推一拉」就会导致梯度更新十分不安稳。此外,咱们知道 KL 不是对称的,关于生成器无法生成实在样本的状况,KL 对 loss 的奉献十分大,而关于生成器生成的样本多样性缺少的时分,KL 对 loss 的奉献十分小。

  而 JS 是对称的,不会改动 KL 的这种不公平的行为。这就解说了咱们常常在练习阶段常常看见两种状况,一个是练习 loss 颤动十分大,练习不安稳;别的一个是即便到达了安稳练习,生成器也大概率上只生成一些安全稳妥的样本,这样就会导致模型缺少多样性。

  此外,在有监督的机器学习里边,常常会呈现一些过拟合的状况,可是 GANs 也不破例。当生成器练习得越来越好时分,生成的数据越挨近于有限样本调集里边的数据。特别是当练习集里边包括有过错数据时分,判别器会过拟合到这些过错的数据,关于那些未见的数据,判别器就不能很好的辅导生成器去生成可信的数据。这样就会导致 GANs 的泛化才干比较差。

  综上所述,原始的 GANs 在练习安稳性、形式多样性以及模型泛化功能方面存在着或多或少的问题,后续学术上的作业大多也是根据此进行改善(填坑)。

  上一节都是根据一些简略的数学或许经历的剖析,可是底子原因现在没有一个很好的理论来解说;虽然理论上的缺点,咱们依然能够从一些经历中发现一些有用的 tricks,让你的 GANs 不再难训。这儿罗列的一些 tricks 或许跟 ganhacks 里边的有些重复,更多的是弥补,可是为了完好起见,部分也增加在这儿。

  假设你的输入是一张图片,将图片数值归一化到 [-1, 1];假设你的输入是一个随机噪声的向量,最好是从 N(0, 1) 的正态散布里边采样,不要从 U(0,1) 的均匀散布里采样。

  因为判别器是独自处理每张图片,没有一个机制能告知 discriminator 每张图片之间要尽或许的不类似,这样就会导致判别器会将一切图片都 push 到一个看起来实在的点,缺少多样性。minibatch discriminator [22] 便是这样这个机制,显式地告知 discriminator 每张图片应该要不类似。在 tensorflow 中,一种完成 minibatch discriminator 方法如下:

  上面是经过一个可学习的网络来显现衡量每个样本之间的类似度,PGGAN 里提出了一个更廉价的不需求学习的版别,即经过计算每个样本特征每个像素点的标准差,然后取他们的均匀,把这个均匀值复制到与当时 feature map 相同空间巨细单通道,作为一个额定的 feature maps 拼接到本来的 feature maps 里,一个简略的 tensorflow 完成如下:

  谱归一化是别的一个让判别器满意 1-lipchitchz 接连的利器,主张在判别器和生成器里一起运用。

  滑润正样本的 label,例如 label 1 变成 0.9-1.1 之间的随机数,坚持负样本 label 依然为 0。个人经历标明这个 trick 能够有用缓解练习不安稳的现象,可是不能底子处理问题,假设模型不够好的话,跟着练习的进行,后期 loss 会飞。

  在原始 GAN 中,咱们其实在优化两个散布的 JS 散度,前面的推理标明在两个散布的支撑集没有交集或许支撑集是低维的流形空间,他们之间的 JS 散度大概率上是 0;而参加 instance noise 便是强行让两个散布的支撑集之间发生交集,这样 JS 散度就不会为 0。新的 JS 散度变为:

  在优化 G 的时分,咱们默许是假定咱们的 D 的判别才干是比当时的 G 的生成才干要好的,这样 D 才干辅导 G 朝更好的方向学习。一般的做法是先更新 D 的参数一次或许屡次,然后再更新 G 的参数,TTUR 提出了一个更简略的更新战略,即分别为 D 和 G 设置不同的学习率,让 D 收敛速度更快。

  PGGAN 是一个渐进式的练习技巧,因为要生成高清(eg, 1024x1024)的图片,直接从一个随机噪声生成这么高维度的数据是比较难的;已然无法一蹴即至,那就按部就班,首要从简略的低纬度的开端生成,例如 4x4,然后 16x16,直至咱们所需求的图片巨细。在 PGGAN 里,初次完成了高清图片的生成,而且能够做到以假乱真,可见其威力。此外,因为咱们大部分的操作都是在比较低的维度上进行的,练习速度也不比其他模型差劲多少。

  coarse-to-refine 能够说是 PGGAN 的一个特例,它的做法便是先用一个简略的模型,加上一个 l1 loss,练习一个含糊的作用,然后再把这个含糊的相片送到后边的 refine 模型里,辅佐对立 loss 等其他 loss,练习一个愈加明晰的作用。这个在图片生成里边广泛运用。

  练习 GAN 是一个精(折)细(磨)的活,一不小心你的 GAN 或许便是一部惊悚大片。笔者结合自己的经历以及看过的一些文献资料,列出了常用的 tricks,在此抛砖引玉,因为笔者才干和视界有限,有些不正确之处或许没补全的 tricks,还望指正。

咨询热线:400-029-2366
公司地址:陕西省西安市高新区科技路都荟国际A座1302室
拓展基地:西安市秦岭祥峪森林公园卓远拓展训练基地

在线咨询
全国咨询热线

400-029-2366