从GAN到WGAN(02/2)

文章目录

  • 一、说明
  • 二、GAN中的问题
    • 2.1 难以实现纳什均衡(Nash equilibrium)
    • 2.2 低维度支撑
    • 2.3 梯度消失
    • 2.4 模式坍缩
    • 2.5 缺乏适当的评估指标
  • 三、改进的GAN训练
  • 四、瓦瑟斯坦(Wasserstein)WGAN
    • 4.1 什么是 Wasserstein 距离?
    • 4.2 为什么 Wasserstein 优于 JS 或 KL 背离?
    • 4.3 使用 Wasserstein 距离作为 GAN 损失函数
    • 4.4 利普希茨连续性Lipschitz continuity?
  • 五、示例:创建新的口袋妖怪!

上篇文章: 从GAN到WGAN(01/2)

一、说明

生成对抗网络 (GAN) 在许多生成任务中显示出巨大的效果,以复制现实世界的丰富内容,如图像、人类语言和音乐。它的灵感来自博弈论:两个模型,一个生成器和一个批评家,在相互竞争的同时使彼此更强大。然而,训练GAN模型是相当具有挑战性的,因为人们面临着训练不稳定或收敛失败等问题。在这里,我想解释一下生成对抗网络框架背后的数学原理,为什么很难训练,最后介绍一个旨在解决训练难点的GAN修改版本。

二、GAN中的问题

尽管GAN在逼真的图像生成方面取得了巨大成功,但训练并不容易;众所周知,该过程缓慢且不稳定。

2.1 难以实现纳什均衡(Nash equilibrium)

Salimans等人(2016)讨论了GAN基于梯度下降的训练程序的问题。同时训练两个模型,以找到两人非合作博弈的纳什均衡。但是,每个模型都会独立更新其成本,而不考虑游戏中的其他玩家。同时更新两个模型的梯度并不能保证收敛( convergence)。

让我们看一个简单的例子,以更好地理解为什么在非合作博弈中很难找到纳什均衡。假设一个玩家通过x控制了最小化 f 1 ( x ) = x y f_1(x) = xy f1(x)=xy,同时其他玩家不断更新y最小化 f 2 ( y ) = − x y f_2(y) = -xy f2(y)=xy.

因为 ∂ f 1 ∂ x = y \frac{\partial f_1}{\partial x} = y xf1=y ∂ f 2 ∂ y = − x \frac{\partial f_2}{\partial y} = -x yf2=x,我们更新x为 x − y ∗ η x-y*\eta xyη跟y改成 y + x ∗ η y+x*\eta y+xη在一次迭代中同时进行,其中 η \eta η是学习率。当x和y具有不同的正负号,每次梯度更新都会引起巨大的振荡,并且不稳定性会随着时间的推移而变得更糟,如图 3 所示。
在这里插入图片描述
Fig. 3. A simulation of our example for updating x to minimize xy and updating y to minimize -xy . The learning rate η . With more iterations, the oscillation grows more and more unstable.
图 3. 更新 x 以最小化 xy 和更新 y 以最小化 -xy 的示例的模拟。学习率 η 。随着迭代次数的增加,振荡变得越来越不稳定。

2.2 低维度支撑

术语解释
流形manifold局部类似于每个点附近的欧几里得空间的拓扑空间。确切地说,当这个欧几里得空间为尺寸,歧管称为n(n维)
支持实值函数是包含未映射到零的元素的域的子集。

Arjovsky 和 Bottou (2017) 讨论了 p r p_r pr p g p_g pg是基于低维度流场。在一篇非常理论化的论文“Towards principled methods for training generative adversarial networks”中,深入探讨了低维流形及其如何导致GAN训练的不稳定性。
许多现实世界数据集的维度,如 p r p_r pr,只是人为地显得很高。已发现它们集中在较低维的流形中。这实际上是流形学习的基本假设。想想现实世界的图像,一旦主题或包含的对象被固定下来,图像就有很多限制要遵循,例如狗应该有两只耳朵和一条尾巴,摩天大楼应该有笔直高大的身体等。这些限制使图像远离具有高维自由形式的可能性。

概率分布 p g p_g pg 也位于低维流形内。当生成器从小维输入(例如 100 维噪声变量 z z z)创建更大的图像(例如 64x64)时,4096 个像素上的颜色分布受到 100 维向量的约束,并且很难填充整个图像高维空间。

因为 p r p_r pr p g p_g pg 都位于低维流形中,所以它们几乎肯定是不相交的(见图 4)。当它们具有不相交的支持时,我们总是能够找到一个完美的判别器,能够 100% 正确地区分真实和虚假样本。如果您对证明感到好奇,请检查论文。

