【机器学习chp14 — 3】生成式模型—生成对抗网络GAN(超详细分析,易于理解,推导严谨,一文就够了)

news2025/3/28 8:34:15

目录

 三、生成对抗网络 ( Generative Adversarial Networks,GAN )

1、GAN的基本思想

(1)生成器与判别器的基本结构与演变

(2)“对抗”机制及名词由来

2、GAN训练的基本算法

(1)网络初始化与迭代更新框架

(2)两阶段迭代更新

2.1 固定生成器更新判别器

2.2 固定判别器更新生成器

3、GAN的目标函数与优化方法

(1)基于JS散度的目标函数及其公式

1.1 目标函数的基本表达式

1.2 判别器最优解与 JS 散度

(2)梯度消失与JS散度局限性分析

2.1 梯度消失问题

2.2 JS散度局限性

2.3 模式崩塌

4、Wasserstein距离与WGAN

(1)Wasserstein距离的直观解释与定义

(2)1维Wasserstein距离计算及离散、连续情况

(3)Kantorovich-Rubinstein对偶性与1-Lipschitz约束

(4)WGAN的目标函数 及 WGAN的优势

4.2 对 D 平滑性限制得实现方式

4.3 WGAN的优势

4.4 WGAN小节

5、现象 GAN的扩展与融合模型

(1)作为外挂的GAN:VAE+GAN、Flow+GAN、Diffusion+GAN

(2)条件GAN(Conditional GAN)

2.1 条件输入(如标签、文本)对生成器的影响

2.2 判别器同时判断真实度与条件匹配性

(3)Cycle GAN 与 图像翻译

3.1 无配对数据下的映射学习

3.2 Cycle一致性约束的引入与作用

(4)其他相关变体:Dual GAN、Disco GAN、StarGAN


 三、生成对抗网络 ( Generative Adversarial Networks,GAN )

1、GAN的基本思想

(1)生成器与判别器的基本结构与演变

                        
生成器和判别器从初始(v1)到后续(v2、v3)的训练过程。

  • 生成器:最初仅是一个简单的网络,从一个随机向量(通常采自正态分布)经过若干隐含层映射到图像空间。随着训练进行,网络从真实图像中学到更多,从而能够捕捉更复杂的数据分布,生成的图像也更接近真实。
  • 判别器:最初作为一个简单的二分类器,任务是判断输入图像是真实数据还是生成器生成的假样本。随着版本升级,判别器的结构不断改进,能够更细致地区分细微的差异,提升整体判别能力。
  • 生成器和判别器在对抗过程中不断升级、形成你追我赶的动态平衡。

(2)“对抗”机制及名词由来

训练过程中,生成器和判别器之间构成了一个博弈关系:

  • 生成器试图生成越来越真实的样本以“欺骗”判别器;
  • 判别器则努力区分真实样本与伪造样本,给予尽可能不同的评分。
    这一对立关系可用下面的最小最大公式来描述(后面详细介绍):

正是这种相互对抗的训练方式,使得整个系统能够不断提高生成质量,同时推动判别器不断进步。

2、GAN训练的基本算法

(1)网络初始化与迭代更新框架

网络初始化
在训练开始前,需要对生成器 G 和判别器 D 进行参数初始化。保证两个网络从随机状态开始。

同时,每轮训练过程使用的真实数据集是在总的真实数据集中随机采样得到的。

(2)两阶段迭代更新

2.1 固定生成器更新判别器

判别器的目标:对真实图像赋较高的值, 对生成的图像赋较低的值。

        在此阶段中,生成器参数保持不变,只更新判别器,使其更好地区分真实数据(采样的真实数据)与生成数据(生成器生成的数据)。判别器的目标函数为:

                   

        更新过程通常使用梯度上升方法,通过多次迭代(例如5次更新)提高判别器的判别能力,但又不能使其达到完美状态,否则会导致生成器在下一阶段难以获得有效梯度。

判别器的具体目标即判别函数是:

        ​​​​​​​        V(G, D) = E_{x \sim p_{\text{data}}} [ \log(D(x)) ] + E_{\hat{x} \sim p_G} [ \log(1 - D(\hat{x})) ]

其中,

  • E_{x \sim p_{\text{data}}} [ \log(D(x)) ]:判别器在采样后的真实数据集的评估指标。
  • E_{\hat{x} \sim p_G} [ \log(1 - D(\hat{x})) ]:其中的D(\hat{x})为判别器对生成器生成数据给的分数,最大化E_{\hat{x} \sim p_G} [ \log(1 - D(\hat{x})) ]表示最小化D(\hat{x})

