【硬核科普】一文读懂生成对抗网络GAN

news2024/11/13 9:29:01

0. 前言

按照国际惯例,首先声明:本文只是我自己学习的理解,虽然参考了他人的宝贵见解及成果,但是内容可能存在不准确的地方。如果发现文中错误,希望批评指正,共同进步。

本文基于Ian在2014年发表在NIPS的论文Generative Adversarial Nets来说明生成对抗网络。正如其名,这篇论文是GAN的开山之作。

我们之前学习过LeNet,AlexNet,ResNet,R-CNN等经典视觉深度学习模型,这些模型处理的任务是对图像中的物体进行分类,以及对物体的边界进行回归,但本质来说都是一个判别模型,模型根据输入来提取并返回特征值。而GAN所包含的不仅仅是判别,更重要的,也是更有难度的是在生成

自从2023年,AIGC开始迅速爆火,AIGC中的“G”和GAN中的“G”都是生成的含义,GAN(的改进模型)也在AIGC中扮演着重要的部分。

为什么说生成是比判别更有难度的任务呢?这里我想举一个电影的例子:我们普通人在看过一场电影后,可以很快地总结一场电影的内容,并判别这场电影的好坏。而判别电影好坏的能力也不难掌握,只要我们稍微看过一些同类的电影,并了解一些专业的影评人的评价就够了。
但是要我们作为电影导演生成一部电影,这样的难度就不可同日而语了。如果我们只具备鉴赏电影好坏的能力,这是远远不够的,而且即便对于一个非常优秀的导演来说,生成一部好电影也是一件非常非常艰难的事!

1. 预备知识

在正式讲GAN之前需要先铺垫点博弈论的基础知识。

1.1 Minimax两人博弈

在博弈论中,一个 Minimax 两人博弈是指一种具有零和特性的两个玩家轮流进行决策的游戏,在这种游戏中,每个玩家都试图最大化自己的期望收益(或者说是最小化损失)。在这种情况下,每个玩家都知道对方会做出最优反应。

具体来说,Minimax 算法是一种确定性决策过程,用于寻找博弈树(即表示所有可能的走步序列及对应结果的游戏结构)上的最优策略。在两玩家零和游戏中,对于先行者(通常称为 MAX 玩家),目标是最大化其收益;而对于后行者(通常称为 MIN 玩家),目标则是最小化先行者的最大收益,也就是最大化自己的最小收益。

例如,在市场上砍价,老板(MAX玩家)会说“我的货物质量非常好,市场上独一无二”,来尽量提升货物的售价。而卖家(MIN玩家)会说“我以前在其他商店买过此类的货物,你的货物并非独一无二,而且还比你的便宜的多”来压低售价。老板(MAX玩家)会再反驳说“我们的货物看起来很像,但是完全不是一个东西,我的要牛逼得多”......如此往复,直到达成两个人都满意得价格。


1.2 纳什均衡(Nash Equilibrium)

纳什均衡是博弈论中的核心概念之一,由美国数学家约翰·福布斯·纳什(John Forbes Nash Jr.)在20世纪50年代提出。在博弈论中,纳什均衡是指在一个非合作博弈中,各个参与者都不愿单方面改变策略,因为一旦他们改变自己的策略,他们的支付(即利益或效用)将会降低。换句话说,在纳什均衡状态下,每个参与者都选择了给定其他参与者策略情况下的最优策略。

更形式化的表述是:在一个多人博弈中,如果存在一组策略组合(每个参与者都有一个策略),使得对于博弈中的任意一个参与者,在其他人策略保持不变的情况下,更改自己的策略并不能获得更高的收益,那么这组策略就构成了一个纳什均衡。

例如,在经典的囚徒困境博弈中,尽管两个囚犯之间没有合作协定,但他们各自独立做出的决定形成了一种纳什均衡——都选择背叛对方,这样对于任何一个囚徒来说,改变自己的策略都不能获得更高得收益,因为对方已经背叛了自己。

2. GAN的设计

2.1 GAN的设计理念

GAN的设计理念借鉴了博弈论中的两人Minimax博弈过程。在生成对抗网络中,有两个主要的模型参与了一场类似于博弈的过程:

1. 生成器(Generator):负责学习数据分布,并尝试根据随机噪声生成接近真实数据的新样本。
2. 判别器(Discriminator):任务是区分真实数据和生成器生成的虚假数据。

