【神经网络】GAN:生成对抗网络

news/2025/3/19 11:14:14/

GAN:生成对抗网络

Generator(生成器)概念

和传统的神经网络不同,Generator除了接受x的输入之外,还会接受一个简单的分布作为z进行输入,从而使得网络的输出也是一个复杂的分布

为什么输出需要时一个分布呢?以视频预测为例,比如说在糖豆人游戏中,我们需要预测视频的接下来的10帧是怎么样的

问题是传统的神经网络(NN)训练出来的结果,在拐角处,一个糖豆人会分裂为两个糖豆人,一个向左一个向右,这是因为在普通NN中,糖豆人向左和向右都有可能,是概率不同,因此他将这两个结果都显示了出来

更抽象地说,当我们的输出需要有一些“创造力”,也就是面对一个输入,需要有多个混合的输出的时候,我们就需要Generator,比如说在画图方面,同样输入“白发红瞳”,不同的人会画出不同的样子

因此其输入反而是一个相对低维度的向量,而输出是一个很高维度的向量。比如说一个一维向量代表了生成动漫人物的特征(发色、瞳距、表情等),而输出则是一张动漫图片,这肯定比输入要高纬度。刚开始的低维输入指的是x,而为了给生成器一个基准,我们还会输入一些动漫图片的采样,这个就是z

GAN

除了Generator之外,还需要一个Discriminator(鉴别器),他会输出一个数字,用于评判输出符合输入的程度。

以动画生成为例:
在GAN中,第一次迭代几乎是随机生成的,因此一般会生成一塌糊涂,而鉴别器则会给出很低的分数,比如鉴别器通过是否有眼睛判断是否是动漫
下一次迭代中,生成器会进行优化,尽量去满足第一代鉴别器的要求,使得在鉴别器Gen 1中得到较高的分数
而鉴别器也会进化,采用更加复杂的策略来进行评判

以此类推,不断进化,最后使得生成的结果越来越像输入x和z

进一步详细说明,刚开始我们会传入x和一个分布z到GAN中
Step 1
固定生成器,训练鉴别器

这个z实际上是一些动漫图片的采样,因为如果是纯随机生成的一代GAN,估计会跟电视坏了一样,因此给一些适当的基准是好的

接着我们用真正的动漫图片作为数据集1,并且对比数据集1和GAN生成的图片的差异,用这个去生成能够将真实数据(数据集1)和GAN生成图片分离开来的鉴别器

Step 2
固定鉴别器Discriminator ,训练生成器,使得生成器产生出来的图片能够“欺骗”鉴别器,因为鉴别器参数已经被固定了,所以生成器可以不断改变自身参数,生成出鉴别器更喜欢的图像,从而提高鉴别器分数

反复进行Step1和Step2,使得他们不断进化。也就是生成器不断调整参数使得它能够“欺骗”鉴别器,使得鉴别器认为它生成的图片就是一张真实的动漫图片;而鉴别器的任务则是仔细寻找生成图片和真实图片的区别,使得它能够区分生成的图

Generator详解

以一维向量为例,z作为一个随机采样的分布,他采样是相对平均的,而 P d a t a P_{data} Pdata表示的是真实数据,可以看到,经过生成器之后,生成出来的 P G P_G PG已经很接近 P d a t a P_{data} Pdata

简单来说,生成器的评判标准和最优化反向,是让生成结果 P G P_G PG尽量接近 P d a t a P_{data} Pdata,公式如下
G ∗ = a r g m i n G D i v ( P G , P d a t a ) G^* = arg\:min_G\: Div(P_G, P_{data}) G=argminGDiv(PG,Pdata)
也就是要对G进行取值,使得Div(P_G, P_{data})最小,也就是使得 P G P_G PG P d a t a P_{data} Pdata更接近 。

对鉴别器D的训练也是如此,分别对 P G P_G PG P d a t a P_{data} Pdata进行采样。当 P G P_G PG P d a t a P_{data} Pdata中的点比较接近的时候, V ( D , G ) V(D,G) V(D,G)是较小的。但是对于鉴别器来说,他的任务是要将生成的图片和真实的图片区分开来,也就是 P G P_G PG P d a t a P_{data} Pdata分得越开越好,因此 m a x D V ( D , G ) max_D\:V(D,G) maxDV(D,G),也就是寻找参数D,使得 V ( D , G ) V(D,G) V(D,G)最大