判别器的训练的目标是最大化上述目标函数:

                                                 希望得到 D^* = \arg \max_D V(D, G)

2.2 固定判别器更新生成器

生成器的目标:生成与数据集更加相似的图像,使生成的图像在判别器中得到更高的分。

        在这一阶段中,判别器参数固定,生成器根据判别器反馈进行参数更新。生成器的目标是“欺骗”固定的判别器。

        ​​​​​​​        ​​​​​​​        

生成器的具体目标是最小化生成图像与真实图像之间的相似度,即得到G^* = \arg \min_G \text{Div}(p_G, p_{\text{data}}),这里的 \text{Div}(p_G, p_{\text{data}}) 用 \max_D V(D, G) 表示,所以生成器的目标是更新 G ,使得 \max_D V(D, G) 最小 ,也就是让判别器判断的最差(但它仅从自身出发,即只改变 G) 。​​​​​​​

生成器的判别函数同样为:

        ​​​​​​​        ​​​​​​​        V(G, D) = E_{x \sim p_{\text{data}}} [ \log(D(x)) ] + E_{\hat{x} \sim p_G} [ \log(1 - D(\hat{x})) ]

生成器器的训练的目标是最小化上述目标函数:

                                                希望得到 G^* = \arg \max_G V(D^*, G)

        这里为什么要用D^*?因为生成器和判别器是交替更新的(判别器5次,生成器一次,交替),一般可任务生成器的更新是在判别器之后的。

        在更新 G 时,V(G, D)的第一项用不到,因为只有 \hat{x} 是由 G 生成的。

3、GAN的目标函数与优化方法

(1)基于JS散度的目标函数及其公式

1.1 目标函数的基本表达式

GAN 的核心目标函数采用了最小最大博弈的形式,其公式为:

        \min_G \max_D V(D, G) = \mathbb{E}_{x\sim p_{\text{data}}}\left[\log D(x)\right] + \mathbb{E}_{\hat{x}\sim p_G}\left[\log \left(1-D\bigl(\hat{x}\bigr)\right)\right]

其中:

  • p_{\text{data}}​ 表示真实数据的分布;
  • p_{\text{G}}​ 表示生成器生成的数据的分布;
  • D(x) 是判别器对输入样本 x 给出的真假概率;
  • G(z) 则是生成器从随机向量 z 生成的假样本。

        也可以表示为:

        \min_G \max_D V(D, G) = \mathbb{E}_{x\sim p_{\text{data}}}\left[\log D(x)\right] + \mathbb{E}_{z\sim p_z}\left[\log \left(1-D\bigl(G(z)\bigr)\right)\right]

                其中:p_z​ 表示生成器的参数;

        ​​​​​​​                   G(z) 则是生成器从随机向量 z 生成的假样本。

1.2 判别器最优解与 JS 散度

        更新判别式,解目标函数得到D^*

        ​​​​​​​        V(G, D) = E_{x \sim p_{\text{data}}} \left[ \log(D(x)) \right] + E_{\hat{x} \sim p_G} \left[ \log(1 - D(\hat{x})) \right]

        ​​​​​​​        ​​​​​​​        ​​​​​​​         = \int_{x} p_{\text{data}}(x) \log(D(x)) dx + \int_{\hat{x}} p_G(\hat{x}) \log(1 - D(\hat{x})) d\hat{x}

        ​​​​​​​        ​​​​​​​        ​​​​​​​         = \int_{x} \left[ p_{\text{data}}(x) \log(D(x)) + p_G(x) \log(1 - D(x)) \right] dx


        当生成器 G 固定时,求导令为 0 可极大化上式可得到最优判别器:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        D^*(x) = \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_G(x)}

        其中 p_G​ 为生成器生成的样本分布。