在这里插入图片描述Fig. 4. Low dimensional manifolds in high dimension space can hardly have overlaps. (Left) Two lines in a three-dimension space. (Right) Two surfaces in a three-dimension space.

图 4.高维空间中的低维流形几乎不可能有重叠。(左)三维空间中的两条线。(右)三维空间中的两个表面。

2.3 梯度消失

当判别器完美时,我们保证 D ( x ) = 1 , ∀ x ∈ p r D(x) = 1, \forall x \in p_r D(x)=1,xpr D ( x ) = 0 , ∀ x ∈ p g D(x) = 0, \forall x \in p_g D(x)=0,xpg。因此,损失函数 L L L 降至零,并且我们最终在学习迭代期间没有梯度来更新损失。图 5 展示了一个实验,当判别器变得更好时,梯度很快消失。

在这里插入图片描述Fig. 5. First, a DCGAN is trained for 1, 10 and 25 epochs. Then, with the generator fixed, a discriminator is trained from scratch and measure the gradients with the original cost function. We see the gradient norms decay quickly (in log scale), in the best case 5 orders of magnitude after 4000 discriminator iterations. (Image source: Arjovsky and Bottou, 2017)

图 5.首先,DCGAN 训练了 1、10 和 25 个周期。然后,在生成器固定的情况下,从头开始训练判别器,并使用原始成本函数测量梯度。我们看到梯度范数 衰减迅速(以对数刻度为单位),在最佳情况下,经过 4000 次鉴别器迭代后,梯度范数为 5 个数量级。(图片来源:Arjovsky 和 Bottou,2017 年)

因此,训练GAN面临两难境地:

  • 如果鉴别器行为不当,则生成器没有准确的反馈,损失函数无法代表现实。
  • 如果判别器做得很好,损失函数的梯度就会下降到接近零,学习会变得非常慢,甚至卡住。
    这种困境显然能够使GAN训练变得非常艰难。

2.4 模式坍缩

在训练期间,发生器可能会崩溃到始终产生相同输出的设置。这是 GAN 的常见故障情况,通常称为模式崩溃。尽管生成器可能能够欺骗相应的鉴别器,但它无法学会表示复杂的真实世界数据分布,并且被困在一个变化极低的小空间中。
在这里插入图片描述
Fig. 6. A DCGAN model is trained with an MLP network with 4 layers, 512 units and ReLU activation function, configured to lack a strong inductive bias for image generation. The results shows a significant degree of mode collapse. (Image source: Arjovsky, Chintala, & Bottou, 2017.)

图 6.DCGAN 模型使用具有 4 层、512 个单元和 ReLU 激活函数的 MLP 网络进行训练,该网络配置为缺乏用于图像生成的强感应偏差。结果显示,模式坍塌程度显著。(图片来源:Arjovsky,Chintala和Bottou,2017。)

2.5 缺乏适当的评估指标

生成对抗网络并不是天生就有一个很好的反对函数,可以告诉我们训练进度。没有一个好的评估指标,就像在黑暗中工作一样。没有好的迹象可以告诉何时停止;没有好的指标来比较多个模型的性能。

三、改进的GAN训练

提出以下建议,以帮助稳定和改进GAN的训练。

前五种方法是在“改进GAN训练技术”中提出的实现GAN训练更快收敛的实用技术。 在“Towards principled methods for training generative adversarial networks”中提出了后两种方法,以解决不相交分布的问题。

(1) 功能匹配

特征匹配建议优化鉴别器,以检查生成器的输出是否与实际样本的预期统计量匹配。在这种情况下,新的损失函数定义为 ∣ E x ∼ p r f ( x ) − E z ∼ p z ( z ) f ( G ( z ) ) ∣ 2 2 | \mathbb{E}_{x \sim p_r} f(x) - \mathbb{E}_{z \sim p_z(z)}f(G(z)) |_2^2 Exprf(x)Ezpz(z)f(G(z))22这里, f ( x ) f(x) f(x)可以是特征统计量的任意计算,例如均值或中位数。

(2) 小批量鉴别
在一个小批量中,我们近似每对样本之间的接近度, c ( x i , x j ) c(x_i, x_j) c(xi,xj),并通过总结一个数据点与同一批次中其他样本的接近程度来获得一个数据点的整体摘要, o ( x i ) = ∑ j c ( x i , x j ) o( x_i) = \sum_{j} c(x_i, x_j) o(xi)=jc(xi,xj)
。然后 o ( x i ) o(x_i) o(xi) 被显式添加到模型的输入中。