实际上,在公式 G ∗ = a r g min ⁡ G D i v ( P G , P d a t a ) G^* = arg\:\min_G\: Div(P_G, P_{data}) G=argminGDiv(PG,Pdata)中, D i v Div Div函数是很难计算的,但好消息是 D i v ( ) Div() Div()的结果和 m a x D V ( D , G ) max_D\:V(D,G) maxDV(D,G)是近似的(在此不作数学证明),因此 G ∗ G* G可以写作
G ∗ = a r g min ⁡ G max ⁡ D ( D , G ) G^* = arg\:\min\limits_{G}\: \max_D\:(D,G) G=argGminDmax(D,G)
也就是说,生成器要寻找参数G,使得 max ⁡ D ( D , G ) \max_D\:(D,G) maxD(D,G)最小,而鉴别器需要寻找参数D,使得 D ( D , G ) D\:(D,G) D(D,G)最大。这就是GAN的对抗过程,对应上面介绍的step1和step2,因此方程G*就是GAN的最优化方程

GAN训练小技巧(施工中)

Wasserstein distance

对于 P G P_G PG P d a t a P_{data} Pdata,他们的重叠空间可能及其小。如果数据维度越高,那想要重合的难度也就越高。

第二个是因为在对 P G P_G PG P d a t a P_{data} Pdata处理的时候,我们都是进行采样处理,很难知道两个分布的全貌,这也使得两个分布明明是重叠的,但我们仅靠采样判断的话,看似是可以画一条线将他们分开的。 P G P_G PG P d a t a P_{data} Pdata部分重叠代表着生成器在当前G1的参数下生成的内容是和真实样本相近的,但是在鉴别器上,他看起来和完全无重叠的情况一样,也就是鉴别器会认为他们完全不相像,这会使得生成器认为G1参数很烂,从而不采用它

最简单的解决方案就是直接增加采样数量,但是这会增加训练时间

后来有一种新方法称之为Wasserstein distance
这种方法类似一种推土机,会整体地考虑两个点集之间的距离,而非直接使用二分,其最优化公式如下
max ⁡ D ∈ 1 − L i p s c h i t z E x P d a t a [ D ( x ) ] − E x P G [ D ( x ) ] \max_{D\in1-Lipschitz}{E_{x~P_{data}}[D(x)]-E_{x~P_{G}}[D(x)]} D1LipschitzmaxEx Pdata[D(x)]Ex PG[D(x)]

GAN

GAN由生成器和鉴别器组成,这也导致只要有其中一方出现问题,就会导致整个系统瘫痪。


http://www.ppmy.cn/news/1211859.html

相关文章

【开源】基于Vue.js的生活废品回收系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案,旨…

《Redis实战》笔记

文章目录 1.字符串命令2.列表命令3.集合命令4.散列命令5.有序集合命令6.发布订阅命令7.其他命令8.redis事务9.键的过期时间10.redis的持久化 1.字符串命令 2.列表命令 3.集合命令 4.散列命令 5.有序集合命令 6.发布订阅命令 7.其他命令 8.redis事务 5个命令:WATCH …

聊天机器人框架Rasa资源整理

Rasa是一个主流的构建对话机器人的开源框架,它的优点是几乎覆盖了对话系统的所有功能,并且每个模块都有很好的可扩展性。参考文献收集了一些Rasa相关的开源项目和优质文章。 一.Rasa介绍 1.Rasa本地安装 直接Rasa本地安装一个不好的地方就是容易把本地…

跨域:利用JSONP、WebSocket实现跨域访问

跨域基础知识点:跨域知识点 iframe实现跨域的四种方式:http://t.csdnimg.cn/emgFr 注:本篇中使用到的虚拟主机也是上面iframe中配置的 目录 JSONP跨域 JSONP介绍 跨域实验: WebSocket跨域 websocket介绍 跨域实验 JSONP跨域…

C语言动态规划解决0-1背包问题

动态规划(Dynamic Programming,简称DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,它能够将问题…

【pytorch深度学习】使用张量表征真实数据

使用张量表征真实数据 本文为书pytorch深度学习实战的一些学习笔记和扩展知识,涉及到的csv文件等在这里不会给出,但是我会尽量脱离这一些文件将书本想要表达的内容给展示出来。 文章目录 使用张量表征真实数据1. 加载图像文件2. 改变布局3. 加载目录下…

第二十五节——Vuex--历史遗留

文档地址 Vuex 是什么? | Vuex version V4.x 一、概念 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。一个状态自管理应用包含以下几个部…

【题解】2023-11-11 B层模拟赛T1

宣传一下 算法提高课整理 CSDN个人主页:更好的阅读体验 原题链接 CF461B 题目描述 一棵树有 n n n 个节点, n − 1 n − 1 n−1 条边。树上的节点有两种:黑,白节点。 Tyk 想断掉一些边把树分成很多部分。 他想要保证每个部…