基于生成对抗网络(GAN)生成动漫头像

在这里插入图片描述

图为 WGAN-GP 训练1000 epoch的过程

引言

生成对抗网络(GAN)是深度学习领域的一项重大创新,其独特之处在于通过生成器和判别器之间的对抗训练,实现了对数据的无监督学习。这种创新性的训练方式使得 GAN 在图像生成、图像修复、超分辨率等领域取得了显著的成效,为人工智能带来了新的突破。

GAN 的重要性在于其突破了传统生成模型的限制,通过引入对抗训练的思想,使得生成器能够学习到更加真实的样本分布。这不仅提高了生成器的生成质量,还为解决许多实际问题提供了新的思路和方法。

同时,GAN 的应用广泛性也是其一大特点。从最初的图像生成,到后来的图像修复、超分辨率、风格迁移等,GAN 不断拓展着其应用领域。如今,GAN已经成为计算机视觉和深度学习领域的重要分支,被广泛应用于图像处理、自然语言处理、语音识别等领域。

1、Generative Adversarial Networks

Generative Adversarial Networks(GAN)是由 lan Goodfellow 等人在 2014 年提出的,至今已成为计算机视觉领域最重要、应用最广泛的概念之一。其概念出自论文《Generative Adversarial Networks》[1]。GAN 网络最大的创新,在于利用博弈论的思想,提出了对抗学习的概念,分别构造了用于生成图片的生成网络,和用于判断图片是否是 AI 生成的判别网络。生成网络的目标是生成足够以假乱真的图片,以欺骗判别网络。判别网络的目标则是尽可能区分出 AI 生成的图片和真实的图片。两者有着近乎相反的目标,相互对抗,不断学习。

1.1 GAN 网络的训练过程

GAN 网络的训练过程比较特殊,两个网络既要互相关联,但又有着不同的目标,为了实现这个过程,原作者为两个网络分别定义了不同的损失函数。

