GAN原理

网络作为生成器

将x(可以是文字)以及一个简单的分布作为输入,生成一个y(可以是图片),随着z的输入不同,y的输出不同。这是一个输出分布的network。
在这里插入图片描述
那么我们为什么输出一个分布呢?这是因为我们希望我们的输出更具有“创造性”,也就是说我们希望输出不固定的东西,比如在数据集中没有的东西。
在这里插入图片描述
我们的输入是一个低维的向量,而输出是一个高维的向量。因此实际上是一个低纬的分布到高维的分布的一个映射。

图像生成

生成器

在这里插入图片描述

判别器

判别器的输出是一个分数,越真实的图片给出的分数越高。他是一个CNN的架构。
在这里插入图片描述

GAN

GAN基础的概念

主要是基于一种对抗的思想,生成器需要将自己生成的图片骗过判别器,而判别器需要能够不断地识别生成器生成的伪造的图片。
在这里插入图片描述

算法描述

首先需要初始化生成器以及判别器,第一步是定住生成器G,更新判别器D。通过高斯分布,生成一堆vector,随后利用G生成图片p1。而后在数据集中采样几组图片p2,利用p1和p2训练D分别p1和p2,其实就是把p2标为1,p1标为0,这就变成了一个分类的问题或者回归的问题。
在这里插入图片描述第二步与第一步相反,定住D来更新G,就是让G生成的图片欺骗D。实际的操作是,将G与D相连,吃一个向量作为向量,以一个分数作为输出,我们希望让输出越大越好。再细节一点说,将网络相连后,固定D的参数,只更新G的参数,而后通过梯度上升的方法让输出越大越好。
在这里插入图片描述
剩下的步骤就是重复1、2步。
在这里插入图片描述

GAN背后的原理

我们的目标

生成器G

与VAE、Diffusion model类似,我们都是希望我们的网络生成的分布与真实的分布越像越好。因此生成器的训练目标就是希望两个分布之间相似度越大越好。
在这里插入图片描述

判别器D

现在我们再来看判别器的训练目标,对于分类器而言,我们想要做的就是令来自真实数据集的data得分越大越好,来自生成器G的data得分越小越好,那么我们可以借鉴交叉熵的公式对其进行描述V(G,D)。从式子中我们能够看出,对于从数据集中取样得到的y,我们希望他越大越好,而对于来自生成器G的data取样得到的y,我们希望他越小越好。
我们衡量两个分布的相似度一般是用divergence来衡量的,而argmaxV(D,G)刚好与JS divergence有关。满足我们的目标
在这里插入图片描述
从直观上对这个式子进行解释,如果两个分布足够像,那么他们的数据在高维中可能是混在一起的,因此判别器比较难分辨出他们,因此maxV的值就会比较小。而如果divergence比较大,那么判别器是可以很简单的区分出他们的。
在这里插入图片描述

训练目标

在这里插入图片描述
原先我们求Div是比较难的,但经过我们的分析后,我们发现D的操作与Div是有相关性的,那么我们可以对其进行一个替换。而这其实就是我们之前在训练中所提到的第一步与第二步。
在这里插入图片描述

训练GAN的技巧

JS divergence有局限性

上面我们说的GAN用的是JS divergence,但他有局限性。这里给出了两种解释,第一种解释是P_data和P_G是高维空间在低维空间的一个mainfold,他们之间的重叠部分可能被忽略。
第二种解释是虽然也有重叠,但是如果我们取样的样本不够多那么很可能导致重叠部分被忽略。
在这里插入图片描述也就是说除非有重合才是0,这就会无法判断不重合的程度如何。
在这里插入图片描述

Wasserstein distance

在这里插入图片描述
对于简单分布的wasserstein distance比较简单,但是对于复杂的情况其实是很难计算的,因为不同move方式有很多可能。根据他的定义,要遍历全部方式计算一个最好的方式。
在这里插入图片描述

Wasserstein distance的优点

从他的定义我们能够看出,它能够解决JS divergence所不能解决的问题。
在这里插入图片描述

WGAN

这里直接给出如何计算Wasserstein distance,可以看出是找到一个足够平滑的作为判别函数。如果x是从真实分布中取样得到的,那么我们希望他越大越好,如果x是由生成器G生成的,那么我们希望他越小越好。那么为什么要让他足够平滑呢?具体看下图解释。
在这里插入图片描述
那么如何计算呢?详见下面的论文。在这里插入图片描述

有条件的生成

比较经典的一个任务是输入一段文字令其生成图像,这就是一个supervised learning了。
在这里插入图片描述训练过程如下,其实就是要在判别器中加上我们的文字。但是这样训练得出的结果往往不太好,因此我们还需要给他一些错误示例。
在这里插入图片描述

CycleGAN

因为在训练的时候我们往往没有成对的资料,而刚才我们上面介绍的其实都是supervised learning,那么现在要介绍的CycleGAN是一种unsupervised learning的技术。对于我们的网络来说,输入是X域的分布,我们希望输出是Y域的分布。解释一下与之前的想法有什么不同,之前的想法是输入是一个正态分布,而在这里是一堆具体的数据集的分布。
在这里插入图片描述
其实我们在之前Cycle GAN训练的时候,第一点就是把之前的正态分布改成X域中进行取样。但是如此生成出来的图片不一定与原来的图像有很强的联系,因此我们需要借助Cycle GAN的想法。在这里插入图片描述其实就是在上面的基础上是还需要再训练一个生成器,希望第一个G生成的图片能够再恢复原先的输入。上面看起来就很像是一个编码器。
在这里插入图片描述反过来做也是一样的。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CycleGAN是一种用于图像转换的深度学习模型,它可以将一个域中的图像转换成另一个域中的图像,而无需配对的训练数据。CycleGAN原理基于对抗生成网络(GAN)和循环一致性损失。 CycleGAN的核心思想是通过两个生成器和两个判别器来实现图像转换。其中,一个生成器将一个域中的图像转换为另一个域中的图像,而另一个生成器则将转换后的图像再转回原始域。两个判别器分别用于判断生成的图像是否真实以及转换前后的图像是否一致。 具体来说,CycleGAN的训练过程如下: 1. 生成器G将域A中的图像转换为域B中的图像,生成器F将域B中的图像转换回域A中。 2. 判别器D_A用于判断域A中的图像和生成器F生成的图像的真实性,判别器D_B用于判断域B中的图像和生成器G生成的图像的真实性。 3. 通过对抗训练,生成器G和判别器D_A共同学习,使得生成的图像能够以假乱真地欺骗判别器D_A。 4. 同样地,生成器F和判别器D_B也进行对抗训练,使得生成的图像能够以假乱真地欺骗判别器D_B。 5. 为了保持图像转换的一致性,CycleGAN引入了循环一致性损失。即将一个图像通过生成器G转换为域B中的图像,再通过生成器F转换回域A中的图像,应该与原始图像尽可能接近。同样地,将一个图像通过生成器F转换为域A中的图像,再通过生成器G转换回域B中的图像,也应该与原始图像尽可能接近。 6. 最终的目标是使生成器G和生成器F能够同时实现高质量的图像转换和循环一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值