将最优判别器代入目标函数:

        ​​​​​​​          V(G, D^*) = E_{x \sim p_{\text{data}}} \left[ \log(D^*(x)) \right] + E_{\hat{x} \sim p_G} \left[ \log(1 - D^*(\hat{x})) \right]

        ​​​​​​​        ​​​​​​​        = E_{x \sim p_{\text{data}}} \left[ \log \left( \frac{p_{\text{data}}(x)}{p_{\text{data}}(x) + p_G(x)} \right) \right] + E_{\hat{x} \sim p_G} \left[ \log \left( \frac{p_G(\hat{x})}{p_{\text{data}}(\hat{x}) + p_G(\hat{x})} \right) \right]

        ​​​​​​​        ​​​​​​​        = -2 \log 2 + \text{KL} \left( p_{\text{data}} \parallel \frac{p_{\text{data}} + p_G}{2} \right) + \text{KL} \left( p_G \parallel \frac{p_{\text{data}} + p_G}{2} \right)

        其中:\text{KL} \left( p_{\text{data}} \parallel \frac{p_{\text{data}} + p_G}{2} \right) + \text{KL} \left( p_G \parallel \frac{p_{\text{data}} + p_G}{2} \right) 为 p_{\text{data}} 和 p_G 的JS散度。

JS散度的定义为:

        ​​​​​​​        ​​​​​​​        \text{JSD}(p \parallel q) = \frac{1}{2} \text{KL}(p \parallel \frac{p(x) + q(x)}{2}) + \frac{1}{2} \text{KL}(q \parallel \frac{p(x) + q(x)}{2})

  • JS散度是KL散度的对称版本。
  • 它的值域为 [0, \log 2],其中 \text{JSD}(p \parallel q) = 0 表示 p 和 q 完全相同,\text{JSD}(p \parallel q) = \log 2 表示它们完全不同。

        当 p_G = p_{\text{data}}​ 时,V(G^*, D^*) = -2 \log 2 。

        这反映出 GAN 通过极小化目标函数,实际上是在缩小 p_G​ 与 p_{\text{data}}​ 之间的 JS 散度,从而使生成分布逐渐向真实数据分布靠拢。

(2)梯度消失与JS散度局限性分析

2.1 梯度消失问题

目标函数为:

         \min_G \max_D V(D, G) = \mathbb{E}_{x\sim p_{\text{data}}}\left[\log D(x)\right] + \mathbb{E}_{z\sim p_z}\left[\log \left(1-D\bigl(G(z)\bigr)\right)\right]

如果将判别器训练到最好,即 D^{*}(x)=\sigma (x) ,图像如下图子图1,由于判别器很好,则生成的样本得分都是0,即生成的样本所在的位置如子图1中圈出的位置,也就是说D\bigl(G(z))都等于0,G(z)的范围都在接近-10的位置。

则 log(1-D^{*}(x))=log(1-\sigma (x)) 的图如下子图2,

所以 \frac{d}{d(G(z))}(\mathbb{E}_{z\sim p_z}\left[\log \left(1-D\bigl(G(z)\bigr)\right)\right]) 关于 G(z) 的图像如下图的子图4,而G(z)的范围都在接近-10的位置,所以 V(D^*,G) 关于 G 就没有了梯度。从而V(D^*,G)G的参数就没有了梯度, 出现梯度消失。

        ​​​​​​​        

梯度消失问题的解决

JS散度的梯度消失问题:判别完美将生成器样本归类为假样本,但生成器更新时收不到梯度。

改进:当判别器对生成样本充满信心判定生成样本时采用非饱和损失。

具体操作

        由:

        ​​​​​​​D^* = \max_D E_{x \sim p_{\text{data}}} \left[ \log(D(x)) \right] + E_{z \sim p_z} \left[ \log(1 - D(G(z))) \right]​​​​​​​ 

        G^* = \min_G E_{z \sim p_z} \left[ \log(1 - D^{*}(G(z))) \right]

        改为:

        D^* = \max_D E_{x \sim p_{\text{data}}} \left[ \log(D(x)) \right] + E_{z \sim p_z} \left[ \log(1 - D(G(z))) \right]

        G^* =- \min_G E_{z \sim p_z} \left[ \log( D^{*}(G(z))) \right]

        ​​​​​​​       = \max_G E_{z \sim p_z} \left[ \log(D^{*}(G(z))) \right]

画出图像为:

虽然G(z)的范围是在-10附近,但是那个地方有梯度,是-1

2.2 JS散度局限性

JS散度的第一个局限性就是上面介绍的梯度消失问题。

下面介绍另一个局限性:

        当两个分布不重叠时,JS散度均为 log 2,不能带来更新梯度。如下图,只要两个分布不重叠,无论两个分布距离多远,JS散度都不变。所以就两个分布不重叠时就没梯度了。只有当两个分布相差很小时,JS散度才有意义

        

        

