“GANs are 'the coolest idea in deep learning in the last 20 years.' ”--Yann LeCunn, Facebook’s AI chief
今天我们就来认识一下这个传说中被誉为过去20年来深度学习中最酷的想法——GAN。
- GAN之父的主页:http://www.iangoodfellow.com/
- GAN论文地址:https://arxiv.org/pdf/1406.2661.pdf
目录
前言
一、GAN背景与简介
二、GAN原理
2.1生成器和判别器
2.2GAN的形成过程
2.3GAN的训练过程
三、GAN的特点及优缺点
☀️3.1特点
☀️3.2优点
☀️3.3缺点
四、各种各样的GAN
4.1DCGAN
4.2CGAN
4.3CycleGAN
五、GAN的实际应用
5.1图像生成
5.2文本生成
5.3语音生成
在GAN算法出来之前, 由于之前的方法在最大似然估计和相关策略中出现的许多复杂的概率计算,得到的结果难以近似,所以关于图像生成的任务表现一直都不太好。
2014年10月,Ian J. Goodfellow等人在Generative Adversarial Networks中提出了一个通过对抗过程估计生成模型的新框架——GAN(Generative adversarial network),GAN其实是两个网络的组合:生成器(Generator)负责生成模拟数据;判别器(Discriminator)负责判断输入的数据是真实的还是生成的。生成器要不断优化自己生成的数据让判别网络判断不出来,判别器也要优化自己让自己判断得更准确。二者关系形成对抗,因此叫对抗网络。
在GAN的原作中,作者将生成器比喻为印假钞票的犯罪分子,判别器则类比为警察。犯罪分子努力让钞票看起来逼真,警察则不断提升对于假钞的辨识能力。二者互相博弈,随着时间的进行,都会越来越强。那么类比于图像生成任务,生成器不断生成尽可能逼真的假图像。判别器则判断图像是否是真实的图像,还是生成的图像,二者不断博弈优化。最终生成器生成的图像使得判别器完全无法判别真假。
关于GAN的原理,网上有太多文章,但大部分都是直接放一堆公式开始从头推。知道大家也不爱看,所以放心~本文不会放一堆公式,只是提供一种简单的理解思路。如果想深入研究的,可以看看别的博主的文章噢~
首先介绍一下机器学习中两类模型:生成模型(Generative Model)和判别模型(Discriminative Model)。
举个栗子:
对于判别模型,损失函数是容易定义的,因为输出的目标相对简单。但对于生成模型,损失函数的定义就不是那么容易。我们对于生成结果的期望,往往是一个暧昧不清,难以数学公理化定义的范式。所以不妨把生成模型的回馈部分,交给判别模型处理。这就是Goodfellow将机器学习中的两大类模型,Generative和Discrimitive给紧密地联合在了一起 。
GAN有两大法宝——G和D:
①生成器(Generator):
②判别器(Discriminator):
在训练过程中,生成器G的目标就是尽量生成真实的图片去欺骗判别器D,而判别器D则努力地去识别出图像的真假,这样,G和D构成了一个动态的“博弈过程”。随着时间的推移,生成器和判别器在不断地进行对抗,如下图所示:
接下来我们解释一下上图:
比如,G生成了一张图,在D这里得分很高,那证明G是很成功的;如果D能有效区分真假图,则G的效果还不太好,需要调整参数。在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 1。
这样我们的目的就达成了:我们得到了一个生成式的模型G,它可以用来生成图片。
GAN的训练过程如下:
如下图所示:
(1)先训练D
上一轮G产生的图片和真实图片直接拼接在一起,作为x。然后根据顺序摆放0和1,假图对应0,真图对应1。然后就可以通过x输入生成一个score(从0到1之间的数),通过score和y组成的损失函数,就可以进行梯度反传了。
(2)再训练G
这时需要把G和D当作一个整体,我们就叫DG系统吧,这个系统的输出仍然是score。输入一组随机向量,就可以在G生成一张图,通过D对生成的这张图进行打分,这就是DG系统的前向过程。score=1就是DG系统需要优化的目标,score和y=1之间的差异可以组成损失函数,然后可以反向传播梯度。注意,这里的D的参数是不可训练的。这样就能保证G的训练是符合D的打分标准的。
DCGAN是最有名的GAN网络:
技术要点:
原本GAN网络的输入时一个N*1维的高斯噪声,每一维经过映射能控制生成的什么信息,就没有人知道。于是,有人就像把其中一个维度不再输入噪声,而是训练数据的label信息,这样通过这个label值我们就能生成不同种类的图像了,这就是 Conditional GAN (CGAN)。
pix2pix必须使用成对的数据进行训练。但很多情况下成对数据是很难获取到的,比如说,我们想把马变成斑马,现实生活中是不存在对应的真实照片的。
现在我们就用Cycle-constraint Adversarial Network也就是CycleGAN解决这个问题。这种网络不需要成对的数据,只需要输入数据的一个集合(比如一堆马的照片)和输出数据的一个集合(比如一堆斑马的照片)就可以了。
但是直接使用不成对的数据是不奏效的。网络会直接忽略输入,随机产生输出!所以,我们还得对网络增加限制(constraint)才行。
那怎么加限制呢?除了之前提到的把马变成斑马的网络G,我们还需要一个把斑马变回马的网络F。那么,一匹马x用G变成斑马s = G ( x ) ,然后再用F把它变回马F ( s ),得到的马和一开始的马应该是一样的,也就是x = F ( G ( x ) ) 。
反过来,斑马变马再变回斑马也要满足要求,注意这一步最好不要省略。虽然理论上只用一个条件是可以的,但是现实实现中,有很多因素,比如计算的准备度,优化的问题,应用中都是把所有约束都加上。
我们同时优化G和F,最后就能拿到一个想要的网络G。
剩下的不再详细介绍,大家感兴趣的可以自己看论文:
(表格来源:一文看懂「生成对抗网络 - GAN」基本原理+10种典型算法+13种应用)
算法 | 论文 | 代码 |
---|---|---|
GAN | 论文地址 | 代码地址 |
DCGAN | 论文地址 | 代码地址 |
CGAN | 论文地址 | 代码地址 |
CycleGAN | 论文地址 | 代码地址 |
CoGAN | 论文地址 | 代码地址 |
ProGAN | 论文地址 | 代码地址 |
WGAN | 论文地址 | 代码地址 |
SAGAN | 论文地址 | 代码地址 |
BigGAN | 论文地址 | 代码地址 |
还有各个GAN的loss function:
(图片来源:一篇文章弄懂GAN网络 - 知乎 (zhihu.com))
GAN在图像生成、文本生成、语音生成等领域都取得了广泛的应用。以下是GAN在一些应用场景中的应用实例:
GAN在图像生成中的应用最为广泛。通过训练一个生成器和一个判别器,可以生成高质量、多样性的图像。以下是一些GAN在图像生成中的应用实例:
(1) DeepFake技术
DeepFake技术是一种基于GAN的图像合成技术,可以将一个人的脸部特征转移到另一个人的脸上,从而实现人脸替换。该技术在娱乐、影视等领域具有广泛的应用。
(2)图像修复
GAN可以通过学习原始图像和损坏图像之间的差异,生成高质量的修复图像。这种技术在医疗、保险等领域具有广泛的应用。
GAN可以生成高质量、多样性的文本,具有广泛的应用场景。以下是一些GAN在文本生成中的应用实例:
(1)对话系统
GAN可以通过学习用户的输入和输出,生成具有上下文连贯性的对话内容,从而实现人机对话。这种技术在智能客服、智能助手等领域具有广泛的应用。
(2)文本摘要
GAN可以通过学习原始文本和摘要之间的差异,生成高质量的文本摘要。这种技术在新闻、金融等领域具有广泛的应用。
GAN可以生成高质量、自然的语音,具有广泛的应用场景。以下是一些GAN在语音生成中的应用实例:
(1)语音合成
GAN可以通过学习语音信号和语音文本之间的关系,生成自然的语音。这种技术在智能客服、智能助手等领域具有广泛的应用。
(2)语音转换
GAN可以将一种语音转换成另一种语音,例如将男声转换为女声,或者将中文语音转换成英文语音。这种技术在语音翻译、语音识别等领域具有广泛的应用。