【生成对抗网络】GAN生成对抗网络理论知识

news2024/10/7 20:31:59

GAN生成对抗网络目录

    • 引入Generator
      • Network as Generator
      • 为什么要训练Generator:需要输出是分布
    • 引入GAN
      • Basic Idea of GAN:
      • 区分Unconditional generation 与 Conditional generation
        • Unconditional generation
        • Conditional generation
      • 引入Discriminator
      • Generator、Discriminator算法训练:
        • Step 1:定住Generator,只 train Discriminator
        • Step 2:定住Discriminator,只 train Generator
        • Step 3:反复训练
    • GAN理论部分(Theory behind GAN)
    • GAN训练的小Tips
      • WGAN
        • JS Divergence存在的问题
        • 使用Wasserstein distance代替JS Divergence
        • Wasserstein distance计算方法
      • 其他Tips
      • GAN应用于Sequence Generation的问题(生成文字)
      • 其他Generative Models
        • Variational Autoencoder(VAE)
        • Flow-based Model
      • 使用监督学习的方法
    • GAN的评价指标(Evaluation of Generation)
      • Mode Collapse 和 Mode Dropping 问题
      • 衡量指标Incention Score和Incention Distance
      • 衡量指标出现的其他问题

引入Generator

之前的 network 都是一个 function,给一个 x 输出一个 y

Network as Generator

network 的输入会加上一个 randomvariableZ),其中 Z 是从某一个 distribution sample 出来的。

在这里插入图片描述


1、可以 input 的一样长的 X、Z 相加或者向量连接为长向量也可以,输入到 network

2、其中 Z 是不固定的,每一个使用 network 都会随机生成一个 Z(每次都不一样)。

3、其中的限制:distribution 够简单(知道公式),可以从 distributionsampledistribution 可以是 gaussian distribution 或者 uniform distribution
4、可以输出一个 distributionnetwork 称为 Generator

为什么要训练Generator:需要输出是分布

当任务需要一点创造力的时候(想找一个 function ,在同样的输入有多种可能的输出,而且不同输出都是对的)例如:DrawingChatbot

引入GAN