而且,许多现实世界数据集的维度只是看起来很高(如图像),但其实集中在低维流形中。 对生成器而言,当给定小尺寸(如100)的输入噪声变量,要生成更大的图像(如64x64)时,这4096个像素上 的颜色分布由小的100维随机数向量定义,很难填满整个高维空间。 因为真实图像和生成器生成的图像都在低维流形中,它们肯定几乎是不相交的。也就是说,现实问题中,两个高维的分布几乎都是不相交的。

2.3 模式崩塌

        GAN 的优化目标是一个 min-max 博弈,生成器的主要目标是使得生成的样本能够最大化欺骗判别器,而不是生成样本分布的多样性。因此,生成器可能找到一种简单的策略(例如只生成某一 种样本)就能成功欺骗判别器,从而导致模式崩塌。

        GAN 的优化过程是一个非凸博弈,生成器和判别器的损失函数在 训练过程中相互依赖。这种博弈关系容易导致梯度更新不稳定, 如判别器可能过于宽松,导致生成器学会仅生成少量模式就能骗 过判别器。

        判别器过强,梯度消失,生成器停止学习,容易引发生成器倾向于专注于生成少数模式,而非覆盖整个数据分布。

        当两者分布之间的重叠区域很小时,JS 散度不具有指导意义,导 致生成器难以获得有效的梯度更新。

4、Wasserstein距离与WGAN

(1)Wasserstein距离的直观解释与定义

  • 直观解释
    Wasserstein 距离又称“推土距离”(Earth Mover’s Distance),其直观意义在于:

    • 想象有两堆“土堆”,其中一堆代表真实数据分布,另一堆代表生成数据分布。
    • Wasserstein 距离即为将一堆“土”重新搬运成另一堆“土”所需的最小运输成本,其中运输成本通常与搬运的距离成正比。
      这种解释突出了 Wasserstein 距离对分布“差异”的几何度量,相较于传统的散度(如 JS 散度),在衡量不重叠或分布支持集几乎无交集的情形下能提供更平滑、有效的梯度信息。

        

  • 正式定义
    对于两个概率分布 p​(真实数据分布)和 q​(生成数据分布),Wasserstein 距离定义为:

    W(p, q) = \inf_{\gamma \in \Pi(p, q)} \int_{x \times y} c(x, y) d\gamma(x, y)

    其中,\Pi(p, q) 表示所有满足边缘分布分别为 p​ 和 q​ 的联合分布集合。这个公式反映了在所有可能的 “ 运输方案 ” 中,选择运输成本最小的方案作为两分布间的距离。
    Wasserstein 距离在 GAN 训练中能够提供更稳定的梯度信息。求解最优传输问题,涉及联合 \gamma 的优化:在所有可能 的联合分布 \gamma 中,inf寻找总代价最小的 \gamma 。

(2)1维Wasserstein距离计算及离散、连续情况

  • 1维情况下的计算
    在一维空间中,Wasserstein 距离可以通过比较累积分布函数(CDF)的差异来计算。对于累积分布函数 F_p​ 和 F_q​,1维 Wasserstein 距离为:

    W(p_r, p_g) = \int_{-\infty}^{+\infty} |F_r(x) - F_g(x)| \, dx

    这种积分形式直观地反映了两个分布在各个位置上的累计差异。

          

  • 离散情况
    当数据为离散形式(例如离散采样的点),可以将分布看作由 Dirac 函数构成的集合,此时 Wasserstein 距离通常通过排序样本后计算两组样本对应位置的距离之和来估计。

  • 连续情况
    对于连续分布,上述积分形式就是严格意义下的计算方法,需要对整个实数域上的累积分布函数进行积分,反映了连续空间中分布的整体差异。
    文档中通过具体例子展示了如何在一维情形下,从离散数据和连续分布两个角度计算 Wasserstein 距离,以帮助理解这一度量在不同数据情形下的应用。

Wasserstein 距离和JS散度的比较:(当 p 、q 为两个 \delta 函数时的JS散度)

        

(3)Kantorovich-Rubinstein对偶性与1-Lipschitz约束

Wasserstein 距离是求最优联合分布,不易计算,转化为对偶问题。

Kantorovich-Rubinstein 对偶性
 Wasserstein 距离的对偶表达,即:

        ​​​​​​​        ​​​​​​​        W(p_r, p_g) = \underset{f\epsilon 1-Lipschitz}{\sup} \left( \mathbb{E}_{x\sim p_{data}}[f(x)] - \mathbb{E}_{x\sim p_G}[f(x)] \right)