(3) 历史平均
对于这两种模型,添加 ∣ Θ − 1 t ∑ i = 1 t Θ i ∣ 2 | \Theta - \frac{1}{t} \sum_{i=1}^t \Theta_i |^2 ∣Θt1i=1tΘi2 进入损失函数,其中 Θ \Theta Θ 是模型参数, Θ i \Theta_i Θi 是在过去的训练时间 i i i 中参数的配置方式。当 Θ \Theta Θ 时,这个附加部分会惩罚训练速度时间变化太剧烈了。

(4) 单侧标签平滑

在输入鉴别器时,不要提供 1 和 0 标签,而是使用 0.9 和 0.1 等软化值。它被证明可以减少网络的脆弱性。

(5) 虚拟批量规范化 (VBN)

每个数据样本都基于固定批次(“参考批次”)的数据进行归一化,而不是在其小批量中进行归一化。参考批次在开始时选择一次,并在整个训练过程中保持不变。

Theano 实现:openai/improved-gan

(6) 添加噪音。

根据上一节的讨论,我们现在知道了 p r p_r pr p g p_g pg在高维空间中是不相交的,这会导致梯度消失的问题。为了人为地“分散”分布,并为两个概率分布创造更高的重叠机会,一种解决方案是在判别器的输入上添加连续噪声D
.

(7)使用更好的分布相似度指标

香草 GAN 的损失函数测量 p r p_r pr p g p_g pg.当两个分布不相交时,此指标无法提供有意义的值。

Wasserstein 度量被提议取代 JS 散度,因为它具有更平滑的值空间。在下一节中查看更多内容。

四、瓦瑟斯坦(Wasserstein)WGAN

4.1 什么是 Wasserstein 距离?

Wasserstein 距离是两个概率分布之间距离的度量。 它也被称为推土机距离,是 EM 距离的缩写,因为它可以非正式地解释为以一种概率分布的形状移动和转换一堆泥土到另一种分布形状的最小能量成本。成本的量化公式为:移动的污垢量 x 移动距离。

让我们首先看一个简单的情况,其中概率域是离散的。例如,假设我们有两个分布P和Q,每个都有四堆泥土,总共有十铲泥土。每个土堆中的铲子数量分配如下:
P 1 = 3 , P 2 = 2 , P 3 = 1 , P 4 = 4 Q 1 = 1 , Q 2 = 2 , Q 3 = 4 , Q 4 = 3 P_1 = 3, P_2 = 2, P_3 = 1, P_4 = 4\\ Q_1 = 1, Q_2 = 2, Q_3 = 4, Q_4 = 3 P1=3,P2=2,P3=1,P4=4Q1=1,Q2=2,Q3=4,Q4=3

为了改变P看起来像Q,如图 7 所示,我们:

  • 第一次移动 2 铲子从 P 1 P_1 P1 P 2 P_2 P2 = > ( P 1 , Q 1 ) => (P_1, Q_1) =>(P1,Q1)相配
  • 第二次移动 2 铲子从自 P 2 P_2 P2 P 3 P_3 P3 = > ( P 2 , Q 3 ) => (P_2, Q_3) =>(P2,Q3)相配。
  • 最后从中移动 1 铲子自 Q 3 Q_3 Q3 Q 4 Q_4 Q4 = > ( P 3 , Q 3 ) => (P_3, Q_3) =>(P3,Q3) = > ( P 4 , Q 4 ) => (P_4, Q_4) =>(P4,Q4)相配。
    如果我们贴上标签,要支付的成本要使 P i P_i Pi Q i Q_i Qi匹配为 δ i \delta_i δi;我们会有 δ i + 1 = δ i + P i − Q i \delta_{i+1} = \delta_i + P_i - Q_i δi+1=δi+PiQi,在示例中:
    δ 0 = 0 δ 1 = 0 + 3 − 1 = 2 δ 2 = 2 + 2 − 2 = 2 δ 3 = 2 + 1 − 4 = − 1 δ 4 = − 1 + 4 − 3 = 0 \begin{aligned} \delta_0 &= 0\\ \delta_1 &= 0 + 3 - 1 = 2\\ \delta_2 &= 2 + 2 - 2 = 2\\ \delta_3 &= 2 + 1 - 4 = -1\\ \delta_4 &= -1 + 4 - 3 = 0 \end{aligned} δ0δ1δ2δ3δ4=0=0+31=2=2+22=2=2+14=1=1+43=0

