查看原文
其他

十年前的里程碑:生成式模型GAN详解

刘安吉 北京生物结构前沿研究中心 2024-05-21

星标,再也不怕错过更新!方法见文末动图。


如果我们声称人工智能的目的是模拟人类智能,那么主要的难点就是创造力。在人工智能领域,当我们谈到生成模型的时候,总是绕不开GAN(代表“生成对抗网络”)。在2016年的一个研讨会上,杨立昆(Yann LeCun)GANs为“过去20年中深度学习中最酷的想法”


生成式模型(generative models)现在在生物学领域得到了广泛应用。虽然判别式模型已经能够很好的胜任分类任务和回归任务,但是判别式模型只能基于已有的数据做出“判断”, 专注于学习输入和输出之间的直接映射关系,它并不关心数据是如何生成的,而是致力于最大化正确预测输出的概率。而生成式模型则学习数据背后的潜在规律,即“如果知道数据是如何生成的,则可以预测未来”。这类模型能用来生成新的数据,因为它学会了整个数据分布的特点。目前,生成式模型已经被应用于生物相关领域,比如化合物的生成、药效预测1等。


使用RoseTTAFold-All-Atom进行结合蛋白生成1


今天给大家讲解一篇可以被称为“生成式模型开山鼻祖”的文章:《Generative Adversarial Nets》2。这篇文章发表于2014年,距今已有十年时间。但是文中提到的生成对抗网络的框架(GAN),启发了后续的生成式模型的一系列工作,直至今天,对我们设计新的生成模型的神经网络都还有启发性。



这篇文章其实并不是提出某个具体的神经网络架构,而是提出了一种框架,一种解决问题的思路。它同时训练两个模型,第一个模型是生成模型(称为G),另一个模型是判别模型(称为D)


生成模型G的任务是捕捉数据的分布,对整个数据的分布进行建模,使得能够生成各种分布。分布其实是一个很一般化的词,生成图片,生成文本,生成电影,都可以通过生成分布来生成。在统计学的视角下,整个世界都是通过采样不同的分布得到的。所以要生成数据,就是要抓住数据的分布。模型D的作用是用来判断一个模型到底是从真正的数据中来的,还是生成出来的(来自于G)。模型G的任务是尽量让辨别模型犯错,模型D的任务是判断出G生成的数据是错的。这和博弈论中的两人对抗游戏(minmax two-player game)很相似。


使用GAN生成的人脸图像(From Nvidia)



背景引入

深度学习到底是什么?现在大多数人还认为,深度学习就是一个个不同的深度神经网络。但早在2014年GAN这篇文章就强调,深度神经网络只是一个手段而已,深度学习其实做的事情是对整个数据分布的特征的表示。


之前的生成模型大多采用的是统计上的方法,要去近似似然函数,即把数据背后的分布函数的参数都近似估计出来。但这种近似的方法在计算上比较困难。


GAN这篇文章的故事线可以总结成:生成模型表现不好→原因在于要近似似然函数→我提出一个更好的方法,不用近似似然函数,用别的方法就能得到一个计算上更好的模型。

 

生成器G和辨别器D的作用示意图(From Stanford CS231n)


用一个例子来说明:生成模型G可以类比成画家,要尽可能的画出逼真的画,得到评论家的承认。判别模型D可以类比成评论家,要尽可能的发现画家的画中不逼真的细节。在这个对抗过程中,画家会不断提升自己画出逼真细节的技能,评论家也会不断提升自己判断细节是否逼真的技能。在GAN的模型语境下,最后是希望画家能赢,也就是G能产生足够逼真的画。


解释生成器和辨别器的作用(from TensorFlow)

 

在GAN的框架下,输入是随机噪声(random noise),模型G是一个多层感知机(MLP),模型D也是一个多层感知机。模型G的MLP把随机噪音的分布映射到任何一个我们想要拟合的分布。也同样因为用了MLP,所以不需要像以前用生成马尔可夫链的方法去近似拟合。



相关工作

之前的方法总是想构造出分布函数,然后把这个函数给一些参数让它可以学习,最后通过最大化似然函数来确定参数。但当数据的维度比较高的时候,计算上非常困难。


在GAN之前,也有一些基于“generative machines”的方法,也采用了构造模型去近似数据分布的思想,而不是直接近似分布。直接近似分布的方法需要具体知道数据符合什么分布,分布的均值方差等具体的参数的值。但是这些generative machines的方法不构造分布,只是构造一个模型,从数据中去近似数据的分布。这样最直接的好处在于计算起来比较容易,也很容易在更大数据上进行计算,而坏处在于不知道最后的分布长什么样子。



模型架构