这里的 f\epsilon 1-Lipschitz 表明,f 是一个 1-Lipschitz 条件的函数,也就是说,f 在任一点的梯度小于等于1,即有:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        |f(x_1) - f(x_2)| \le \|x_1 - x_2\|

这一对偶性说明,Wasserstein 距离可以通过寻找一个“最佳判别函数”(在 GAN 中称为“critic”)来近似计算。文档中对这一理论基础做了详细论述,强调了对偶表达式在 WGAN 设计中的重要作用。

K-Lipschitz 连续性

|f(x) - f(y)| \leq K |x - y|

梯度有界

\frac{|f(x) - f(y)|}{|x - y|} \leq K

1-Lipschitz 约束的重要性
为了保证对偶表达式的成立,critic 必须满足 1-Lipschitz 条件。实践中常通过以下方式来实现这一约束:

  • 权重裁剪:直接对网络参数进行限制,使其在一个固定区间内变化;
  • 梯度惩罚:通过在损失函数中增加一项,对梯度进行约束,确保在采样点处梯度接近 1。
    这两种方法都是为了确保 critic 不会因为过于陡峭或平滑而破坏对偶性的成立,从而影响 Wasserstein 距离的准确计算和梯度传递。

(4)WGAN的目标函数 及 WGAN的优势

4.1 目标函数设计
        在 WGAN 中,目标函数不再直接采用原始 GAN 中基于交叉熵的形式,而是基于 Wasserstein 距离的对偶表达式构造。其目标函数为:

        ​​​​​​​        ​​​​​​​         \min_G \max_{D\in \mathcal{D}} \; (\mathbb{E}_{x\sim p_{\text{data}}}[D(x)] - \mathbb{E}_{z\sim p_z}[D(G(z))])

其中,\mathcal{D} 表示所有满足 1-Lipschitz 条件的函数集合(即 critic 的函数空间)。这一目标函数直观上即为对 Wasserstein 距离的近似估计,生成器 G 试图最小化真实分布与生成分布之间的 Wasserstein 距离,而 critic 则努力最大化这一差值。

如果不对 D 进行限制,则模型不会收敛,即 D(x) 会被拉到正无穷,而 D(G(z)) 会被拉到负无穷。而对 D 进行限制后,D 会平滑得分开 p_{data} 和 p_G ,如下图:

4.2 对 D 平滑性限制得实现方式

早期,对D平滑性限制是算梯度的时候进行截断,最大只能是1 。后来进行了改进,在普空间中进行限制,即 Spectral Normalization → 使得函数在每个地方的梯度的模小于等于1。

4.3 WGAN的优势

相比传统 GAN,WGAN 在训练上有多项改进:

  • 稳定性提升:由于 Wasserstein 距离提供了全局平滑的梯度,即使真实分布和生成分布支持集没有重叠,也能获得有意义的梯度信息,从而缓解了梯度消失问题。
  • 缓解模式崩溃:WGAN 的目标函数能更直接地反映分布间的距离,减少生成器陷入模式崩溃(mode collapse)的风险。
  • critic 的多次更新:实践中通常采用多步更新 critic(例如每更新生成器前 critic 更新多次),以确保 critic 能够充分学习到分布间的差异,从而为生成器提供更稳定的梯度。
    文档中详细阐述了这些训练改进策略,并通过数学公式和实验图示证明了 WGAN 相对于传统 GAN 的优越性。

4.4 WGAN小节
  • 原始 GAN:

    \underset{G}{\min} \underset{D}{\max} E_{x \sim p_{\text{data}}} \left[ \log(D(x)) \right] + E_{z \sim p_z} \left[ \log(1 - D(G(z))) \right]
  • WGAN:

    \underset{G}{\min} \underset{D\epsilon 1-Lipschitz}{\max} E_{x \sim p_{\text{data}}} \left[ D(x) \right] - E_{z \sim p_z} \left[ D(G(z)) \right]

从数学的角度:JS散度\rightarrowWasserstein距离

从工程的角度:

  • 去掉 log
  • Lipschitz平滑

5、现象 GAN的扩展与融合模型

(1)作为外挂的GAN:VAE+GAN、Flow+GAN、Diffusion+GAN