Generator model 最出名就是 Generative Adversarial NetworkGAN)。
GAN 有各式各样的变形:ACGAN、BGAN、CGAN、DCGAN、EBGAN、FGAN、GoGAN…(the-gan-zoo

Basic Idea of GAN:

演化的故事:枯叶蝶对应就是Generator,它的天敌比比鸟就是DiscriminatorGenerator 要画出二次元人物骗过 Discriminator(对抗的关系)
在这里插入图片描述
以生成动漫人物人脸为例子:
在这里插入图片描述

区分Unconditional generation 与 Conditional generation

Unconditional generation

举例:让机器生成动画二次元人物的脸(Unconditional generation

Unconditional generation :先把 x 拿掉(Conditional generation再把 x 加回来),所以 Generator 的输入是 Z ,输出是 y (输入的 Z 是从一个 normal distribution (不一定得是这个)sample 出来的向量,通常是 Low-dim vector ,维度是自己定的;y 是一个二次元人物的脸,是 high-dim vector)。
在这里插入图片描述

Conditional generation

Conditional generation再把 x 加回来,根据Condition xz 来产生 y

应用:Text-to-image(文字对图片的生成)、Image Traslation (也称为pix2pix)根据图片生成图片…
Text-to-image也是一个 Supervised Learning 的问题。
在这里插入图片描述
Conditional generation 出现的问题
Generator只要产生图片骗过Discriminator,不必管 x 的文字是什么。
在这里插入图片描述
解决方法:输入到Discriminator不只是图片 y ,还有 x。训练这样的Discriminator需要文字跟影像成对的资料(Pair Data
在这里插入图片描述

引入Discriminator

GAN 中,除了 Generator,还需多训练一个 Discriminator
Discriminator:(本身也是一个 network ,也是一个 function
它会拿一张图片作为输入,输出是一个 Scalar(数值),Scalar 越大说明输入的图片越像真实的二次元人物的图像。
在这里插入图片描述


GeneratorDiscriminatorneural network 架构都是可以自己设计(可以用CNNTransformer都可以)

Generator、Discriminator算法训练:

GeneratorDiscriminator就是两个networknetwork在训练前需对参数进行初始化。

Step 1:定住Generator,只 train Discriminator

一开始Generator的参数是随机初始化的,此时固定住等于啥也没做,此时输入一堆向量,输出乱七八糟的图片(杂讯),从gaussian distribution里去random sample一堆vector输入到Generator(这些图片与正常二次元人物非常不像);database有很多二次元人物头像sample一些头像,拿真正的与Generator产生的结果去训练DiscriminatorDiscriminator训练的目标就是分辨真正的二次元人物与Generator产生的之间的差异。(可能会将真正的标为1Generator产生的标位0Discriminator做分类或回归)
在这里插入图片描述

Step 2:定住Discriminator,只 train Generator

目标:让Generator想方法去骗过Discriminator。
Generatorgaussian distribution sample 一个vector作为输入,产生一个图片,然后丢到 Discriminator给一个ScalarDiscriminator 参数是固定的,只会调整Generator的参数)
Generator调整参数使得输出的让Discriminator给高分(训练 Generator 调整参数也是使用 gradient descent 的方法)
在这里插入图片描述

Step 3:反复训练

在这里插入图片描述

其他):
StyleGAN(19年)产生的动漫头像很逼真,ProgressiveGAN产生真实的人脸。
GANGenerator就是输入一个向量输出一张图片,还可以把输入的向量做内插(interpolation),可以看到两张图片之间连续的变化。

GAN理论部分(Theory behind GAN)

想minimize P d a t a P_{data} Pdata P G P_{G} PG的 Divergence

vector 通过 Normal Distribution ——> Generators ——> Distribution(复杂,称为 P G P_G PG
P G P_G PG 与真正的data形成的 Distribution (称为 P d a t a P_{data} Pdata)求Divergence(期待 P G P_G PG P d a t a P_{data} Pdata 越接近越好 Divergence(两个分布之间的某种距离))

实质:找一个Loss function (找一个 G G G 使得 P G P_G PG P d a t a P_{data} PdataDivergence 越小越好)(例如KL DivergenceJS Divergence

在这里插入图片描述

怎么计算Divergence(两个分布之间的某种距离)

GAN很好的突破了怎么计算Divergence的问题。
GAN思路:只要知道怎么从 P G P_G PG , P d a t a P_{data} Pdata 这两个Distribution Sample东西出来,就有办法计算Divergence。不需要实际知道 P G P_G PG , P d a t a P_{data} Pdata的公式。
在这里插入图片描述
借助 Discriminator 计算 Divergence

一大堆的real data(从 P d a t a P_{data} Pdata Sample出来的结果),也有一大堆 generative data(从 P G P_G PG Sample出来的结果)。根据real datagenerative data训练一个Discriminator,目标:看到real data就给比较高的分数,看到generative data给低分。

上述过程可以视为一个 Optimization 的问题,这个问题就是要训练一个Discriminator,可以去maximize某一个functionObjective Function)(minimizefunction称为Loss Function)。

希望从 P d a t a P_{data} Pdata Sample的 D ( y ) D(y) D(y) 越大越好,希望从 P G P_{G} PG Sample的 D ( y ) D(y) D(y) 越小越好。原来的 Objective Function 写成这样是为了Discriminator和二元分类扯上关系,这个 Objective Function 就是 cross entropy 乘一个负号。

在这里插入图片描述

Objective Function的最大值跟JS Divergence有关。

总结:不知道怎么计算 Divergence,但是train Discriminator,train完后看看 Objective Function 可以到多大,这个值就跟 Divergence 有关。

在这里插入图片描述

GAN理论部分(Theory behind GAN)小结:

本来的目标:找一个 Generator 去minimize P G P_G PG P d a t a P_{data} PdataDivergence
因为不知道怎么计算 Divergence :训练一个 Discriminator,训练完后 Objective Function 的最大值就是跟JS Divergence有关。

注:可以改Objective Function 来换为其他的 Divergence
paper:f-GAN: Training Generative Neural Samplers using Variational Divergence Minimization 列举了不同的 Divergence 需如何设计 Objective Function 去找 maximum value

在这里插入图片描述

GAN训练的小Tips

GAN is difficult to train.

WGAN

WGAN就是使用Wasserstein distance取代JS DivergenceGAN

JS Divergence存在的问题

JS Divergence的问题: P G P_G PG P d a t a P_{data} Pdata 往往重叠的部分非常少 !
理由1data本身特性( P G P_G PG P d a t a P_{data} Pdata 是高维空间的低维的manifold,例如二维空间的线,重叠的很少)。
理由2 P G P_G PG P d a t a P_{data} Pdata 都是Sample出来的,可能Sample得不合理。

在这里插入图片描述

:两个没有重叠的分布,JS Divergence算出来永远都是 l o g 2 log2 log2(不管分布长什么样)。
在这里插入图片描述
当使用JS Divergence时,训练 binary classifier 去分辨 real imagegenerative image 的时候,正确率是100%,所以在GAN训练过程binary classifierloss 或者 accuracy 都没有意义。

使用Wasserstein distance代替JS Divergence

解决方法:既然是JS Divergence的问题,换一个衡量两个 distribution 的相似程度的方式(换一种Divergence
,使用Wasserstein distance(也称为Earth Mover DistanceEMD))

Wasserstein distance会穷举所有的 Moving Plans ,看哪一个 “推土” 的方法让平均距离最小,取最小值。(一个 Optimization 问题)

Wasserstein distance计算方法

max ⁡ D ∈ 1 − L i p s c h i t z {   E y ∼ P d a t a [ D ( y ) ] − E y ∼ P G [ D ( y ) ]   } \max\limits_{D\in1-Lipschitz} {\{ ~E_{y\sim P_{data}}[D(y)]-E_{y\sim P_{G}}[D(y)]~\}} D1Lipschitzmax{ EyPdata[D(y)]EyPG[D(y)] }

解上述式子解完就是 P d a t a P_{data} Pdata P G P_{G} PGWasserstein distance

对式子进行解释:
其中 y y y 如果从 P d a t a P_{data} Pdata 中来的,要计算 D ( y ) D(y) D(y) 的期望值, y y y 如果从 P G P_{G} PG中来的,要计算 D ( y ) D(y) D(y) 的期望值,再乘上一个负号。
D D D 不能是一个随便的 Function,必须是一个1-LipschitzFunction,意思就是 D D D 是一个足够平滑的 Function

D D D 不是一个足够平滑的 Function。只看大括号中,只想要 D ( y ∼ d a t a ) D({y_{\sim data})} D(ydata) 越大越好, D ( y ∼ G ) D({y_{\sim G})} D(yG) 越小越好(没有重叠),Discriminator会给 real image ∞ ∞ ,给 generated image − ∞ -∞ ,导致 training 无法收敛,算出来 max ⁡ D ∈ 1 − L i p s c h i t z {   E y ∼ P d a t a [ D ( y ) ] − E y ∼ P G [ D ( y ) ]   } \max\limits_{D\in1-Lipschitz} {\{ ~E_{y\sim P_{data}}[D(y)]-E_{y\sim P_{G}}[D(y)]~\}} D1Lipschitzmax{ EyPdata[D(y)]EyPG[D(y)] }就是无限大。
在这里插入图片描述
怎么确保 Discriminator 一定符合 D ∈ 1 − L i p s c h i t z D\in1-Lipschitz D1Lipschitz
思路

一、最早的WGAN paper(Original WGAN思路是修改 Weight): 训练网络时,训练的参数 w w w 放于 c c c − c -c c 之间, i f if if w > c w>c w>c w = c w=c w=c i f if if w < − c w<-c w<c w = − c w=-c w=c(不一定真的能使Discriminator变成 1-LipschitzFunction )。

二、paper:Improved WGAN :思路是 Gradient Penalty:使用方法Spectral NormalizationSNGAN ) 限制 D ∈ 1 − L i p s c h i t z D\in1-Lipschitz D1Lipschitz ( Keep gradient norm smaller than 1 everywhere )。

其他Tips

  • Tips from Soumith https://github.com/soumith/ganhacks
  • Tips in DCGAN: Guideline for network architecture designfor image generation https://arxiv.org/abs/1511.06434.
  • lmproved techniques for training GANs https://arxiv.org/abs/1606.03498.
  • Tips from BigGAN https://arxiv.org/abs/1809.11096

GAN应用于Sequence Generation的问题(生成文字)

训练 GAN 最难的就是拿 GAN 来生成文字
生成文字是一个 Seq2seq 模型 Decoder会产生一段文字(Seq2seq 模型就是GeneratorDecoder扮演Generator角色)

问题难点:若用 gradient descent 去训练GeneratorDecoder),让 Discriminator 输出分数越大越好做不到。因为小小变化改变了Decoder的参数,输出的 Distribution也会小小变化,但是对取 max 分布的 Token 无影响,对Discriminator 的输出没有影响。

在这里插入图片描述

:遇到 gradient descent 的问题可以使用 reinforcement LearningRL)硬做,但是在此问题上,二者都比较难训练。