最后,推土机的距离是 W = ∑ ∣ δ i ∣ = 5 W = \sum \vert \delta_i \vert = 5 W=δi=5
.
在这里插入图片描述Fig. 7. Step-by-step plan of moving dirt between piles in P and Q to make them match.
图 7.在桩之间移动泥土的分步计划P和Q使它们匹配。

在处理连续概率域时,距离公式变为:
W ( p r , p g ) = inf ⁡ γ ∼ Π ( p r , p g ) E ( x , y ) ∼ γ [ ∥ x − y ∥ ] W(p_r, p_g) = \inf_{\gamma \sim \Pi(p_r, p_g)} \mathbb{E}_{(x, y) \sim \gamma}[\| x-y \|] W(pr,pg)=infγΠ(pr,pg)E(x,y)γ[xy]

上式中, Π ( p r , p g ) \Pi(p_r, p_g) Π(pr,pg)表示 p r p_r pr p g p_g pg之间所有可能的联合概率分布的集合。特定的联合分布 γ ∈ Π ( p r , p g ) \gamma \in \Pi(p_r, p_g) γΠ(pr,pg) 概述了污垢运输计划,类似于离散示例,但在连续概率空间内。具体来说, γ ( x , y ) \gamma(x, y) γ(x,y)表示从点 x x x输送到点 y y y的污垢比例,确保 y y y的分布保持一致。因此, x x x 上的边际分布总计为 p g p_g pg,表示为 ∑ x γ ( x , y ) = p g ( y ) \sum_{x} \gamma(x, y) = p_g(y) xγ(x,y)=pg(y),这意味着在从所有可能的地方运输了计划数量的污垢之后 x x x 到给定的 y y y,结果与 y y y 处的分布 p g p_g pg 匹配。相反, y y y 的总和得到 ∑ y γ ( x , y ) = p r ( x ) \sum_{y} \gamma(x, y) = p_r(x) yγ(x,y)=pr(x)

具体处理时 x x x 作为起点, y y y 作为目的地,移动的泥土总量为 γ ( x , y ) \gamma(x, y) γ(x,y),行进距离为 ∣ x − y ∣ | x-y | xy 因此成本是 γ ( x , y ) ⋅ ∣ x − y ∣ \gamma(x, y) \cdot | x-y | γ(x,y)xy。所有 ( x , y ) (x,y) (x,y) 的平均预期成本 对可以很容易地计算为:

∑ x , y γ ( x , y ) ∥ x − y ∥ = E x , y ∼ γ ∥ x − y ∥ \sum_{x, y} \gamma(x, y) \| x-y \| = \mathbb{E}_{x, y \sim \gamma} \| x-y \| x,yγ(x,y)xy=Ex,yγxy

最后,我们将所有污垢移动解决方案的成本中最小的一个作为 EM 距离。在 Wasserstein 距离的定义中,inf (infimum,也称为最大下限)表示我们只对最小的成本感兴趣。

4.2 为什么 Wasserstein 优于 JS 或 KL 背离?

即使两个分布位于没有重叠的低维流形中,Wasserstein 距离仍然可以提供有意义且平滑的表示之间的距离。

WGAN的论文用一个简单的例子来说明这个想法。

假设我们有两个概率分布,P和Q:
∀ ( x , y ) ∈ P , x = 0 and  y ∼ U ( 0 , 1 ) ∀ ( x , y ) ∈ Q , x = θ , 0 ≤ θ ≤ 1 and  y ∼ U ( 0 , 1 ) \forall (x, y) \in P, x = 0 \text { and } y \sim U(0, 1) \forall (x, y) \in Q, x = \theta, 0 \leq \theta \leq 1 \text{ and } y \sim U(0, 1) (x,y)P,x=0 and yU(0,1)(x,y)Q,x=θ,0θ1 and yU(0,1)
在这里插入图片描述
图 8.两者之间没有重叠P和Q,在θ≠0
θ ≠ 0 \theta \neq 0 θ=0时:
D K L ( P ∥ Q ) = ∑ x = 0 , y ∼ U ( 0 , 1 ) 1 ⋅ log ⁡ 1 0 = + ∞ D K L ( Q ∥ P ) = ∑ x = θ , y ∼ U ( 0 , 1 ) 1 ⋅ log ⁡ 1 0 = + ∞ D J S ( P , Q ) = 1 2 ( ∑ x = 0 , y ∼ U ( 0 , 1 ) 1 ⋅ log ⁡ 1 1 / 2 + ∑ x = 0 , y ∼ U ( 0 , 1 ) 1 ⋅ log ⁡ 1 1 / 2 ) = log ⁡ 2 W ( P , Q ) = ∣ θ ∣ \begin{aligned} D_{KL}(P \| Q) &= \sum_{x=0, y \sim U(0, 1)} 1 \cdot \log\frac{1}{0} = +\infty \\ D_{KL}(Q \| P) &= \sum_{x=\theta, y \sim U(0, 1)} 1 \cdot \log\frac{1}{0} = +\infty \\ D_{JS}(P, Q) &= \frac{1}{2}(\sum_{x=0, y \sim U(0, 1)} 1 \cdot \log\frac{1}{1/2} + \sum_{x=0, y \sim U(0, 1)} 1 \cdot \log\frac{1}{1/2}) = \log 2\\ W(P, Q) &= |\theta| \end{aligned} DKL(PQ)DKL(QP)DJS(P,Q)W(P,Q)=x=0,yU(0,1)1log01=+=x=θ,yU(0,1)1log01=+=21(x=0,yU(0,1)1log1/21+x=0,yU(0,1)1log1/21)=log2=θ