基本思想
这类模型将 GAN 的对抗训练作为一个外挂或附加模块,结合其他生成模型(如 VAE、Flow 模型、扩散模型)的优势。通过在原有生成模型的基础上添加一个对抗损失,使得生成结果不仅满足重构或概率建模要求,同时更具真实感。

实际操作

对其他生成模型的生成结果,增加一个额外的损失:生成的结果是否足够“真实”。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

  • VAE+GAN

    • 重构与对抗损失结合:传统 VAE 在生成时主要依赖重构损失(reconstruction loss)和 KL 散度来优化,往往会导致生成图像模糊。VAE+GAN 在 VAE 的基础上增加了对抗损失,让生成器(通常与 VAE 的解码器共享结构)不仅要最小化重构误差,还要“欺骗”判别器,使生成图像看起来更加真实。
    • 网络协同:编码器将输入图像映射到潜在空间,再经过生成器生成图像;同时判别器判断生成图像是否真实,从而引入“重构对抗”机制。

        ​​​​​​​        

重构损失是一个很强的损失,训练时不会不稳定,也不会造成模式坍塌等。

对抗损失比较灵活,自由度高,训练时容易不稳定,容易造成模式坍塌。

  • Flow+GAN 与 Diffusion+GAN

    • Flow 模型与扩散模型本身可以对数据进行精细建模,但在一些场景下生成图像的细节或真实感仍不足。将 GAN 捆绑为外挂,可以对生成结果施加一个额外的“真实性”约束。
    • 外部损失设计:在这类架构中,GAN 的损失项被附加在基础模型的损失上,即“n重构损失 + 对抗损失”,促使生成器输出的图像在保持原有结构或概率密度特性的同时,进一步提升细节与真实感。

总体来看,“X+GAN”策略利用对抗训练补充其他模型的不足,使得生成结果在视觉质量上获得明显改善。

(2)条件GAN(Conditional GAN)

2.1 条件输入(如标签、文本)对生成器的影响

        条件 GAN 通过在生成器和判别器中引入条件变量(如标签、文本、声音等),实现更具控制性的生成。主要包括以下两个方面:

  • 条件信息嵌入

    • 在条件 GAN 中,生成器不仅接受随机噪声作为输入,还同时输入条件信息,如类别标签或描述性文本。
    • 条件信息可以通过嵌入向量、拼接或其他方式融合到生成器中,从而指导生成过程,使得生成图像在特定属性上满足条件要求(例如“红眼、黑发”或“red hair, green eyes”)。
  • 生成器的调控作用

    • 当条件信息明确且正确融合时,生成器会根据输入条件生成符合预期特征的图像;
    • 但也有提示生成器有时可能忽略条件输入,若条件信息未充分发挥作用,则生成器可能只关注提升图像的真实度而忽略条件匹配。

2.2 判别器同时判断真实度与条件匹配性
  • 双重判别任务

    • 条件 GAN 的判别器不仅要判断图像是真实图像还是伪造图像,还需判断图像是否与给定的条件相匹配。
    • 这种设计通常通过扩展判别器的输出,使其同时输出一个真实性评分和一个条件匹配评分(例如判断图像中的属性是否与文本描述一致)。
  • 监督信号强化

    • 判别器对条件匹配性的判断为生成器提供了更细致的反馈,促使生成器在生成真实感的同时,也更关注条件信息的准确反映。
    • 文档中展示了不同示例(如文本描述与图像配对),说明了在训练过程中,正确的条件匹配对于生成器学习目标的重要性。
  • 判别器如果不对条件进行匹配
    • 由于判别器的输出要反馈给生成器进行生成器的更新,如果判别器不对条件进行匹配,生成器中的对于条件的信息就会逐渐削减,慢慢没有了条件的影响。

        这种同时对图像真实性和条件匹配性的判断机制,使得条件 GAN 在很多应用中(如图像生成、文本到图像转换等)表现出更好的定向生成能力。 ​​

(3)Cycle GAN 与 图像翻译

        图像翻译任务旨在将一种图像风格或域映射到另一种图像风格或域,Cycle GAN 是其中的代表性方法,尤其适用于无配对数据场景。

无配对指的是图像原域 与 图像映射域没有一 一对应。

3.1 无配对数据下的映射学习

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

挑战与需求

  • 在很多实际应用中,很难获得成对的图像数据(例如白天与夜晚、夏季与冬季场景等),这就需要在无配对数据条件下学习不同域之间的映射关系。
  • Cycle GAN 正是为了解决这一问题而设计,它可以在没有成对数据的情况下,学习从一个域到另一个域的转换。