这个过程可以用“制作假币”来比拟:生成器是制作假币的铸币机,判别器是验钞机。

这两个网络通过迭代地进行对抗性训练来优化自身的性能。在每一轮训练中:

  • 生成器试图更好地模仿真实数据分布,生成足以骗过判别器的样本。
  • 判别器则努力学习如何准确地区分真实样本和生成器生成的样本
  • 为了骗过验钞机,铸币机要不断改进。
  • 而为了应对造假技术不断精湛的铸币机,验钞机也要不断提升检验假币的水平。

当GAN达到理想状态时,可以认为它达到了一个纳什均衡点:

  • 生成器生成的数据已经不能再被判别器有效地辨别出与真实数据的区别,即判别器对真实数据和生成数据的分类正确率均为50%,它无法单方面通过改变策略(提高判别能力)而获得更多优势。
  • 生成器也不能通过进一步改变策略生成更难以辨别的样本,因为它已经在最大可能的程度上模拟了真实数据分布。

这个均衡点即:

  • 验钞机不能区分假币和真币了,因为铸币机已经完全学习到真币的图案分布,已经能造出“真币”了,验钞机不能把“真币”当成假币,即无法区分真币和伪造的“真币”。
  • 铸币机的“造假”水平也不能进一步再提高了,因为不能造出“比真币还真”的真币。

在这个状态下,生成器和判别器都不再有动机去改变它们的策略,从而形成了一个类似博弈论中的纳什均衡。此时,生成器可以用来生成高质量的新颖样本,而判别器则在理论上失去了进一步区分的能力。

这里需要注意的一点是:GAN的生成器只是学习到了真实数据的分布规律,而并不知道这个规律是怎样的。(这也算是GAN的创新点)

举一个简单的例子,如果数据的真实分布规律是:

P_{data} (x)= sin(x)

那生成器G学习到的规律只能是:

P_g(x) =\sum_{n=1}^{+\infty}(-1)^{(n-1)}\times \frac{x^{2n-1}}{(2n-1)!}

我们都知道后者是前者的泰勒展开,两者等价。但是生成器G却不可能知道数据的真实分布规律就是sin(x)。

这个真实的分布规律即马尔可夫链(Markov Chain),它是一种在概率论和统计学中广泛使用的数学模型,用于描述一个系统随时间演化的随机过程。它的重要特征是马尔可夫性质(Markov property),又称为无后效性或无记忆性,这意味着系统的未来状态仅依赖于当前状态,而不受以往状态的影响,即给定当前状态后,未来的演变过程与过去的状态无关。

2.2 GAN的模型结构

GAN的结构模型如下:

其中:

  • z是输入的随机向量(噪声),严格来说z应该是从一个满足某种特定先验的P_z(z)中随机生成的,它并不是完全随机的;
  • G(z, \theta _g)是生成器,它是一个多层感知机MLP,其中z是输入,\theta_g是生成器的参数;
  • D(z, \theta _d)是判别器,它也是一个MLP,其输入是生成器G的输出以及真实数据xx是从真实数据分布P_{data}(x)中生成的,\theta_d是判别器的参数;
  • 输出概率是一个[0,1]的参数,结果接近0则表示判别器认为数据是生成器G生成的,结果接近1则表示判别器认为输入是真实数据x

3. GAN的训练过程(核心)

3.1 GAN的价值函数

GAN的价值函数(value function)是用来同时训练生成器G和判别器D的数学表达式:

_{G}^{min}\textrm{ } _{D}^{max}\textrm{} V(G,D)= \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]

上式中\mathbb{E}代表数学期望,举个例子求一个骰子掷出点数的数学期望,即\mathbb{E}_{x \sim (1,2,3,4,5,6)}P(x),其中x为骰子掷出点数,P(x)为对应x点的概率(当然,肯定都是\frac{1}{6})最终求得:\mathbb{E}_{x \sim (1,2,3,4,5,6)}P(x) = 3.5