GAN的文章中考虑了最简单的模型情况:生成器G和辨别器D都是MLP。真实数据为x,生成器的分布Pg的目标是学到x的分布。


那我们的生成模型G怎么输出x呢?先定义一个输入噪音变量z和噪音pz(z)的分布,模型G要学习映射G(z;θg),也就是怎么从z映射到真实数据的分布。


辨别器D(x;θd)的输出为一个标量,表示输入的x到底是来自真实采样的数据,还是生成的数据。


在训练模型的时候,模型G和模型D同时进行训练。


模型D和G训练的损失函数为log(1-D(G(z)))。如果D能够正确分辨,那D(G(z))=0。如果D不能正确分辨,则D(G(z))>0,取log后得到的为负值。D的目标是分辨出G生成的模型不是真实图像,也就是想要D(G(z))=0


最终整个模型的训练损失函数为:

损失第一项为模型D的判别损失,在这一项中模型D要尽量学会数据中的规律,也就是警察要尽量知道真钱的特征。第二项为G的“以假乱真”能力,这一项中模型G要模仿真实数据,使得模型D无法判别G产生的数据是否为真实数据,对应前面提到的画家画出的画足够逼真,以至于评论家能够接受。


训练过程对应下图:一开始z是一个随机噪音,对应某一个高斯分布(图中绿线),这个高斯分布和真实数据的分布肯定不同(图中黑点),这个不同由辨别器D(图中蓝线)来实现别。当辨别器发现G的数据不符合真实数据时,生成器G就开始调整数据分布。经过多次“左右互搏”后,最终从噪音出发的数据经过生成器G,得到和真是数据类似的分布。



如果用一个详细的例子,可以查考下图:

生成器G和辨别器D的训练过程(From Tensorflow)


模型的算法伪代码如下:


GAN可以实现图像的以假乱真:

GAN原文中的实验结果


所以,GAN其实就是一个“左右互搏”的过程,通过两个模型不断的对抗,最终得到一个很好的效果。


但是,在GAN的设定下,收敛较为困难。可以想象到,生成器G和辨别器D要协同进步,不能某一方太强了。还是拿画家和评论家的例子来说,如果画家一开始作画的水平已经很高,评论家根本就不懂画,画家随便画一幅画,评论家就拍手称赞,那画家就不会进步,因为凭借现有的技术,评论家已经能够给他们足够高的评价了。另一方面,如果评论家的要求太高,不管画家如何提高水平,也都得不到评论家的认可,那画家也就没有动力去提高绘画水平。针对收敛困难这一点,后续有很多工作对GAN进行了改进。

GAN的后续工作CycleGAN3

 GAN的后续工作pix2pix4


所以评价一下GAN这篇文章。GAN的优点在于开辟了一个新的生成式模型的领域,它没有去看真实数据,更没有去尝试拟合特征。GAN不是第一个采取这种思路的工作,但是它向大家展示了,用这种思路,用这个框架,在这个应用上,可以取得很好的效果,能够让人信服,进入到这个领域中继续往下做,把这个那个领域做大。所以GAN其实开创了无数后面的工作。


除了GAN框架外,GAN这篇文章还有两点影响了之后的很多工作。第一,GAN可以说是无监督学习的,一定程度上不需要手动对数据进行标注。第二,用一个有监督学习的损失函数来做无监督学习,也就是之后的“自监督学习”,启发了后续例如BERT之类的模型。


供稿 | 刘安吉

审核 |孔方

责编 | 囡囡

设计 / 排版 | 可洲 王婧曈




微信号:FRCBS-THU

因扫码入群人员已满,可扫码添加中心官方微信号,管理员邀请入群

原文链接

http://arxiv.org/abs/1406.2661

参考文献

参考文献

1.Krishna, R. et al. Generalized biomolecular modeling and design with RoseTTAFold All-Atom. Science eadl2528 (2024) doi:10.1126/science.adl2528.


2.Goodfellow, I. J. et al. Generative Adversarial Networks. Preprint at http://arxiv.org/abs/1406.2661 (2014).


3.Zhu, J.-Y., Park, T., Isola, P. & Efros, A. A. Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks. Preprint at http://arxiv.org/abs/1703.10593 (2020).


4.Isola, P., Zhu, J.-Y., Zhou, T. & Efros, A. A. Image-to-Image Translation with Conditional Adversarial Networks. Preprint at http://arxiv.org/abs/1611.07004 (2018).



精彩回顾

精彩回顾



特别提示

微信公众号又双叒叕更改推送机制了,不是星标的订阅号,收到推送内容的时间会有延迟,甚至根本无法收到最新推送!不想错过FRCBS最新资讯,快来设为星标吧!

方法超简单,只需3秒钟!


点击上方卡片

关注我们吧


THE END

我知道你“在看”


继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存