但当 θ = 0 \theta = 0 θ=0,两个分布完全重叠:
D K L ( P ∥ Q ) = D K L ( Q ∥ P ) = D J S ( P , Q ) = 0 W ( P , Q ) = 0 = ∣ θ ∣ \begin{aligned} D_{KL}(P \| Q) &= D_{KL}(Q \| P) = D_{JS}(P, Q) = 0\\ W(P, Q) &= 0 = \lvert \theta \rvert \end{aligned} DKL(PQ)W(P,Q)=DKL(QP)=DJS(P,Q)=0=0=θ

当两个分布不相交时, D K L D_{KL} DKL 给我们无穷大。 D J S D_{JS} DJS 的值突然跳跃,在 θ = 0 \theta = 0 θ=0 处不可微分。只有 Wasserstein 度量提供了平滑的度量,这对于使用梯度下降的稳定学习过程非常有帮助。

4.3 使用 Wasserstein 距离作为 GAN 损失函数

穷尽 Π ( p r , p g ) \Pi(p_r, p_g) Π(pr,pg) 中所有可能的联合分布来计算 inf ⁡ γ ∼ Π ( p r , p g ) \inf_{\gamma \sim \Pi(p_r, p_g)} infγΠ(pr,pg) 是很困难的。因此,作者提出了基于 Kantorovich-Rubinstein 对偶性的公式的巧妙转换:

W ( p r , p g ) = 1 K sup ⁡ ∥ f ∥ L ≤ K E x ∼ p r [ f ( x ) ] − E x ∼ p g [ f ( x ) ] W(p_r, p_g) = \frac{1}{K} \sup_{\| f \|_L \leq K} \mathbb{E}_{x \sim p_r}[f(x)] - \mathbb{E}_{x \sim p_g}[f(x)] W(pr,pg)=K1fLKsupExpr[f(x)]Expg[f(x)]

在这里 sup(supremum)与inf(infimum)相反;我们想要测量最小上限,或者更简单地说,最大值。

4.4 利普希茨连续性Lipschitz continuity?

函数 f f f在Wasserstein度量的新形式中,要求满足 ∣ f ∣ L ≤ K | f |_L \leq K fLK,这意味着它应该是 K-Lipschitz 连续的。

实值函数 f : R → R f: \mathbb{R} \rightarrow \mathbb{R} f:RR被称为K-Lipschitz 连续,如果存在实常数 K ≥ 0 K \geq 0 K0,这样,对于所有 x 1 , x 2 ∈ R x_1, x_2 \in \mathbb{R} x1,x2R,
∣ f ( x 1 ) − f ( x 2 ) ∣ ≤ K ∣ x 1 − x 2 ∣ \lvert f(x_1) - f(x_2) \rvert \leq K \lvert x_1 - x_2 \rvert f(x1)f(x2)∣Kx1x2

这里K被称为函数 f ( ⋅ ) f(\cdot) f()的 Lipschitz 常数.随处可微的函数是 Lipschitz 连续的,有界限。导数估计为 ∣ f ( x 1 ) − f ( x 2 ) ∣ ∣ x 1 − x 2 ∣ \frac{\lvert f(x_1) - f(x_2) \rvert}{\lvert x_1 - x_2 \rvert} x1x2f(x1)f(x2)∣,然而,Lipschitz 连续函数可能不是在所有地方都是可微的,例如 f ( x ) = ∣ x ∣ f(x) = \lvert x \rvert f(x)=x.