解决方法Training language GANs from Scratch ( paper ) 不用预训练,但需大量调参和 tips。引入 SeqGAN-step 技术,需要很大的 batch size

其他Generative Models

Variational Autoencoder(VAE)

Flow-based Model

使用监督学习的方法

重点是图片对应随机的 vector 训练起来结果比较差。要特殊的方法处理这些 vector
在这里插入图片描述

GAN的评价指标(Evaluation of Generation)

思路:训练一个影像的分类器。
在这里插入图片描述

Mode Collapse 和 Mode Dropping 问题

光使用这个做法会让Mode Collapse的问题骗过去
Mode CollapseGenerative model 输出的图片来来去去都是那几张。
在这里插入图片描述
Mode Dropping的问题:产生出来的资料的分布只是真实资料分布的一部分。
在这里插入图片描述

评估的参数:
Quality:只看一个图片,一个图片输入进Classifier的时候,分布有没有非常集中,越集中 Quality 越大
Diversity:看一堆图片,看分布的平均,总的越平均 Diversity 越大。

衡量指标Incention Score和Incention Distance

Incention ScoreIS):分类器 CNN 是用一个 Trip 来做的, Quality 高且 Diversity 大, Incention Score就越大。

Frechet Incention Distance
在这里插入图片描述
paper:Are GANs Created Equal? A Large-Scale Study

