【论文精度(李沐老师)】Generative Adversarial Nets

文章提出了一种新的框架,通过对抗性的训练过程来估计生成模型和辨别模型。生成模型尝试欺骗辨别模型,而辨别模型则试图区分真实数据和生成数据。在特定情况下,当生成模型和辨别模型都是多层感知器时,可以通过反向传播进行训练。这种方法解决了传统生成模型在计算上的难题,能够生成高质量的样本,展示了在图像生成领域的潜力。然而,模型的收敛性和稳定性是一大挑战。

Abstract

我们提出了一个新的framework,通过一个对抗的过程来估计生成模型,其中会同时训练两个模型:生成模型G来获取整个数据的分布,辨别模型D来分辨数据是来自于训练样本还是生成模型G。生成模型G的任务是尽量的让辨别模型D犯错。这个framework对应一个博弈论中双人对抗游戏。在任何函数空间的G和D中,存在一个独一无二的解,这个解能够将你整个训练中的数据的真实分布找出,D在任何地方等于1/2。如果G和D是一个MLP的话,整个系统可以通过一个误差反传进行训练。我们不需要任何的马尔科夫链或者对一个近似的推理过程展开。实验通过对生成的样本进行定性和定量评估,证明了该框架的潜力。
(介绍了GAN做的是个什么事情)

Introduction

一、深度学习是用来发现一些丰富、有层次的模型,这些模型能够对AI中的各种数据做一个概率分布的表示。虽然深度学习在辨别模型上取得了显著的进展,但是在生成模型上做的还是比较差,这个难点来自于我们最大化似然函数的时,要对概率进行很多的近似,从而带来了很大的计算困难。
二、(对GAN的一些介绍)在所提出的对抗网络框架中,生成模型和对抗模型对立:一个判别模型,它学习确定一个样本是来自模型分布还是数据分布。生成式模型可以被认为是类似于一队造假者,试图生产假币并在不被发现的情况下使用,而鉴别式模型则类似于警察,试图检测假币。这个游戏中的竞争促使两个团队改进他们的方法,直到假币与真币无法区分(希望造假者赢)。
三、这个框架可以产生许多种模型和优化算法的具体训练算法。在这篇文章中,我们探讨了这样一种特殊情况:生成模型通过多层感知器传递随机噪声来生成样本,而判别模型也是多层感知器。我们把这种特殊情况称为对抗性网络。在这种情况下,我们可以只用非常成功的反向传播和dropout算法来训练两个模型,只用正向传播从生成模型中取样。不需要近似推理或马尔科夫链。

Related work

一、之前的方法总是想去构造出一个分布函数,然后给这个函数提供一些参数进行学习,这些参数通过最大对数似然函数来求,但这会导致计算困难,尤其是维度比较高的时候。因为这些方法在计算上有困难,所以最近有些工作**“generative machines”**——学一个模型来近似模拟需要的结果,这项工作计算比较容易但是无法得知最后的分布是什么样子。
二、我们观察到对于f的期望求导等价于对f自己求导(说明为什么通过误差的反向传递对GAN求解)。说了一下VAEs的工作,和GAN类似。
三、说了一下NCE所做工作,但是其损失函数比较复杂,在求解性能上没有GAN好。
四、解释了一下与predictability minimization(PM)的区别。
五、解释了一下与adversarial examples的区别。adversarial examples构造一些假的样本,达到以假乱真的目的,从而测试算法的稳定性。

Adversarial nets

(讲的GAN的目标函数,以及对其的求解)
一、这个框架最简单的应用是当你的生成器和辨别器都是MLP的时候。生成器会学一个在数据x上的pgp_gpg分布。对于生成模型,我们定义一个先验pz(z)p_z(z)pz(z),在输入的噪音变量z上。对于生成模型,就是把z映射映射成x,参数是θg\theta_gθgG(z;θg)G(z;\theta_g)G(z;θg)。辨别器D(x;θd)D(x;\theta_d)D(x;θd),就是把x输出成一个标量,用来表示此数据来自真实数据(用1表示)还是由生成器(用0表示)生成的。在训练D的同时也会训练G,G用来最小化log(1−D(G(z)))log(1-D(G(z)))log(1D(G(z))),即训练一个G使我的辨别器尽量的犯错,G(z)代表是一个假图片。
二、
在这里插入图片描述
最理想状态是图(d),此时D的输出一直是0.5。
在这里插入图片描述
上述算法中,先更新我们的辨别器,再更新我们的生成器。k是超参数,不能太大/小,要保证辨别器有足够的更新,但也不要更新的太好。
如果没有把辨别器足够好的更新,我们更新生成器则没有太大的意义。
如果把辨别器更新的太好了,1−D(G(zi))1-D(G(z^i))1D(G(zi))会变成0,此时对生成器的更新会有困难。
GAN的收敛是非常不稳定的。