解释变换是如何在 Wasserstein 距离公式上发生的,这本身就值得写一篇长文,所以在这里跳过了细节。如果您对如何使用线性规划计算 Wasserstein 度量感兴趣,或者如何根据 Kantorovich-Rubinstein 对偶性将 Wasserstein 度量转换为其对偶形式,请阅读这篇很棒的文章。

假设这个函数 f f f来自 K-Lipschitz 连续函数家族, { f w } w ∈ W \{ f_w \}_{w \in W} {fw}wW,参数化为 w w w.在改进的 Wasserstein-GAN 中,“鉴别器”模型用于学习 w w w,找到一个好的 f w f_w fw;损失函数配置为测量Wasserstein 之间的距离 p r p_r pr p g p_g pg.
L ( p r , p g ) = W ( p r , p g ) = max ⁡ w ∈ W E x ∼ p r [ f w ( x ) ] − E z ∼ p r ( z ) [ f w ( g θ ( z ) ) ] L(p_r, p_g) = W(p_r, p_g) = \max_{w \in W} \mathbb{E}_{x \sim p_r}[f_w(x)] - \mathbb{E}_{z \sim p_r(z)}[f_w(g_\theta(z))] L(pr,pg)=W(pr,pg)=wWmaxExpr[fw(x)]Ezpr(z)[fw(gθ(z))]

因此,“鉴别者”不再是将假样本与真样本区分开来的直接批评者。相反,它被训练来学习K-Lipschitz 连续函数,用于帮助计算 Wasserstein 距离。随着训练中损失函数的减小,Wasserstein 距离变小,生成器模型的输出越来越接近真实数据分布。

一个大问题是维护K-Lipschitz 连续性 f w f_w fw在培训期间,以使一切顺利。论文提出了一个简单但非常实用的技巧:每次梯度更新后,将权重 w 钳制到一个小窗口,例如 [ − 0.01 , 0.01 ] [-0.01, 0.01] [0.01,0.01],从而得到紧凑的参数空间 W 和 f w f_w fw 由此获得其下限和上限以保持 Lipschitz 连续性。
在这里插入图片描述
图 9.Wasserstein 生成对抗网络算法.(图片来源:Arjovsky,Chintala和Bottou,2017。)
与原始GAN算法相比,WGAN进行了以下更改:

  • 每次对批评函数进行梯度更新后,将权重限制在一个小的固定范围 [ − c , c ] [-c,c] [c,c] 内。
  • 使用从 Wasserstein 距离导出的新损失函数,不再使用对数。 “判别器”模型并不是直接批评者,而是估计真实数据分布和生成数据分布之间的 Wasserstein 度量的帮助者。
  • 根据经验,作者推荐批评家使用 RMSProp 优化器,而不是基于动量的优化器(例如 Adam),后者可能会导致模型训练不稳定。我还没有看到关于这一点的明确的理论解释。