这个价值函数表达了两者的对抗过程:

  • 判别器D的目标是最大化这个价值函数,它试图正确地区分真实数据样本x(来自真实数据分布P_{data})和生成器生成的假样本G(z),其中z是从先验噪声分布P_z(z)中采样的随机向量。更具体来说,对于公式的前面一半\mathbb{E}_{x \sim p_{data}(x)}[\log D(x)],判别器D要让它越大越好,因为x是来自真实数据的样本,判断的结果应该接近1。而对于公式后面一半\mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))],判别器D也是要让它越大越好,也就是说D(G(z))越小越好,即生成器G产生的样本G(z)经过判别器D后产生的结果应该接近0;
  • 生成器G只能影响价值函数的后面一半,它的目标则是最小化这个价值函数,它希望通过学习调整自身参数,使得其生成的样本能够欺骗判别器,即让判别器认为生成样本G(z)同样来自真实数据分布,即D(G(z))接近1。

简而言之,GAN的价值函数体现了一种博弈论上的极小极大游戏:判别器D努力学习最好的区分策略(最大化正确分类的概率),而生成器G则努力学习生成最真实的样本以混淆判别器(使生成样本被误判为真实的可能性增大)。当达到纳什均衡时,生成器能够生成与真实数据分布难以区分的样本。

3.2 GAN的训练过程

GAN的训练过程可以简单化为以下4个步骤:

图中黑色圆点代表真实数据分布,即P_{data};绿色线代表生成器G生成的数据分布G(z);蓝色线是判别器D生成的最终概率。

(a)初始状态:生成器生成的数据与真实分布相差较远,判别器输出的概率波动也很大,不能很好区分真实分布和生成分布;

(b)判别器学习过程:判别器能较好区分真实分布和生成分布;

(c)生成器学习过程:生成的分布情况逐渐贴近真实分布;

不断重复(b)和(c)……

(d)达到纳什均衡:生成器学习到了真实分布,判别器无法判断出数据来源,输出的概率结果为0.5

3.3 GAN的训练过程算法

整个训练的具体算法过程如下:

其训练过程就是价值函数对生成器G的权重\theta_g,以及判别器D的权重\theta_d求偏导,即生成器G和判别器D的模型反向传播。

需要注意的是判别器D和生成器G并不是1:1交替训练的!而是每隔k步才训练一次判别器D

k是一个大于1的超参数,需要按经验设定(ˉ▽ˉ;)...

这样做的理由正是本文开头就提及的:生成是比判别更复杂的任务,即造假要比鉴假更难。更具体来说有以下原因需要每隔k步才训练一次判别器D

  1. 判别器过强:如果判别器训练得太频繁而生成器跟不上,可能会导致判别器变得过于强大,以至于它可以轻易区分出真实数据和生成器产生的伪数据,这会使生成器收到的梯度信号过于强烈且不稳定,从而难以提升生成数据的质量。

  2. 生成器梯度消失或爆炸:由于GAN训练的本质是对抗性过程,若判别器过于优秀,则生成器可能无法获得有用的梯度来改进自身,因为判别器几乎总是能完美地区分真假样本,这样生成器就接收到接近零或者非常大的梯度,不利于训练。

  3. 训练稳定性:通过控制判别器和生成器的训练频率,可以调整二者之间的能力差距,维持一种动态平衡,有助于提高整个系统的训练稳定性,并促进收敛。

  4. 避免过度拟合:限制判别器的训练次数也有助于防止其过早地过拟合训练数据中的细节,促使它保持一定的泛化能力,这对于GAN的整体性能至关重要!

4. GAN的改进版本

GAN自从2014年由Ian Goodfellow等人首次提出以来,已经发展出了众多改进版本,以克服原始GAN的一些问题,如模式塌陷(mode collapse)、训练不稳定性和收敛困难等。以下是一些重要的GAN改进版本:

