Generative Adversarial Network(生成对抗网络)

news2024/11/24 20:08:07

目录

Generative Adversarial Network(生成对抗网络)

Basic Idea of GAN

GAN as structured learning

Can Generator learn by itself

Can Discriminator generate

Theory behind GAN

Conditional GAN


Generative Adversarial Network(生成对抗网络

Basic Idea of GAN

  • Generation(生成器)

 Generation是一个neural network,它的输入是一个vector,它的输出是一个更高维的vector,以图片生成为例,输出就是一张图片,其中每个维度的值代表生成图片的某种特征。

  • Discriminator(判别器)

Discriminator也是一个neural network,它的输入是一张图片,输出是一个scalar,scalar的数值越大说明这张图片越像真实的图片。

  • Generation和Discriminator两者的关系

举了鸟和蝴蝶例子说明Generation和Discriminator之间的关系是相互对抗,相互提高。然后提出两个问题:

  1. Generator为什么不自己学,还需要Discriminator来指导。
  2. Discriminator为什么不自己直接做。
  • Algorithm(算法说明)

首先要随机初始化generator 、discriminator的参数;

然后在每一个training iteration要做两件事:

1. 固定generator的参数,然后只训练discriminator。

将generator生成的图片与从database sample出来的图片放入discriminator中训练,如果是generator生成的图片就给低分,从database sample出来的图片就给高分。

2. 固定discriminator的参数,然后只训练generator。

把generator生成的图片当做discriminator的输入,训练目标是让输出越大越好。

具体算法如下:

训练D(固定G):

  1. 首先从database中抽取m个样本。
  2. 从一个分布中抽取m个vector z。
  3. 将z输入generator,生成m张图片
  4. 计算损失,最大化损失。

训练G(固定D):

  1. 随机产生m个噪声,通过generator得到图片G(z);
  2. 然后经过discriminator得到D(G(z)),更改G中的参数,使得它的得分越高越好。

GAN as structured learning

结构化学习的输入和输出多种多样,可以是序列(sequence)到序列,序列到矩阵(matrix),矩阵到图(graph),图到树(tree)等。例如,机器翻译、语音识别、聊天机器人、文本转图像等。GAN也是结构化学习的一种。

  • Structured Learning面临的挑战
  1. One-shot/Zero-shot Learning:比如在分类任务中,有些类别没有数据或者有很少的数据。
  2. 机器需要创造新的东西。如果把每个可能的输出都视为一个“class”,由于输出空间很大,大多数“class”都没有训练数据,也,这就导致了机器必须在testing时创造新的东西。
  3. 机器需要有规划的概念,要有大局观。因为输出组件具有依赖性,所以应全局考虑它们。
  • Structured Learning Approach

传统的structured learning主要有两种做法:Bottom up 和 Top down。

Bottom up:机器逐个产生object的component。

Top down:从整体来评价产生的component的好坏。

Generator可以视为是一个Bottom Up的方法,discriminator可以视为是一个Top Down的方法,把这两个方法结合起来就是GAN。

Can Generator learn by itself

可以用监督学习的方法来对generator进行训练,但是还会存在一个问题:表示图片的code从哪里来。如果随机产生,训练起来可能非常困难。因为如果两种图片很像,它们输入vector差异很大的话,就很难去训练。

可以通过训练一个encoder,得到相应的code。但是存在的问题就是:Vector a 输出结果是向左的1,vector b 输出结果是向右的1。若把a、b平均作为输入,则输出不一定是数字,可以使用VAE来解决这个问题。

  • VAE (Variational Auto-Encoder,变分编码器)

VAE不仅产生一个code还会产生每一个维度的方差;然后将方差和正态分布中抽取的噪声进行相乘,之后加上code上去,就相当于加上noise的code。

  • VAE的缺陷

在生成图片时,不是单纯的让生成结果与真实结果越接近越好,还要保证整幅图片符合现实规律。

假设Layer L-1的值是给定的,则Layer L每一个dimension的输出都是独立的,无法相互影响。因此只有在L后面在加几个隐藏层,才可以调整第L层的神经元输出。也就是说,VAE要想获得GAN的效果,它的网络要比GAN要深才行。

下图中绿色是目标,蓝色是VAE学习的结果。VAE在做一些离散的目标效果不好。

Can Discriminator generate

Discriminator就是给定一个输入,输出一个分数。对discriminator来说,要考虑component和component之间的联系就比较容易。比如有一个滤波器,它会去检索有没有独立的像素点,有的话就是低分。

假如有一个discriminator,它能够鉴别图片的好坏,就可以用这个discriminator去生成图片。穷举所有的输入x,比较discriminator给出的分数,找到分数最高的就是discriminator的生成结果。

  • 训练discriminator
  1. 首先给定一些正样本,随机产生一些负样本。
  2. 在每一个iteration里面,训练出discriminator能够鉴别正负样本。
  3. 然后用训练出来的discriminator生成图片当做负样本。
  4. 开始迭代。

从可视化和概率的角度来看一下整个过程。蓝色的是discriminator生成图片的分布,绿色的是真实图片分布。训练discriminator给绿色的高分,蓝色的低分。然后寻找discriminator除了真实图片之外,得分最大高的地方把它变成负样反复迭代,最终正样本和负样本就会重合在一起。

  • Generator v.s. Discriminator

generator:很容易生成图片,但是它不考虑component之间的联系。只学到了目标的表象,没有学到精神。

Discriminator:能够考虑大局,但是很难生成图片。

  • Generator + Discriminator

Generator就是取代了这个argmax的过程。GAN的优点如下:

从discriminator来看,利用generator去生成样本,去求解argmax问题,更加有效。

从generator来看,虽然在生成图片过程中的像素之间依然没有联系,但是它的图片好坏是由有大局观的discriminator来判断的。从而能够学到有大局观的generator。

Theory behind GAN

假如要生成一些人脸图,实际上就是想要找到一个分布,从这个分布内sample出来的图片像是人脸,分布之外生成的就不像人脸。而GAN要做的就是找到这个distribution。

在GAN之前用的是Maximum Likelihood Estimation。

  • Maximum Likelihood Estimation(最大似然估计)

最大似然估计的思想是,假设数据的分布是 ,定义一个分布为 ,求得一组参数θ,使得 越接近越好。具体步骤如下:

  1. 中sample出一些样本;
  2. 对于sample出来的样本,可以计算出它们的likelihood;
  3. 计算总分likelihood L,并找到一组参数  使得L最大。

  • MLE=Minimize KL Divergence

最大似然估计就相当于最小化的KL散度。

如果使用最大似然估计,采用高斯混合模型定义PG  ,生成的图片会非常模糊,现在使用generator产生PG 。优化的目标就是使PGPdata 越接近越好,即使得G* 越小越好,但是不知道PGPdata 的公式。

虽然不知道PGPdata 的公式,但是可以从这两个分布中做sample。可以用Discriminator来衡量PGPdata 的Divergence。训练出来的maxV(G,D) 就相当于JS divergence。

  1. 证明过程

要求V(G,D)的最大值,就是求 的最大值。

因为 都是固定的,所以设为常数,然后通过求导求出最大值。

将求出的D* 回带入V(G,D),然后化简。

Generator 的训练目标就是,找到一个G* 去最小化 之间的差异,即 ,由于不知道 的具体公式,所以无法直接计算divergence。于是通过一个discriminator来计算两个分布之间的差异, 。所以最终优化目标为

 

 首先训练D,多训练几次直至收敛;之后训练G:其中第一项是与生成器无关的,由于G不能训练太多,否则会导致D无法evaluate JS,所以update一次就好。

  • In practice

理论上V是要取期望值,但是实际上是不可能的,只能用样本的均值进行估计。

论文原文在实作的时候把 换成 ,蓝色曲线刚开始的值很大,适合做梯度下降。其实后来实验证明两种结果都差不多。

Conditional GAN

  • Text-to-Image

对于根据文字生成图像的问题,传统的做法就是训练一个NN,然后输入一段文字,输出对应一个图片,输出图片与目标图片越接近越好。存在的问题就是,比如火车对应的图片有很多张,如果用传统的NN来训练,模型会产生多张图像的平均,结果就会很模糊。

  • Conditional GAN

Conditional GAN与普通GAN的区别在于输入加入了一个额外的condition,并且在训练的时候使得输出的结果拟合这个 condition。

此时的discriminator的输入是generator的输出和conditional vector,此时discriminator有两个任务:

  1. 判断图片质量的好坏(图片是否是真实图片)。
  2. 图片是否和输入条件匹配。
  • Algorithm

训练D(固定G):

  1. 首先从database中抽取m个样本,每个样本都是一对条件和图片。
  2. 从一个分布中抽取m个vector z;然后每个vector都加上条件,表示为(c,z)。
  3. 将(c,z)输入generator,生成m张图片x (条件+图片)。
  4. 从database中随机选取m个真实图片 x
  5. 计算损失,最大化损失。

训练G(固定D):

  1. 随机产生m个噪声,随机从database中抽取m个条件;
  2. 通过generator得到G(C,Z),然后经过discriminator得到D(G(C,Z)),更改G中的参数,使得它的得分越高越好。

具体设计条件GAN判别器,有两种方式:

  1. 图片x经过一个网络变成一个code,条件经过一个网络也变成一个code;把这两种code组合在一输入到网络里面,输出一个分数。
  2. 首先让图片经过一个网络,输出一个分数(用于判断图片是否真实),同时这个网络也输出一个code,这个code和条件结合起来输入到另外一个网络里,也输出一个分数(图片和文字是否匹配)。

  • Stack GAN(叠加生成对抗网络)

第一个网络生成小的图片,第二个网络生成大的图片。

  • Image-to-image

传统做法存在的问题就是产生的图片很模糊,是因为它是许多张图片的平均。

Conditional GAN的做法就是,generator的输入一张图片和noise z,输出一张图片,discriminator会输入产生的image和input,输出一个scalar。通过算法的迭代,生成下面第三张图片,看起来很清晰,但和真实的图片还是有差异。所以提出了GAN+close,对generator生成的image加上限制,使得生成的image与真实对象越接近越好,得到第四张图片。

  • Speech Enhancement(语音增强)

这里和image-to-image原理类似,都是把G的输入和输出作为D的输入。

  • Video Generation

Video Generation能够根据影片的前几帧产生后几帧。conditional 为之前几帧的图片。

 

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

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

相关文章

SpringBoot + Vue前后端分离项目实战 || 一:Vue前端设计

文章目录 环境配置开发工具下载Vue前端模板前端项目启动前端说明及修改修改导航栏自定义菜单与子菜单增加导航标签功能 前端数据格式 B站视频讲解:2023全网最简单但实用的SpringBootVue前后端分离项目实战 不想看视频可浏览此文章笔记,比较详细 环境配置…

民族工业领军企业:大族激光全流程数字化增长路径揭秘

1.关于大族激光 大族激光科技产业集团(简称“大族激光”,股票代码 002008)于 1996 年创立、2004 年上市,是亚洲最大、世界排名前三的工业激光加工及自动化整体解决方案服务商,专业从事工业激光加工设备与自动化等配套…

Python面向对象编程2-面向过程的银行账号模拟程序 项目2.2 取款与查看余额

项目总目标:用面向过程思想设计一个简单的银行账号模拟程序。本次将迭代多个程序版本,每个版本都将添加更多功能。虽然这些程序没有达到发布的质量标准,但整个项目的目的是关注于代码如何与一个或多个银行账户的数据进行交互。 分析项目的必要…

MySQL8漏洞处理之小版本升级至8.0.33

MySQL低版本经常会出现一些漏洞,有些高危漏洞就得处理,以防未知风险。 一、漏洞描述 MySQL 安全漏洞(CVE-2023-21912)(CVE-2023-21980): Oracle MySQL 5.7.41 版本及之前版本和 8.0.32 版本及之前版本的 Client programs 组件存在安全漏洞。低权限攻击…

使用Channel的一些业务场景

使用Channel的一些业务场景 首先需要明确的就是,发送方才知道什么时候关闭 channel ,这个是比较符合逻辑的。 我们需要知道哪些情况会使 channel 发生 panic 关闭一个 nil 值会引发关闭一个已经关闭的 channel 会引发向一个已经关闭的 channel 发送数据…

职场人的AI私塾,帮你打造得力的AI助手

你有没有想过,为什么有一些周围的小伙伴,工作量看着也不少,但事务处理速度特别快,质量也不差;一些看起来难度比较大或者生疏的工作,也能轻松应付得来,难道他们都是天生的工作能力出众&#xff1…

小白速看!带你轻松解决Java的空指针异常

关注“Java架构栈”微信公众号,回复暗号【Java面试题】即可获取大厂面试题 异常案例 对很多Java初学者来说,在学习的初期是很容易遇到各种异常的,就比如咱们今天要讲的这个空指针异常。所谓“授之以鱼,不如授之以渔”,…

Q-Vision+Kvaser CAN/CAN FD/LIN总线解决方案

智能联网技术在国内的发展势头迅猛,随着汽车智能化、网联化发展大潮的到来,智能网联汽车逐步成为汽车发展的主要趋势。越来越多整车厂诉求,希望可以提供本土的测量软件,特别是关于ADAS测试。对此,Softing中国推出的Q-V…

CppUnit——【由JUnit移植过来的】C++单元测试框架——的下载安装

C单元测试框架CppUnit的下载与安装 简介下载地址导入到Virtual Studio准备条件根据VS版本选择导入对应的.sln文件 简介 CppUnit是【由JUnit移植过来的】C测试框架。 下载地址 从我使用的CppUtest框架中的文档/readme/ReadmePart1_VisualStudio.rtf文件中看到了官网的地址cpp…

前端性能优化:高在性能,大在范围,必要前置知识一网打尽!(下)

前言 在上一篇 前端性能优化:高在性能,大在范围,必要前置知识一网打尽!(上) 一文中介绍了和前端性能优化相关的一些前置知识,那么本篇就针对优化方案进行总结,核心的方向还是上篇文…

C++基础(6)——类和对象(4)

前言 本文主要介绍了C中运算符重载的基本知识。 4.5.1:加号运算符重载(成员函数和全局函数都可实现) 运算符重载:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型 1:成员…

管理类联考——写作——素材篇——论说文——写作素材03——志篇:逆境·考验04——志篇:初心

管理类专业学位联考 (写作能力) 论说文素材 03——志篇:逆境考验 论文说材料: 逆境是天才的进身之阶;信徒的洗礼之水;能人的无价之宝; 弱者的无底之渊。 ——巴尔扎克 一:道理论据 不是一番寒彻骨,怎得…

【Azure】微软 Azure 基础解析(九)Azure 标识、身份管理、Azure AD 的功能与用途

本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中。 本系列文章列表如下: 【Azure】微软 Azure 基础解析(三)云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx 【A…

测量设备频宽范围选择要素—系统响应速度

系统响应速度是输入信号经过电压/电流驱动系统输出响应的幅值升到终值过程的斜率,而上升时间是系统响应速度的一种度量,上升时间越短,响应速度越快。 由一阶系统响应定义中,稳定的一阶系统上升时间 定义是响应从终值10%上升到终值…

git常用命令合集(建议收藏)

1、git init将本文件夹初始化成一个本地git仓库 2、git clone'xxx'将github上的远程克隆到本地 3、git add [file1] [file2] 添加文件到暂存区,包括修改的文件、新增的文件 4、git add [dir] 添加目录到暂存区,包括子目录 5、…

java 类之间相互引用实例探索

本文记录一下自己对类之间相互引用的探索,如有错误,希望不吝赐教 问题一:类之间相互引用依赖会不会引用死循环 不会,例如:A类中声明一个B类的引用,B类中也声明一个A类的引用,因为类之间的引用相…

TCP为什么要三次握手与四次分手?

概要 TCP协议是五层协议中运输层的协议,下面依赖网络层、链路层、物理层,对于一个报文想发到另一台机器(假设是服务器)上对等层,每一个所依赖的层都会对报文进行包装,例如TCP协议就依赖网络层的IP协议,所以发送的报文会…

【数据库数据恢复】SQL Server数据表结构损坏的数据恢复案例

数据库故障&分析: SQL server数据库数据无法读取。 经过初检,发现SQL server数据库文件无法被读取的原因是因为底层File Record被截断为0,无法找到文件开头,数据表结构损坏。镜像文件的前面几十M空间和中间一部分空间被覆盖掉…

大专毕业,干了 3 年外包,废了····

如果不是女朋友和我提分手,我估计到现在还是外包公司呆着 大专生,19年通过校招进入湖南某软件公司,干了接近3年的点点点(功能测试),今年年初,感觉自己不能够在这样下去了,长时间呆在…

VSCode借助Remote-SSH扩展,远程调试linux系统的机器人

本文主要介绍使用VSCode借助Remote-SSH扩展,远程调试linux系统的机器人的方法 在我之前的文章: ROS主机搭建NFS服务器,虚拟机通过挂载访问及修改主机文件 中介绍了采用挂载到的方式进行远程调试的方法,本文将介绍另一种方法&#…