可悲的是,Wasserstein GAN 并不完美。甚至原始WGAN论文的作者也提到“权重削波显然是强制执行Lipschitz约束的一种可怕方式”(哎呀!WGAN仍然受到训练不稳定、权重削波后收敛缓慢(当剪切窗口太大时)和梯度消失(当剪切窗口太小时)的问题。

Gulrajani 等人,2017 年讨论了一些改进,即用梯度惩罚精确地替换权重削波。我会把它留到以后的帖子。

五、示例:创建新的口袋妖怪!

只是为了好玩,我在一个小数据集 Pokemon sprites 上尝试了 carpedm20/DCGAN-tensorflow。该数据集只有 900 多张口袋妖怪图像,包括不同级别的相同口袋妖怪物种。

让我们看看该模型能够创建哪些类型的新口袋妖怪。 不幸的是,由于训练数据很小,新的口袋妖怪只有粗糙的形状,没有细节。随着训练时间的增加,形状和颜色确实看起来更好!万岁!

在这里插入图片描述

图 10.在一组口袋妖怪精灵图像上训练 carpedm20/DCGAN-tensorflow。在训练周期 = 7、21、49 之后列出示例输出。
如果您对 carpedm20/DCGAN-tensorflow 的注释版本以及如何修改它以训练 WGAN 和具有梯度惩罚的 WGAN 感兴趣,请查看 lilianweng/unified-gan-tensorflow。

被引用为:

@article{weng2017gan,title   = "From GAN to WGAN",author  = "Weng, Lilian",journal = "lilianweng.github.io",year    = "2017",url     = "https://lilianweng.github.io/posts/2017-08-20-gan/"
}

@misc{weng2019gan,title={From GAN to WGAN},author={Lilian Weng},year={2019},eprint={1904.08994},archivePrefix={arXiv},primaryClass={cs.LG}
}

引用
[1] Goodfellow, Ian, et al. “生成对抗网络”。NIPS,2014 年。
[2] 蒂姆·萨利曼斯(Tim Salimans)等人,“训练gans的改进技术”。NIPS 2016。
[3] 马丁·阿约夫斯基(Martin Arjovsky)和莱昂·博图(Léon Bottou)。“朝着训练生成对抗网络的原则性方法迈进。”arXiv 预印本 arXiv:1701.04862 (2017)。
[4] 马丁·阿约夫斯基、苏米特·钦塔拉和莱昂·博图。“Wasserstein GAN。”arXiv 预印本 arXiv:1701.07875 (2017)。
[5] 伊沙恩·古拉贾尼、法鲁克·艾哈迈德、马丁·阿约夫斯基、文森特·杜穆林、亚伦·库尔维尔。改进了 wasserstein gans 的培训。arXiv 预印本 arXiv:1704.00028 (2017)。
[6] 计算变换下的地球移动器距离
[7] Wasserstein GAN 和 Kantorovich-Rubinstein 二元性
[8] zhuanlan.zhihu.com/p/25071913
[9] 费伦茨·胡扎尔.“如何(不)训练你的生成模型:计划采样、可能性、对手?。”arXiv 预印本 arXiv:1511.05101 (2015)。

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

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

相关文章

mysql社区版可以用的聚类函数有哪些

MySQL社区版支持一系列聚类函数(或称为聚合函数),这些函数用于对一组值执行计算并返回单个值。以下是MySQL中常用的一些聚类函数,并附带简要描述和相关数字或信息(如适用): SUM() 功能&#x…

53.Python-web框架-Django开始第一个应用的多语言

针对上一篇的功能&#xff0c;本次仅对页面做了多语言&#xff0c;大家可以看看效果。 51.Python-web框架-Django开始第一个应用的增删改查-CSDN博客 目录 部门列表 新增部门 编辑部门 部门列表 源码 <!DOCTYPE html> {% load static %} {% load i18n %} <html …

JAVA开发 使用Apache PDFBox库生成PDF文件,绘制表格

1. 表格位置定点 2.执行效果展示&#xff08;截取PDF文件图片&#xff09; 3.执行代码 当我们使用Apache PDFBox库在PDF文件中创建带有表格的内容&#xff0c;需要遵循几个步骤。PDFBox本身并没有直接的API来创建表格&#xff0c;但我们可以通过定位文本、绘制线条和单元格矩形…

shell编程基础(第16篇:命令是什么?有哪些注意事项)

前言 前面我们已经使用过各种各样的命令&#xff0c;那么命令到底是什么呢&#xff1f;我们又该怎么理解该术语&#xff1f; 什么是命令&#xff1f; 命令是command的中文翻译&#xff0c;能在命令行中执行的是命令。因为早期的计算机只有文字界面&#xff0c;命令是程序&#…

高速公路智能管理系统:构建安全畅通的数字大动脉

随着城市化进程的加速和交通需求的增长&#xff0c;高速公路系统作为城市交通的重要组成部分&#xff0c;正承担着越来越多的交通运输任务。为了提升高速公路的安全性、便捷性和智能化管理水平&#xff0c;高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

ExoPlayer 学习笔记

https://www.51cto.com/article/777840.html ExoPlayer支持多种媒体格式和流媒体协议的播放器 播放视频&#xff1a;player.play()暂停视频&#xff1a;player.pause()停止播放&#xff1a;player.stop() Media3 ExoPlayer | Android media | Android Developers implem…

双向链表详解及C++实现

一、引言 链表是一种常见的数据结构&#xff0c;它允许动态地分配内存空间&#xff0c;并通过指针&#xff08;或引用&#xff09;将数据元素连接在一起。双向链表作为链表的一种&#xff0c;除了拥有普通链表的特性外&#xff0c;每个节点还包含两个指针&#xff1a;一个指向…

Leetcode 剑指 Offer II 082.组合总和 II

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个可能有重复数字的整数数组 candidates 和一个目标数 tar…

能耗监控与管理平台

在当今社会&#xff0c;随着工业化、城市化的快速发展&#xff0c;能源消耗问题日益凸显&#xff0c;节能减排已成为全社会共同关注的焦点。在这个背景下&#xff0c;一款高效、智能的能耗监控与管理平台显得尤为重要。 一、HiWoo Cloud平台的概念 HiWoo Cloud是一款集数据采…

六大维度全面焕新升级!麒麟信安服务器操作系统V3.6.1引领未来计算

昨日&#xff0c;openEuler 24.03 LTS 正式发布&#xff0c;麒麟信安作为openEuler社区重要贡献者和参与者&#xff0c;充分发挥自身在国产操作系统领域的技术优势&#xff0c;在打造安全可靠、极致体验的操作系统上与社区共同努力&#xff0c;同步推出服务器操作系统V3.6.1&am…

OpenGL3.3_C++_Windows(7)

演示 最终演示效果 ​​​​ 冯氏光照 光照原理&#xff1a;对于向量相乘默认为点乘&#xff0c;如果*lightColor(1.0f, 1.0f, 1.0f);白光&#xff0c;值不变物体的颜色显示原理&#xff1a;不被物体吸收的光反射&#xff0c;也就是由白光分解后的一部分&#xff0c;因此&…

【bugfix】解决Redis缓存键清理问题

前言 在Spring Boot应用中集成Redis作为缓存存储时&#xff0c;合理配置RedisTemplate是确保数据正确存储和检索的关键。本文将通过对比分析一段初始存在问题的Redis配置代码及其修正后的版本&#xff0c;探讨如何正确处理Redis键前缀&#xff0c;以避免清理缓存时遇到的问题。…

Cask ‘oraclexxx‘ is unavailable: No Cask with this name exists.

brew search oracle-jdk或brew search --cask oracle-jdk 原因&#xff1a;Homebrew官方仓库不再维护多个旧版本的OracleJDK 不推荐使用Homebrew环境安装JDK //指定版本安装 brew install --cask temurin17 //设置 JAVA_HOME 环境变量 //找到安装的JDK 版本的路径 /usr/lib…

探索测试分享

1. “器” 项目中的实践——我们是怎么做的 本章将带你身历其境的感受到思想和方法是如何具体使用在项目里的 1.如何挖掘探索性测试的探索点&#xff0c;在任何阶段都可以利用探索测试策略找到可探索的点&#xff0c;发现产品中的bug&#xff0c;或明显或隐含。 “器”的应用…

分布式管理

一、基本概念 分布式管理是指在一个由多个独立计算机节点组成的分布式系统中&#xff0c;通过对这些节点的资源、服务、数据进行统一的协调、控制和优化&#xff0c;以实现整个系统的高效、稳定、可靠运行。 二、核心原理 无中心化&#xff1a;分布式系统没有一个中心节点来…

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果

ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果 核心代码完整代码在线示例ArcGIS Maps SDK for JavaScript 从 4.29 开始增加 RenderNode 类,可以添加数据以及操作 FBO(ManagedFBO); 通过操作 FBO,可以通过后处理实现很多效果,官方提供了几个示例,…

利用74HC165实现8路并行输入口的扩展

代码&#xff1a; #include <mega16.h>// Declare your global variables here #define hc165_clk PORTB.0 #define hc165_lp PORTB.1 #define hc165_out PINB.2unsigned char read_hc165(void) {unsigned char data0,i,temp0x80;hc165_lp0;hc165_lp1; for(i0;i<7;i)…

汇编:内联汇编和混合编程

C/C内联汇编 C/C 内联汇编&#xff08;Inline Assembly&#xff09;是一种在C或C代码中嵌入汇编语言指令的方法&#xff0c;以便在不离开C/C环境的情况下利用汇编语言的优势进行性能优化或执行特定的硬件操作。以下是一些详细的说明和示例&#xff0c;展示如何在C和C代码中使用…

c++ 中 namespace包的 全局变量 c++ 中 static 全局变量 会给初值吗

在 C 中&#xff0c;命名空间&#xff08;namespace&#xff09;中的全局变量会被自动初始化为零值&#xff08;zero-initialized&#xff09;&#xff0c;除非显式地为其指定初始值。与静态全局变量类似&#xff0c;命名空间中的全局变量在程序启动时会被初始化&#xff0c;其…

zookeeper介绍 和 编译踩坑

zookeeper 分布式协调服务 ZooKeeper原理及介绍 - 鹿泉 - 博客园 Zookeeper是在分布式环境中应用非常广泛&#xff0c;它的优秀功能很多&#xff0c;比如分布式环境中全局命名服务&#xff0c;服务注册中心&#xff0c;全局分布式锁等等。 本项目使用其分布式服务配置中心&am…