E[logD(x)]+E[log(1-D(G(z))](1)
E[log(1-D(G(z))] (2)

其中 D 代表判别网络模型,G 代表生成网络模型,x 表示真实图片,z 表示随机噪声。公式 1 为判别网络的损失函数,公式 2 为生成网络的损失函数。模型利用不同的损失函数来分别更新网络权重,更新判别器的时候生成器保持不变,更新生成器的时候判别器保持不变。其模型结构和优化示意图如图 1。
在这里插入图片描述
图 1: GAN 网络主要由生成网络和判别网络两部分组成,生成网络输入随机噪声,生成图像。判别网络对生成的图像以及真实图像进行判断。然后利用判别网络的输出数据分别对生成网络和判别网络进行梯度更新。

1.2 GAN 网络训练过程中存在的问题

GAN 网络的设计思想很巧妙,但是在实际训练过程中却有着比较大的挑战,其训练难点主要有以下几个方面:

  • 超参数敏感。GAN 网络对与超参数很敏感,尤其是对于学习率,微量的调整可能会导致很大的差别,甚至导致 GAN 无法训练。
  • 无明确衡量指标。GAN 网络在训练过程中没有很好的判断依据,一般模型可以通过 loss 函数和 acc 来判断,但是 GAN 网络没有 acc 指标,并且 loss 函数在训练过程中会存在波动,并不是 loss 越小越好,因此在训练过程中对模型的质量无法评价。
  • 梯度消失、爆炸问题。GAN 网络在训练过程中要尽可能保持判别器和生成器的能力相近,两者的性能相差太大,会产生梯度消失或者梯度爆炸的问题,从而导致模型无法训练。
  • 模式坍缩和模式崩溃问题。模式坍缩问题是指模型在训练过程中,因为某些原因导致模型生成的图像变得过于单一,只能生成几类固定的图片,缺乏多样性。而模式崩溃则是模型的输出永远是相同的图片,完全失去多样性。

1.3 GAN 网络的训练技巧

  • 较小的学习率。学习率过大容易导致 GAN 模型无法训练,所以一般设置较小的学习率。但是这样会导致训练次数的增加,所以很多情况下GAN 网络要达到好的效果,常常要达到几万次的迭代。
  • 训练过程中输出图像。虽然 GAN 网络训练过程中无明确衡量指标,但是可以在训练过程中输出图像,通过人工来判断当前模型的质量。
  • 标签加入噪声。在训练过程中,通过对标签增加一些噪声来提升模型的稳定性。例如 0 代表假,1 代表真,通过加入随机噪声,使假标签分布在[0,0+n],真标签分布在[1-n,1],可以在一定程度上对模型的稳定性有所提升。还可以利用退火算法的思想,随着模型的训练过程逐步减少噪声 n 的范围,直至无噪声。

2、Deep Convolutional GAN

Deep Convolutional GAN(DCGAN) 是一种深度卷积生成对抗网络,是由Radford 等人在 2015 年的论文《Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》[2]中提出的 。相较于 GAN 网络,DCGAN 主要在网络结构上进行了创新,将原 GAN 中使用的全连接层替换成了更适合图像处理的卷积层和反卷积层,能够生成更高质量的图像(此外还包括一些关于 BN 和 Pooling 的调整)。其他关于损失函数,训练方式等基本与 GAN相同。DCGAN 生成网络部分的模型结构如图 2。
在这里插入图片描述
图 2: DCGAN 生成网络模型图,通过反卷积将 100 维的噪声生成 64*64*3 的图像

DCGAN 在训练方面与 GAN 相差不大,原 GAN 中存在的问题在 DCGAN 中也同样存在。例如无明确衡量标,训练过程中存在梯度消失或者梯度爆炸的问题,以及模式坍缩问题等。具体论文的复现和实验表现,会在第六部分的实验对比中统一讲述。

3、Unrolled GAN

Unrolled GAN 是由 Luke Metz 等人在 2017 年的一篇论文《Unrolled Generative Adversarial Networks》[3]中提出的,主要解决的是 GAN 网络在训练过程中的模式坍缩和模式崩溃的问题。该论文的观点认为,模式坍缩的根本原因是因为判别网络对于生成网络的围追堵截造成,判别网络的每一次判别评价,都会导致生成网络从一个生成模式,跳跃到另一个生成模式,从而导致在 GAN的训练过程中,不论在哪一步停止,都会存在模式坍缩甚至模式崩溃的问题。

为了解决这个问题,论文中提出了一种思想,只要让生成器能够尽可能的了解到判别器后续几步会如何优化,那么就可以尽量避免在模式间相互追逐导致的模式坍缩。于是作者基于此提出了一种新的训练方式,不再是判别器和生成器交叉迭代,而是在判别器更新 K 步后,用 K 步后的 Loss 更新生成器,判别器的更新则指使用第一次的 Loss,更新方式如图 3。
在这里插入图片描述
图 3: Unrolled GAN 在训练过程中展开三步,并用展开三步后的梯度更新生成器(蓝色线),展开过程中使用随机梯度下降更新代理判别器(绿色线),之后再用第一步的梯度更新真实判别器(红色线)。

在论文中,对原判别器构造了一个代理判别器,先使用 SGD 优化对代理判别器 D 进行了 K 次优化,优化过程如下:

θ D 0 = θ D {\theta_D^0 = \theta_D} θD0=θD (3)
θ D k + 1 = θ D k + η k d f ( θ G , θ D k ) d θ D k {\theta_D^{k+1} = \theta_D^k + \eta^k \frac{df(\theta_G, \theta_D^k)}{d \theta_D^k}} θDk+1=θDk+ηkdθDkdf(θG,θDk) (4)
θ D ∗ ( θ G ) = lim ⁡ k → + ∞ θ D k {\theta_D^*(\theta_G) = \lim_{k\rightarrow+\infty} \theta_D^k } θD(θG)=limk+θDk (5)

进行 K 次展开,每一次对判别器的梯度进行优化。作者认为当 K 趋于无穷的时候,判别器的梯度为最合理的优化梯度,也就是公式 5 中的 θ D ∗ ( θ G ) {\theta_D^*(\theta_G)} θD(θG) 。展开 K次后,使用第 K 次的梯度更新生成器网络,使用第一次的梯度更新判别器网络,如公式 6,公式 7。

θ G ← θ G − η d f k ( θ G , θ D ) d θ G {\theta_G \leftarrow \theta_G - \eta\frac{df_k(\theta_G, \theta_D)}{d \theta_G} } θGθGηdθGdfk(θG,θD) (7)
θ D ← θ D + η d f ( θ G , θ D ) d θ D {\theta_D \leftarrow \theta_D + \eta\frac{df(\theta_G, \theta_D)}{d \theta_D } } θDθD+ηdθDdf(θG,θD) (6)

在本作中,Unrolled GAN 在模式坍缩的问题上有一定缓解,但是并没有彻底解决掉模式坍缩的问题,可能由于本作实验中展开步数比较低导致。此外,因为引入了预测 K 步的概念,导致训练的时间和资源消耗都比较大,也是需要考虑的因素。

4、Wasserstein GAN

Wasserstein GAN(WGAN)是 Martin Arjovsky 在 2017 年的一篇论文中提出。事实上,WGAN 的思想可以说是横跨过了两篇论文,在第一篇论文《Towards Principled Methods for Training Generative Adversarial Networks》[4]中,作者从公式定理出发,从理论上分析了原始 GAN 网络存在的问题,并给出了一些模型训练的指导方法;在第二篇论文《Wasserstein GAN》[5]中,作者继续从该点出发,通过推理,最终得出使用 Wasserstein 距离来替代原来损失函数的方案,解决了 GAN 模型训练不稳定、容易梯度消失/爆炸,以及无明确衡量指标等问题。

4.1 GAN 网络问题的关键

在《Towards Principled Methods for Training Generative Adversarial Networks》中,作者对原始 GAN 网络的损失函数公式(公式 8)进行推导,得出原始 GAN 网络的损失函数,其本质是求两个概率分布的 JS 散度(公式 10)。

E[logD(x)] + E[log(1 − D(G(z))] (8)
K L ( P 1 ∣ ∣ P 2 ) = 1 2 E [ l o g P 1 P 2 ] {KL(P_1||P_2) = \frac{1}{2} E[log \frac{P_1}{P_2}]} KL(P1∣∣P2)=21E[logP2P1] (9)
J S ( P 1 ∣ ∣ P 2 ) = 1 2 K L ( P 1 ∣ ∣ P 1 + P 2 2 ) + 1 2 K L ( P 2 ∣ ∣ P 1 + P 2 2 ) {JS(P_1||P_2) = \frac{1}{2} KL(P_1|| \frac{P_1+P_2}{2}) + \frac{1}{2} KL(P_2|| \frac{P_1+P_2}{2})} JS(P1∣∣P2)=21KL(P1∣∣2P1+P2)+21KL(P2∣∣2P1+P2) (10)

其中 P1 和 P2 分别代表真实样本和生成器生成的样本分布,将两者看作是高维空间中的低纬流形的支撑集。作者从数学的角度分析出,JS 散度(损失函数)为常数的概率取决于两个流形的测度为 0 的概率,而测度为 0 的概率相当大,也就是说 P1 和 P2 分布几乎没有重叠。此时 JS 散度(损失函数)为常数,就会导致梯度为 0,这样就解释了为什么会存在训练不稳定和梯度消失的问题。以及标签加噪声会使模型训练过程中较为稳定,原因是噪声影响了低维流形的分布,使得测度变大,不容易产生梯度为 0 的情况。

4.2 Wasserstein 距离

作者在《Wasserstein GAN》中,针对如何解决低维流形测度为 0 的情况,提出了使用 Wasserstein 距离代替原来损失函数的方案,如公式 11 所示。

W ( P r ∣ ∣ P g ) = 1 K s u p ∣ ∣ f ∣ ∣ L < = K E P r [ f ( x ) ] − E P G [ f ( x ) ] {W(P_r||P_g) = \frac{1}{K} sup_{||f||_L <=K} E_{P_r}[f(x)] - E_{P_G}[f(x)]} W(Pr∣∣Pg)=K1sup∣∣fL<=KEPr[f(x)]EPG[f(x)] (11)

为了保证 Lipschitz 连续,需要在连续函数 f 上面额外施加一个限制,要求存在一个常数 K≥0,使得定义域内的任意两个元素 x 1 x_1 x1 x 2 x_2 x2 都满足

∣ f ( x 1 ) − f ( x 2 ) ∣ < = K ∣ x 1 − x 2 ∣ {|f(x_1) - f(x_2)|<= K |x_1 - x_2|} f(x1)f(x2)<=Kx1x2(12)

所以在 WGAN 中,每次更新判别器权重以后,需要对权重进行截断,使其值处于[-K,K]的范围内。

4.3 Wasserstein GAN 存在的问题

WGAN 的模型在实际调试过程中较为困难,由于 GAN 本身对于超参数很敏感,而 WGAN 又引入了权重上限 K 这个超参数,所以在训练过程中参数的调整比较麻烦。同时由于引入权重的截断,导致模型的收敛速度会更慢。在本作的实验中,WGAN 并没有完全的解决掉模式坍缩的问题。但是在图像的生成质量上,确实比 Unrolled GAN 和 DCGAN 更进一步。

5、WGAN-GP

WGAN-GP,出自 2017 年的论文《Improved Training of Wasserstein GANs》[7]。文中针对 WGAN 中的速度收敛慢和调参困难的问题,使用梯度惩罚来代替 WGAN 中的权重截断,使得模型更易训练,也更加稳定。

L = L d + λ ∗ E [ ( ∣ ∣ g r a d i e n t ( D ( G ( z ) ) ) ∣ ∣ p − K ) 2 ] {L = Ld + \lambda * E[(|| gradient(D(G(z))) ||_p - K)^2]} L=Ld+λE[(∣∣gradient(D(G(z)))pK)2] (13)

其中,z 为随机噪声,G(z)为生成器生成的假样本,gradient 表示梯度,λ 为权重因子,p 为梯度的范数,K 为限制条件。WGAN-GP 模型在训练过程中比较稳定,模型的收敛速度也比较快,生成的图像质量较高,并且没有发现明显的模式坍缩的现象。

6、四种 GAN 网络实验结果对比

6.1 实验环境

本次实验均基于相同的实验环境下进行,操作系统为 ubuntu 22.04,Cuda 版本为 11.2,Tensorflow 版本为 2.60,数据集采用公开数据集 Anime Faces 共21551 张动漫头像。

实验中,为了评估各模型的性能,学习率均按照判别器 0.0002 生成器0.0003 来设置,batchsize 大小均为 512,生成器和判别器均采用 DCGAN 构造。此外关于各模型特有的参数,例如 Unrolled GAN中,K=5,WGAN 中权重截断为0.1,WGAN-GP 中梯度惩罚项权重为 8。

6.2 模型稳定性

从模型稳定性来看,在同样 1000 次 epoch 的情况下,WGAN-GP 最后几次的图像生成已经明显稳定,WGAN 也出现了一定的稳定情况,而 DCGAN 和Unrolled GAN 生成的图像仍然出现较大的波动。

epoch 980epoch 990epoch 1000
DCGAN在这里插入图片描述在这里插入图片描述在这里插入图片描述
Unrolled GAN在这里插入图片描述在这里插入图片描述在这里插入图片描述
WGAN在这里插入图片描述在这里插入图片描述在这里插入图片描述
WGAN-GP在这里插入图片描述在这里插入图片描述在这里插入图片描述

6.3 模式坍缩问题

WGAN-GP 最后的输出图像已经无法观测到模式坍缩的现象,而 WGAN、Unrolled GAN 以及 DCGAN 都仍然存在不同程度的模式坍缩。训练过程中,WGAN-GP 前期同样存在模式坍缩问题,随着迭代次数的增加,模式坍缩的问题逐渐消失不见。以此类推,提高迭代此处,WGAN、Unrolled GAN、DCGAN 的模式坍缩现象也可能减缓,甚至消失,此处并没有做进一步验证。

DCGANUnrolled GAN
在这里插入图片描述在这里插入图片描述
WGANWGAN-GP
在这里插入图片描述在这里插入图片描述

6.4 生成图像质量

同样 1000 次 epoch,WGAN-GP 生成的图像质量最高,WGAN 次之,而Unrolled GAN 和 DCGAN 生成的头像仍然有较多的毛边和噪声,甚至有些图像与动漫人脸偏差较大。

DCGANUnrolled GAN
在这里插入图片描述在这里插入图片描述
WGANWGAN-GP
在这里插入图片描述在这里插入图片描述

参考文献

[1] Goodfellow I J , Pouget-Abadie J , Mirza M ,et al.Generative Adversarial Networks[J].2014.
[2] Radford A , Metz L , Chintala S .Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks[J].Computer ence, 2015.DOI:10.48550/arXiv.1511.06434.
[3] Metz L , Poole B , Pfau D ,et al.Unrolled Generative Adversarial Networks[J]. 2016.DOI:10.48550/arXiv.1611.02163.
[4] Arjovsky, Martin , and Bottou, Léon. “Towards Principled Methods for Training Generative Adversarial Networks.” Stat 1050(2017).
[5] Arjovsky M , Chintala S ,Bottou, Léon.Wasserstein GAN[J]. 2017.DOI:10.48550/arXiv.1701.07875.
[7] Gulrajani I , Ahmed F , Arjovsky M ,et al.Improved Training of Wasserstein
GANs[J]. 2017.DOI:10.48550/arXiv.1704.00028.

  • 44
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值