三、在这里插入图片描述
在上面的公式里,后面一项会有一点问题,即容易把辨别器更新的太好了,1−D(G(zi))1-D(G(z^i))1D(G(zi))会变成0,此时对生成器的更新会有困难,所以更新G的时候把目标函数改成max logD(G(z))logD(G(z))logD(G(z)),但同时也会产生一些数值上的问题,今后的工作会对其进行一些改进。

Theoretical Results

(讲了一些理论上的结果)
一、当且仅当pg=pdatap_g=p_{data}pg=pdata(生成器学到的分布=真实数据的分布),目标函数有一个全局最优解。
二、算法一确实能够求解目标函数。

Global Optimality of pg=pdatap_g=p_{data}pg=pdata

(讲目标函数是正确的)
Proposition 1 当G固定时,辨别器最优解(取值范围[0,1])为
在这里插入图片描述
pg=pdatap_g=p_{data}pg=pdata时,结果为1/2。
Theorem 1 当且仅当pdata=pgp_{data}=p_gpdata=pg时,C(G)取得全局最小值。
在这里插入图片描述
KL散度,量化两种概率分布P和Q之间差异的方式,又叫相对熵。在概率学和统计学上,我们经常会使用一种更简单的、近似的分布来替代观察数据或太复杂的分布。K-L散度能帮助我们度量使用一个分布来近似另一个分布时所损失的信息。
GAN使用的JS散度相对熵(KL散度)虽然可以用来表示两个概率分布之间的差异,但是它并不是对称的,因此有时用它来训练神经网络会有顺序不同造成不一样的训练结果的情况。为了克服这个问题,有人就提出了一个新的衡量公式,叫做JS散度

Convergence of Algorithm 1

Proposition 2
如果 G 和 D 有足够的容量,并且在算法 1 的每一步,允许判别器在给定 G 的情况下达到其最优值,并更新pgp_gpg 以改进标准 Ex∼pdata[logD∗G(x)]+Ex∼pg[log(1−D∗G(x))]Ex∼p_{data} [log D∗ G(x)] + Ex∼p_g [log(1 − D∗ G(x))]Expdata[logDG(x)]+Expg[log(1DG(x))] 然后 pgp_gpg 收敛到 pdatap_{data}pdata

Advantages and disadvantages

优:生成器没有去看真正样本上的数据,没有试图去拟合那些特征,所以使得其能够生成比较锐利的一些边缘。
缺:要均衡好G和D,如果G和D没均衡好,会导致结果很差。

Conclusions and future work

在这里插入图片描述

### 李沐与机器学习、深度学习的相关论文 李沐作为一位活跃于机器学习和深度学习领域的专家,其贡献不仅限于撰写书籍和教学资源,还涉及多篇高质量的研究论文。以下是关于如何查找与其工作相关的论文的方法: #### 方法一:通过Google Scholar检索 可以通过访问Google Scholar网站 (https://scholar.google.com/) 并输入关键词“Li Mu machine learning deep learning”来进行搜索[^1]。此平台能够提供作者发表过的所有学术文章及其引用情况。 #### 方法二:利用PapersWithCode PapersWithCode 是一个专注于收集最新研究成果并与之匹配代码实现的地方,在这里可以根据具体主题找到带有实现链接的论文列表[^4]。例如,“Deep Learning” 或 “Computer Vision” 类别的项目可能就会包含由李沐参与撰写的文档。 #### 方法三:查阅顶级会议录 许多重要的AI领域进展最初是以会议形式发布的。ICLR(International Conference on Learning Representations)、NeurIPS(Neural Information Processing Systems),以及 CVPR(Conference on Computer Vision and Pattern Recognition) 等都是发布前沿成果的主要场所之一[^3]。定期浏览这些大会记录可以帮助定位到最新的理论突破和技术革新。 ```python import requests from bs4 import BeautifulSoup def search_papers(author_name="Mu Li", field="deep learning"): base_url = f"https://scholar.google.com/scholar?q={author_name}+{field}" response = requests.get(base_url) soup = BeautifulSoup(response.text, 'html.parser') papers_info = [] for item in soup.select('.gs_ri'): title = item.find('h3').text.strip() link = item.a['href'] abstract = item.find(class_='gs_rs').text.strip()[:200]+'...' paper_data = { "Title":title, "Link":link, "Abstract":abstract } papers_info.append(paper_data) return papers_info if __name__ == "__main__": results = search_papers() for result in results: print(f"{result['Title']}\nURL:{result['Link']}\nABSTRACT:\n{result['Abstract']}\n\n") ``` 上述脚本展示了如何自动化抓取来自Google Scholar的信息片段[^5]。注意实际部署时需考虑API限制及合法性等问题。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是小蔡呀~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值