FID存在的问题:
一、输出的分布当做 Gaussians Distribution 可能存在问题。
二、要准确得到 Network 的分布,可能需要大量 Sample
三、实际操作可能会参考FID和例如动漫人物人脸检测出的数目等其他指标。

衡量指标出现的其他问题

Real DataGenerated Data 一模一样(计算的FID非常小,或者人脸辨识系统也打高分)
在这里插入图片描述

paper:Pros and cons of GAN evalustion measures 列举了20几种GAN Generator的评估方式

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

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

相关文章

基于Bert-Lstm-Crf的命名实体识别(PyTorch 实现)

1 前言 1-1 简介 命名实体识别(NER)是自然语言处理的基础任务&#xff0c;处于工程性任务的上游&#xff0c;很多的下游任务依赖于命名实体识别的效果&#xff0c;所以命名实体识别也是自然语言处理中非常重要的一环。命名实体识别的任务非常简单&#xff0c;给出一段文本&…

MindSpore模型快速调优攻略笔记分享(上)

• 近年来&#xff0c;深度学习技术在语音识别、自然语言处理、计算机视觉、信息检索等任务上取得了突破性进展; • 深度学习模型的复杂度与规模日益扩张&#xff0c;导致模型的调试调优成为了困扰算法工程师的一大难题; • MindSpore是由华为自研的深度学习框架&#xff0c;…

整理收集python面试常见题目

1.多进程和多线程 1.python多进程和多线程看这一篇就够了_T型人小付的博客-CSDN博客 2.多进程和多线程的实现&#xff1a;一文看懂Python多进程与多线程编程(工作学习面试必读) - 知乎 3.多线程的补充&#xff1a;一文看懂Python多进程与多线程编程(工作学习面试必读) - 知乎…

软件测试面试技巧 这么准备,拿下心仪offer不是问题

拥有一个心仪的offer&#xff0c;是每个软件测试工程师们都梦寐以求的事情&#xff0c;那如何才能通过最后的面试一关&#xff0c;拿到offer呢&#xff1f; 俗话说&#xff0c;知己知彼百战不殆&#xff0c;作为测试员&#xff0c;在面试前对面试官可能提出的问题进行总结和准…

UDS - 14.2.1 RoutineControl (31) service

来自&#xff1a;ISO 14229-1-2020.pdf 目录 14.2.1 服务描述 14.2.1.1 概述 14.2.1.2 通过引用routineIdentifier来启动一个例程 14.2.1.3 通过引用routineIdentifier来停止一个例程 14.2.1.4 通过引用routineIdentifier来请求例程结果 14.2.2请求消息 14.2.2.1请求消…

【从零开始学习深度学习】31. 卷积神经网络之残差网络(ResNet)介绍及其Pytorch实现

和之前介绍的批量归一化层作用类似&#xff0c;残差网络&#xff08;ResNet&#xff09;提出的主要目的也是为了优化深度神经网络中数值稳定性问题。 1. 残差块介绍 假设输入为x\boldsymbol{x}x&#xff0c;希望学出的理想映射为f(x)f(\boldsymbol{x})f(x)。下图左右为普通网…

【GO】 K8s 管理系统项目[API部分--Namespace]

K8s 管理系统项目[API部分–Namespace] 1. 接口实现 service/dataselector.go type namespaceCell corev1.Namespacefunc(n namespaceCell) GetCreation() time.Time {return n.CreationTimestamp.Time }func(n namespaceCell) GetName() string {return n.Name }2. Namespa…

景联文科技:赋能智能安防,详谈其中运用到的数据标注类型