1. Wasserstein GAN (WGAN):
   WGAN引入了 Wasserstein 距离(也称为Earth Mover's Distance, EMD),通过优化判别器来最小化这种距离而不是传统的交叉熵损失,从而改善了训练稳定性并缓解了模式塌陷的问题。

2. Wasserstein GAN with Gradient Penalty (WGAN-GP):
   WGAN-GP是对WGAN的进一步改进,它通过添加判别器梯度范数的惩罚项来约束判别器保持接近1-Lipschitz连续性,从而更严格地遵循Wasserstein距离的定义。

3. Deep Convolutional GAN (DCGAN):
   DCGAN将卷积神经网络引入到GAN的生成器和判别器中,提高了图像生成的质量和效率。

4. Least Squares GAN (LSGAN):
   LSGAN使用最小二乘损失替代原来的sigmoid交叉熵损失函数,以减小训练过程中的梯度消失和爆炸问题。

5. Conditional GAN (cGAN):
   cGAN增加了条件信息到GAN的输入,使得生成的数据可以根据特定的标签或条件进行控制。

6. InfoGAN:
   InfoGAN通过最大化生成器产生的样本的隐变量与观察到的数据之间的互信息,实现了在无监督条件下学习有意义的隐变量表示。

7. Progressive Growing GAN (PGGAN):
    PGGAN通过逐步增加网络分辨率的方式来训练GAN,从较低分辨率开始逐渐提升,以提高生成图像的质量和细节。

8. StyleGAN:
    StyleGAN采用了风格迁移的思想,通过分离样式和内容表示,可以更好地控制生成图像的高级属性和细节。

9. BigGAN:
    BigGAN通过大规模批量训练和一些架构改进,显著提升了生成高分辨率图像的质量和多样性。

10. CycleGAN:
    CycleGAN用于无配对的图像到图像转换任务,引入了循环一致性损失,能够在没有成对训练数据的情况下进行图像翻译。

以上仅列举了一部分GAN的改进版本,实际上GAN家族非常庞大,还包括许多其他的变种和应用领域的扩展,如BEGAN、Energy-Based GAN (EBGAN)、Spectral Normalization GAN (SN-GAN)、Self-Attention GAN (SAGAN)等。随着研究的不断推进,GAN的改进和新版本持续涌现。

最后再点一下题,为什么“生成”如此重要?因为没有生成就没有本文的插图。

(本文插图均由Midjourney生成)

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

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

相关文章

2024年口碑最好的游泳耳机有哪些,这四款游泳耳机值得相信!

随着科技的不断进步和人们对健康生活的追求,游泳已经成为许多人健身和放松的首选运动之一。然而,想要在游泳时享受音乐的乐趣却一直是一个挑战。传统的耳机往往无法抵御水的侵蚀,导致音质下降或者设备损坏。因此,游泳耳机的问世成…

ubuntu20部署3d高斯

3d高斯的链接:https://github.com/graphdeco-inria/gaussian-splatting 系统环境 ubuntu20的系统环境,打算只运行训练的代码,而不去进行麻烦的可视化,可视化直接在windows上用他们预编译好的exe去可视化。(因为看的很…

使用Beego创建API项目并自动化文档

最近需要使用Go写一个Web API项目,可以使用Beego与Gin来写此类项目,还是非常方便的,这里就介绍一下使用Beego来创建的Web API项目并自动化文档的方法。 使用Gin创建API项目并自动化文档参见:使用Gin编写Web API项目并自动化文档 …

Android(一)

坏境 java版本 下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 进入安卓官网下载 勾选协议 next 如果本地有设置文件,选择Config or installation folder 如果本地没有设置文件,选择Do not import settings 同意两个协议 耐…

idea提示 CreateProcess error=206, 文件名或扩展名太长有哪些具体的解决方法

背景: 项目启动后提示CreateProcess error206,通常我本地是将shorten command line改成如下就可以解决,但是今天遇到一个,无论这里怎么设置都是启动提示扩展名太长,经过一番处理问题终于解决,特此记录一下。…

Leetcode—1235. 规划兼职工作【困难】(upper_bound、自定义排序规则)

2024每日刷题&#xff08;125&#xff09; Leetcode—1235. 规划兼职工作 算法思想 实现代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vec…

RabbitMQ的介绍和使用

1.同步通讯和异步通讯 举个例子&#xff0c;同步通讯就像是在打电话&#xff0c;因此它时效性较强&#xff0c;可以立即得到结果&#xff0c;但如果你正在和一个MM打电话&#xff0c;其他MM找你的话&#xff0c;你们之间是不能进行消息的传递和响应的 异步通讯就像是微信&#…

基于GEE遥感影像处理和长时序土地分类以及生物量估算分析

简介 Google Earth Engine云平台是目前全球范围内测绘领域内使用最为广泛的遥感云计算平台&#xff0c;其凭借强大的数据存储和云计算能力&#xff0c;极大了提高了全球科研工作者的科研产出&#xff0c;每年借助GEE平台发布的各类期刊论文超1000篇&#xff0c;在海量遥感数据的…

鉴源实验室丨汽车入侵检测系统介绍及测试

作者 | 张诏景 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 入侵检测系统背景 智能网联汽车不再是一个孤立的嵌入式系统了&#xff0c;信息安全问题越来越被重视。国内外发布了多项标…

Jmeter 命令行压测 生成 HTML 测试报告,你真的会?

通常 Jmeter 的 GUI 模式仅用于调试&#xff0c;在实际的压测项目中&#xff0c;为了让压测机有更好的性能&#xff0c;多用 Jmeter 命令行来进行压测。 同时&#xff0c;JMeter 也支持生成 HTML 测试报告&#xff0c; 以便从测试计划中获得图表和统计信息。 以上定义的文件路…

无人售货机是否是下个风口?

当前&#xff0c;众多大中城市正逐步转变为无人零售的新兴试验场&#xff0c;其广阔的发展前景与潜在价值日益受到瞩目。据统计数据显示&#xff0c;无人零售领域已吸引超过650亿元的投资注入。未来五年内&#xff0c;无人零售渠道在中国快消品市场有望迎来爆发性增长&#xff…

2024智能电网与能源系统国际学术会议(ICSGES2024)

2024智能电网与能源系统国际学术会议&#xff08;ICSGES2024) 会议简介 我们诚挚邀请您参加将在南京隆重举行的2024年智能电网与能源系统国际学术会议&#xff08;ICSGES2024&#xff09;。南京&#xff0c;一座历史与现代交织的城市&#xff0c;将为这场盛会提供独特的学术…

10页面结构分析

我们打开一个网页&#xff0c;都会有一个清晰的结构和布局上图中的标签就是用来划分各个部分区域用的。其中比较常用重要的是header、footer和nav&#xff0c;需要重点掌握。 下面是部分代码及效果演示 <header> <h2>网页头部</h2> </header><sec…

安泰ATA-309C:功率放大器的分类及区别是什么

功率放大器是一种电子器件&#xff0c;用于将低功率信号放大到更高功率&#xff0c;以驱动负载或增强信号强度。功率放大器根据其工作原理、电路拓扑和应用领域的不同&#xff0c;可以分为多种类型。下面将介绍几种常见的功率放大器分类及其区别。 A类功率放大器&#xff1a;A类…

做好源代码防泄密的10条准则

#深度好文计划# 近年来&#xff0c;电脑以及互联网应用在中国的普及和发展&#xff0c;已经深入到社会每个角落&#xff0c; 政府&#xff0c;经济&#xff0c;军事&#xff0c;社会&#xff0c;文化和人们生活等各方面都越来越依赖于电脑和网络。企业需要花费大量的时间精力去…

搞定 TS 装饰器,让你写 Node 接口更轻松

前言 亲爱的小伙伴&#xff0c;你好&#xff01;我是 嘟老板。你是否用过 TypeScript 呢&#xff1f;对 装饰器 了解多少呢&#xff1f;有没有实践应用过呢&#xff1f;今天我们就来聊聊 装饰器 的那点事儿&#xff0c;看看它有哪些神奇的地方。 什么是装饰器 咱们先来看一段…

Spring中的Bean相关理解

在Spring框架中&#xff0c;Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring框架管理并且被应用程序各个部分所使用的对象。Spring IoC容器负责Bean的创建、初始化、依赖注入以及销毁等生命周期管理。 注&#xff1a;喜欢的朋友可以关注公众号“JAVA学…

学习软考----数据库系统工程师25

关系规范化 1NF&#xff08;第一范式&#xff09; 2NF&#xff08;第二范式&#xff09; 3NF&#xff08;第三范式&#xff09; BCNF&#xff08;巴克斯范式&#xff09; 4NF&#xff08;第四范式&#xff09; 总结

茶多酚复合纳米纤维膜

茶多酚复合纳米纤维膜是一种结合了茶多酚与纳米纤维技术的创新材料。茶多酚作为茶叶中多酚类物质的总称&#xff0c;具有抗氧化、抗辐射、抗*等多种药理作用&#xff0c;是一种非常有益的天然物质。而纳米纤维膜则因其超细纤维结构、高比表面积和高孔隙率等特性&#xff0c;在过…

深度解读:Agent AI智能体如何重塑我们的现实和未来|TodayAI

​​​​​​​ 一、 引言 在当今时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展正不断改变着我们的生活与工作方式。尤其是Agent AI智能体&#xff0c;作为AI技术中的一种重要形式&#xff0c;它们通过模拟人类智能行为来执行各种复杂任务&#xff0c;从…