非Cycle GAN的情况

对于下图问题,将真实图像转化为相应的二次元图像:

应该在第一个图中的二次元图像(男)有更强的匹配,而第二幅图中的二次元图像(女)有更小的匹配度。但如果不采用Cycle GAN,匹配成女的二次元图像可能也有很高的匹配度。

因此可使用如下形式的Cycle GAN:

映射学习过程

  • 通过两个生成器分别实现双向映射,即从域 A 到域 B,再从域 B 回到域 A;
  • 每个生成器均由对应的判别器监督,使得生成的图像在目标域中具备较高的真实感。

        ​​​​​​​        

3.2 Cycle一致性约束的引入与作用

循环一致性损失

  • 为了确保映射学习过程中不丢失原始信息,引入了 Cycle 一致性约束。
  • 具体地,若将图像从域 A 映射到域 B 后,再映射回域 A,则生成的图像应与原始图像尽可能接近。
  • 这一约束可以通过以下形式的损失表达: L_{\text{cyc}} = \mathbb{E}_{x \sim p_A}\left[\|F(G(x)) - x\|\right] + \mathbb{E}_{y \sim p_B}\left[\|G(F(y)) - y\|\right] 其中 G 表示 A→B 的映射,F 表示 B→A 的映射。

作用与效果

  • Cycle 一致性有效避免了生成器完全偏离输入内容的情况,确保在风格转换过程中保留关键的结构信息。
  • 文档中通过图示说明了映射流程和一致性约束的作用,展示了在无配对数据条件下如何成功实现图像翻译。
  • 下图展现了Cycle GAN在两个域中相互转化的流程图。

        ​​​​​​​           

(4)其他相关变体:Dual GAN、Disco GAN、StarGAN

  • Dual GAN

    • 主要用于无监督的图像到图像翻译任务,通过双向生成网络实现映射学习,其核心思想与 Cycle GAN 类似,但在网络结构和损失设计上有所不同。
  • Disco GAN

    • 侧重于跨域映射的发现,尤其是用来捕捉两个域之间隐含的对应关系。
    • 它在设计上注重保持不同域之间的语义一致性,从而实现更好的风格迁移和属性转换。
  • StarGAN

    • 旨在实现多域图像翻译,通过一个统一的生成器和判别器模型,能够同时处理多个域之间的转换任务。
    • 相比于传统的双域映射,StarGAN 在多域场景下具有更高的灵活性和效率,适用于复杂的图像转换需求。

        这些变体均是在基本 GAN 框架上,通过设计不同的网络结构和损失函数,以应对各种特殊应用场景和数据分布问题,扩展了 GAN 的应用范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2318985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器人打磨控制技术

工具姿态调整运动 法线方向对齐运动:机器人实时调整工具姿态,使打磨工具的轴线与工件曲面的法线方向一致。例如,在球面打磨时,工具需始终垂直于球面切线。角度补偿运动:针对倾斜或不规则曲面,通过调整机器人…

K8S学习之基础四十:K8S配置altermanager发送告警到钉钉群

配置altermanager发送告警到钉钉群 ​ 创建钉钉群,设置机器人助手(必须是管理员才能设置),获取webhook webhook: https://oapi.dingtalk.com/robot/send?access_token25bed933a52d69f192347b5be4b2193bc0b257a6d9ae68d81619e3ae3d93f7c6…

Spring Boot + Spring Integration整合MQTT打造双向通信客户端

1. 概述 本文分两个章节讲解MQTT相关的知识,第一部份主要讲解MQTT的原理和相关配置,第二个章节主要讲和Spring boot的integration相结合代码的具体实现,如果想快速实现功能,可直接跳过第一章节查看第二章讲。 1.1 MQTT搭建 为了…

Java 填充 PDF 模版

制作 PDF 模版 安装 OnlyOffice 从 OnlyOffice 官网下载 OnlyOffice Desktop,安装过程很简单,一路下一步即可。用 OnlyOffice 制作 PDF 模版(表单) 使用 OnlyOffice 表单设计器,制作表单,如下图 注意命名…

Vulnhub-dedecms织梦通关攻略

姿势一、通过文件管理器上传WebShell 第一步:进入后台,找到文件管理器上传木马文件 第二步:使用蚁剑进行连接 #文件地址 http://localhost/dedecms/shell.php 姿势二、修改模板⽂件拿WebShell 第一步:修改模板文件,删除…