“数据显示&#xff0c;2013-2020年我国智能安防行业市场规模由101亿元增长至511亿元。随着智能安防在多个领域的深化应用&#xff0c;预计2023年我国智能安防行业市场规模将超1000亿元。 智能安防领域中,数据标注主要应用于计算机视觉与语音识别两个主要领域&#xff0c;具体…

人口数据可视化,深圳是人口密度最高的城市,东莞上海位居二三名

进入2022年以来&#xff0c;人口问题频频引起热议&#xff0c;人口老龄化、生育意愿再创新低、男女比例失衡等等问题频出。具体的人口问题如何&#xff0c;跟随可视化互动平台的数据可视化大屏一起来了解吧&#xff01; 我国各省人口数量从地图分布图看&#xff0c;广东省、山…

安装Pytorch

太难了 之前在学校就没安装好 各种报错 终于安装好了 浅浅记录一下 撒花撒花 菜鸡经验&#xff1a; 1.本地python 与 Anaconda 是两个独立的东西 2.可直接在Anaconda中创建不同新的虚拟环境以适配不同的需求 3.cuda 的版本与 NVIDIA版本需要一致&#xff0c;与Python环境也需要…

Echarts图表相关知识

一个基于 JavaScript 的开源可视化图表库。目前我们的前端框架中已经集成了Echarts库v5.3.2&#xff09;&#xff0c;使用的时候不需要再次安装&#xff0c;直接使用即可&#xff0c;具体安装方法不再赘述。 有些时候官网的例子不满足我们的需求&#xff0c;这个时候就要求我们…

cq:fast lookup argument

1. 引言 Ariel Gabizon等人2022年论文《cq: Cached quotients for fast lookups》。 lookup argument的核心思想为&#xff1a; 对于特定的quotient多项式&#xff0c;经某种预处理之后&#xff0c;将更易于计算其commitments。 当前的lookup argument系列方案主要有&#…

实拍视频、图片素材库,高质量、免费下载。

这几个网站的实拍素材&#xff0c;质量高&#xff0c;还可以免费下载。 1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx 菜鸟图库有超多设计类素材&#xff0c;像平面、UI、电商、办公类等等在这个网站都能找到&#xff0c;网站还有很多实拍视频素材&#xff0c;质量很高&a…

k8s集群部署01

k8s集群部署01Kubernetes简介Kubernetes部署节点部署关于yum缓存提示满了&#xff0c;Rhel7换源解决报错解决过程配置文件内容—要自己看链接是否过期集群初始化Kubernetes-kubectl命令出现错误【The connection to the server localhost:8080 was refused - did you specify t…

git chrry pickup

git chrry pickup目录概述需求&#xff1a;设计思路实现思路分析1.java2.转移分支3.git merge4.cherry pick.切换到 master 分支Cherry pick 操作参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;…

基于MVC的在线影票售卖系统/基于ASP.NET的电影院售票系统

摘 要 随着电影院规模的不断扩大&#xff0c;人流数量的急剧增加&#xff0c;有关电影院的各种信息量也在不断成倍增长。面对庞大的信息量&#xff0c;就需要有在线影票售卖系统来提高电影院工作的效率。通过这样的系统&#xff0c;我们可以做到信息的规范管理和快速查询&…

副业项目分享,旧衣回收项目怎么做

大家好&#xff0c;我是蝶衣王的小编&#xff0c;今天分享一个简单的项目 我们每个家庭都有多余的旧衣服。许多人会直接把它们扔进垃圾桶。然而&#xff0c;这里隐藏着巨大的商机。说到这里&#xff0c;每个人都应该想到&#xff1a;旧衣服的回收。 事实上&#xff0c;目前国…

《位图布隆过滤器》

【一】位图的概念 位图&#xff0c;就是用每一个比特位来存放某种状态&#xff0c;适用于海量数据&#xff0c;整数&#xff0c;数据无重复的场景&#xff0c;通常是用来判断某个数据存不存在的。例如&#xff1a;10个整数本应该存放四十个字节&#xff0c;此时用位图只需要十…

Ajax(JavaWebAjax、源生Ajax、跨域)

1.JavaWeb - Ajax 概念&#xff1a;AJAX&#xff08;Asynchronous Java JavaScript And Xml &#xff09;&#xff1a;异步的JavaScript和Xml AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据。 使用…

2022-12-28-面试题整理

1. Spring中Bean创建完成后执行指定代码的几种实现方式 实现ApplicationListener接口 实现ApplicationListener接口并实现方法onApplicationEvent()方法&#xff0c;Bean在创建完成后会执行onApplicationEvent()方法 Component public class DoByApplicationListener impleme…