数据集获取

sklearn数据集 sklearn有四部分数据。其中sklearn的数据集有两部分真实的数据,一部分嵌入到了sklearn库中,即安装好sklearn后就自带了一部分数据,这些数据的规模比较小称为small toy datasets ,还有一部分数据是需要在网上下载的,sklearn提供了下载的api接口,这些数据规…

实验12深度学习

实验12深度学习 一、实验目的 (1)理解并熟悉深度神经网络的工作原理; (2)熟悉常用的深度神经网络模型及其应用环境; (3)掌握Anaconda的安装和设置方法,进一步熟悉Jupyte…

2024年消费者权益数据分析

📅 2024年315消费者权益数据分析 数据见:https://mp.weixin.qq.com/s/eV5GoionxhGpw7PunhOVnQ 一、引言 在数字化时代,消费者维权数据对于市场监管、商家诚信和行业发展具有重要价值。本文基于 2024年315平台线上投诉数据,采用数…

零知识证明:区块链隐私保护的变革力量

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…

Qt 控件概述 QLabel

目录 QLabel显示类控件 label如何做到与窗口同步变化 边框 Frame QLabel显示类控件 ​​ ​​ textFormat &#xff1a;设置文件格式 ​ Pixmap &#xff1a;标签图片 label如何做到与窗口同步变化 Qt中对应用户的操作 &#xff1a; 事件和信号 拖拽窗口大小就会触发…

Vue 渲染 LaTeX 公式 Markdown 库

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

网络原理之网络层、数据链路层

1. 网络层 1.1 IP协议 1.1.1 基本概念 主机: 配有IP地址,但是不进⾏路由控制的设备路由器: 即配有IP地址,⼜能进⾏路由控制节点: 主机和路由器的统称 1.1.2 协议头格式 说明&#xff1a; 4位版本号(version): 指定IP协议的版本,对于IPv4来说,就是4,对于IPv6来说,就是6 4位头…

版本控制器Git ,Gitee如何连接Linux Gitee和Github区别

&#x1f4d6; 示例场景 假设你和朋友在开发一个「在线笔记网站」&#xff0c;代码需要频繁修改和协作&#xff1a; 只用本地文件管理 每次修改后手动复制文件&#xff0c;命名为 v1.html、v2.html 问题&#xff1a;无法追踪具体改动内容&#xff1b;多人修改易冲突&#xff1…

【动态规划篇】91. 解码方法

91. 解码方法 题目链接&#xff1a; 91. 解码方法 题目叙述&#xff1a; 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; “1” -> ‘A’ “2” -> ‘B’ … “25” -> ‘Y’ “26” -> ‘Z’ 然而&#xff0c;在解码已编码的消息时&#xff0c;你…

Python高级——类的知识

一、知识梳理&#xff1a; 二、货币场景搭建&#xff1a; 1&#xff09;代码展示&#xff1a; class RMB:count 0def __init__(self,yuan0,jiao0,fen0):self.__yuan yuanself.__jiao jiaoself.__fen fenRMB.count 1def __add__(self, other):temp RMB()temp.__yuan se…

resnet与densenet的比较

一、 ResNet&#xff08;残差网络&#xff09;和 DenseNet&#xff08;密集连接网络&#xff09; ResNet&#xff08;残差网络&#xff09;和 DenseNet&#xff08;密集连接网络&#xff09;都是深度学习中非常经典的卷积神经网络架构&#xff0c;它们在图像分类、目标检测等诸…

【算法day16】电话号码的字母组合

电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 https://leetcode.cn/problems/letter-combinations…

软件工程之软件验证计划Software Verification Plan

个人主页&#xff1a;云纳星辰怀自在 座右铭&#xff1a;“所谓坚持&#xff0c;就是觉得还有希望&#xff01;” 本文为基于ISO26262软件验证计划模板&#xff0c;仅供参考。 软件验证计划&#xff0c;包括&#xff1a; 1. 软件需求验证计划 2. 软件架构设计验证计划 3. 软件单…

Spring Cloud之负载均衡之LoadBalance

目录 负载均衡 问题 步骤 现象 什么是负载均衡&#xff1f; 负载均衡的一些实现 服务端负载均衡 客户端负载均衡 使用Spring Cloud LoadBalance实现负载均衡 负载均衡策略 ​编辑 ​编辑LoadBalancer原理 服务部署 准备环境和数据 服务构建打包 启动服务 上传J…