GAN系列基础知识

news2024/11/15 10:47:39

原始值函数

原始GAN的值函数是
m i n G m a x D V ( D , G ) = E x ∼ p d a t a ( x ) [ l o g D ( x ) ] + E z ∼ p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] min_Gmax_DV(D,G) = E_{x \sim p_{data}(x)}[logD(x)]+E_{z \sim p_{z}(z)} [log(1-D(G(z)))] minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]
其中 E x ∼ p d a t a ( x ) E_{x \sim p_{data}(x)} Expdata(x)表示从真实样本采样, E z ∼ p z ( z ) E_{z \sim p_{z}(z)} Ezpz(z)表示从噪声样本中采样
进一步将V(D,G)写成积分格式就是
V ( G , D ) = ∫ x p d a t a ( x ) l o g ( D ( x ) ) d x + ∫ z p z ( z ) l o g ( 1 − D ( g ( z ) ) ) d z V ( G , D ) = ∫ x p d a t a ( x ) l o g ( D ( x ) ) d x + p g ( x ) l o g ( 1 − D ( x ) ) d x V (G, D) = \int_xp_{data}(x) log(D(x))dx + \int_zp_z(z) log(1 − D(g(z)))dz \\ V (G, D) = \int_xp_{data}(x) log(D(x))dx + p_g(x) log(1 − D(x))dx V(G,D)=xpdata(x)log(D(x))dx+zpz(z)log(1D(g(z)))dzV(G,D)=xpdata(x)log(D(x))dx+pg(x)log(1D(x))dx
For any (a, b) ∈ R2, the function y → a log(y) + b log(1 − y) achieves its maximum at a/(a+b).

优化饱和

**在实际训练中,早期G很差,G生成的样本很容易被D识别,使得D回传给G的梯度极小,达不到训练目标,这种现象叫做优化饱和。**进一步解释一下优化饱和的原因,将D的sigmoid输出层的前一层记为o,那么D(x)=Sigmoid(o(x)),那么
∇ D ( x ) = ∇ S i g m o i d ( o ( x ) ) = D ( x ) ( 1 − D ( x ) ) ∇ o ( x ) \nabla D(x)=\nabla Sigmoid(o(x))=D(x)(1-D(x))\nabla o(x) D(x)=Sigmoid(o(x))=D(x)(1D(x))o(x)
所以训练G时候的梯度里包含的D(G(x))就趋近于0
解决方案是把 l o g ( 1 − D ( G ( z ) ) ) log(1-D(G(z))) log(1D(G(z)))改成 l o g ( D ( G ( z ) ) ) log(D(G(z))) log(D(G(z))), m i n G min_G minG变成了 m a x G max_G maxG

WGAN-GP

普通的GAN可以看做是优化JS距离,但是只用JS距离会进入坍缩模式(拿图片举例,反复生成一些相近或相同的图片,多样性太差。生成器似乎将图片记下,没有泛化,更没有造新图的能力,好比一个笨小孩被填鸭灌输了知识,只会死记硬背,没有真正理解,不会活学活用,更无创新能力)。猜测问题根源和JS距离维度低有关系,因此引入了Wasserstein距离(也叫推土机距离,Earth Mover distance)

为什么Wasserstein距离能克服JS距离解决不了的问题?理论上的解释很复杂,需要证明当生成器分布随参数θ变化而连续变化时,生成器分布与真实分布的Wasserstein距离也随θ变化而连续变化,并且几乎处处可导,而JS距离不保证随θ变化而连续变化
推土机距离实际中非常难求,但是有个Wasserstein距离对偶式比较好求解:
m i n G m a x ∣ ∣ f ∣ ∣ L < = 1 E ( f ( x ) ) − E ( f ( x ~ ) ) min_Gmax_{||f||_L<=1}E(f(x))-E(f( \widetilde{x})) minGmax∣∣fL<=1E(f(x))E(f(x ))
其中 ∣ ∣ f ∣ ∣ L < = 1 ||f||_L<=1 ∣∣fL<=1是1-Lipschitz函数(对于函数f(x),若其任意定义域中的x1,x2,都存在L>0,使得|f(x1)-f(x2)|≤L|x1-x2|。 大白话就是:存在一个实数L,使得对于函数f(x)上的每对点,连接它们的线的斜率的绝对值不大于这个实数L。)。其实x是real, x ~ \widetilde{x} x 是生成,上面这个其实就是把原始GAN值函数的Log也去掉。

实际中发现The interaction between the weight constraint and the loss function makes training of WGAN difficult and leads to exploding or vanishing gradients.解决方案直接把1-Lipschitz的约束变成了Gradient Penalty(The idea of Gradient Penalty is to enforce a constraint such that the gradients of the critic’s output w.r.t the inputs to have unit norm)。因此最终的目标函数变成了
在这里插入图片描述
判别器也换了一个名字叫做Critic评分器
在这里插入图片描述

Spectral Normalization

为了让判别器函数满足 1-Lipschitz continuity,W-GAN 和之后的 W-GAN GP 分别采用了 weight-clipping 和 gradient penalty 来约束判别器参数。这里的谱归一化,则是另一种让函数满足 1-Lipschitz continuity 的方式。谱归一化会对每一层的权重做奇异值分解,并对奇异值做归一化以将其限制在1以内

IPM(Integral Probability Metrics)-GAN

IPM-GAN基于积分概率度量两个分布的距离,WGAN是一种典型的IPM-GAN,另外一种典型的IPM-GAN叫做McGAN(Mean and Covariance Feature Matching GAN)。它从最小化IPM的角度将分布之间距离的度量定义为有限维度特征空间的分布匹配。

首先,分类超平面搜索;然后,判别器向远离超平面的方向更新;最后,生成器向超平面的方向更新。实际上,这种几何解释同样可以应用在其他GAN上,包括f-GAN、WGAN等。各种GAN之间的主要区别就在于分类超平面的构建方法以及特征向量的几何尺度缩放因子的选择

DC-GAN

DCGAN全称Deep Convolutional GAN,发表于ICLR2016。DCGAN的主要贡献反卷积操作又称为“分数步长卷积”(fractional-strided convolution)或“转置卷积”(transposed convolution),可以视为一种与正常卷积“相反”的操作,这里不是指反卷积是卷积的逆变换,而是使用一种类似卷积的方法实现了上采样

ALI(Adversarially learned inference)

Adversarially Learned Inference(简称ALI)与Adversarial feature learning(简称BiGAN)类似,GAN中的生成器实现了从Latent向量空间z到图像空间x的转换,ALI和BiGAN模型则添加了图像空间x到Latent向量空间z的转换。判别器不仅需要学习区分生成的样本和真实的样本,还需要区分两个不同的数据和潜在变量联合分布。

IRGAN

给定q,生成模型会在整个文档集中按照概率分布 p θ ( d ∣ q ) p_\theta(d|q) pθ(dq)挑选出文档dθ,它的目标是逼近真实数据的概率分布ptrue(d|q),进而迷惑判别器;同时,判别模型试图将生成器伪造的(q,dθ)从真实的(q,dtrue)中区分出来。原本的判别模型是用来鉴别与Query相关或不相关的文档,而在GAN框架下判别模型的目标发生了微妙变化,区分的是来自真实数据的相关文档和模拟产生的潜在相关文档。当然,最终的判别模型仍可鉴别与Query相关或不相关的文档。我们用一个MiniMax目标函数来统一生成模型和判别模型。最终利用强化学习中策略梯度求期望和重参数技巧显式地表达 p θ ( d ∣ q ) p_\theta(d|q) pθ(dq)

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

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

相关文章

尚医通(十二)SpringCloud相关概念介绍 | 搭建Nacos服务

目录一、什么是微服务1、微服务的由来2、为什么需要微服务3、微服务与单体架构区别4、微服务本质5、什么样的项目适合微服务6、微服务开发框架7、什么是Spring Cloud8、Spring Cloud和Spring Boot是什么关系9、Spring Cloud相关基础服务组件10、Spring Cloud的版本二、Nacos1、…

XXL-JOB 极简入门

文章目录1 概述2 特性3 架构设计3.1设计思想3.2 系统组成3.3架构图3.4 高可用3.4.1 调度中心的高可用3.4.2 执行器的高可用4 搭建调度中心4.1 克隆源码4.2 初始化 XXL-JOB 表结构修改配置文件4.4 修改日志配置文件4.5 IDEA 启动调度中心4.6 编译源码4.7 命令行启动调度中心4.8 …

D32 Vue2 + Vue3 K124-K143

D32.Vue F21.创建vue3项目&#xff08;K124-K129&#xff09; 该笔记是从vue2过渡到vue3的&#xff0c;所以不会特别详细的介绍某些vue2学过的&#xff0c;主要介绍vue3新增的 1.Vue3快速上手 A. Vue3简介 1&#xff09;2020年9月18日&#xff0c;Vue.js发布3.0版本&…

高性能(一)

思维导图 一、负载均衡 1.概念 将用户请求分摊到不同服务器上处理&#xff0c;以提高系统整体的并发处理能力及可靠性。 如图&#xff1a;我们用到负载均衡&#xff0c;实现访问商品服务的请求的分流。 负载均衡是一种常用且简单的提高系统并发和可靠性的手段&#xff0c;单…

MySQL入门篇-MySQL 二进制日志binlog介绍

MySQl binlog介绍 binlog的作用 逻辑日志,记录的是数据库内部的所有变动&#xff08;sql语句 行的改变&#xff09; server层日志&#xff0c;binlog不仅仅记录innodb的变动&#xff0c;也记录myisam存储引擎的变动。 innodb redo 是存储引擎层&#xff0c;和binlog不是一层&…

spark02-内存数据分区切分原理

代码&#xff1a;val conf: SparkConf new SparkConf().setMaster("local[*]").setAppName("wordcount") val scnew SparkContext(conf) //[1] [2,3] [4,5] val rdd: RDD[Int] sc.makeRDD(List(1,2,3,4,5),3) //将处理的数据保存分区文件 rdd.saveAsText…

【PTA Advanced】1152 Google Recruitment(C++)

目录 题目 Input Specification: Output Specification: Sample Input 1: Sample Output 1: Sample Input 2: Sample Output 2: 思路 代码 题目 In July 2004, Google posted on a giant billboard along Highway 101 in Silicon Valley (shown in the picture below)…

清除 git 所有历史提交记录,使其为新库

清除 git 所有历史提交记录&#xff0c;使其为新库需求方案需求 基于以前的仓库重新开发&#xff0c;这样可保留以前的配置等文件&#xff0c;但是需要删除全部的历史记录、tag、分支等。 方案 创建新的分支 使用 --orphan 选项&#xff0c;可创建1个干净的分支&#xff08;无…

设置测试用例的具体方法

文章目录一、等价类分区/分块的概念等价类的划分二、边界值三、因果图(判定表)四、场景设计法五、错误猜测法总结一、等价类 用户的密码为6~18位,测试的时候使用到的测试数据是什么? 穷举法,6,7,8,9,10…18全部都测试一边,可以 但是将范围改成6~1000位,穷举法就不可取了 分区/…

从零实现高并发WebRTC服务器(五):ICE协议

文章目录零、ICE具体做些什么一、ICE协议是什么二、ICE Candidate2.1 ICE CANDIDATE TYPE2.2 收集candidate零、ICE具体做些什么 收集candidate对不同type的所有candidate pair进行排序&#xff0c;比如优先使用同一内网的host candidate连通性检查 一、ICE协议是什么 ICE,i…

线性杂双功能PEG试剂OPSS-PEG-Acid,OPSS-PEG-COOH,巯基吡啶聚乙二醇羧基

英文名称&#xff1a;OPSS-PEG-COOH&#xff0c;OPSS-PEG-Acid 中文名称&#xff1a;巯基吡啶-聚乙二醇-羧基 OPSS-PEG-COOH是一种具有OPSS和羧基的线性杂双功能PEG试剂。它是一种有用的带有PEG间隔基的交联剂。OPSS代表正吡啶基二硫化物或邻吡啶基二硫代&#xff0c;与硫醇、…

Java 修饰符和运算符,超详细整理,适合新手入门

目录 一、访问控制修饰符 1、访问权限 二、运算符 1、算术运算符 2、关系运算符 3、逻辑运算符 4、赋值运算符 5、三元运算符 一、访问控制修饰符 Java 支持 4 种不同的访问权限&#xff1a; private 私有的 protected 受保护的 public 公共的 default 默认 1、…

程序员必备小众又实用的网站,你知道几个?

程序员是世人眼中的高薪职业&#xff0c;虽然亚历山大&#xff0c;但是年收入非常可观。 职场上的程序员有很多所谓的标签&#xff0c; 比如&#xff1a;秃头&#xff0c;找不到女朋友&#xff0c;和产品经理的斗智斗勇等等.... 可以说&#xff0c;一个程序员的必备素养就是…

【C++11智能指针】unique_ptr

【C11智能指针】unique_ptr 概述 一个 unique_ptr “拥有”它所指向的对象。 与 shared_ptr 不同&#xff0c;某个时刻只能有一个 unique_ptr 指向一个给定对象。 当 unique_ptr 被销毁时&#xff0c;它所指向的对象也被销毁。 初始化 直接初始化 unique_ptr<int> p…

AcWing 166. 数独(DFS + 剪枝优化 + lowbit函数 + 状态压缩)

AcWing 166. 数独&#xff08;DFS 剪枝优化 lowbit函数 状态压缩&#xff09;一、题目二、分析1、状态压缩2、lowbit函数&#xff08;1&#xff09;函数作用&#xff08;2&#xff09;函数实现3、DFS思路4、剪枝优化三、代码一、题目 二、分析 1、状态压缩 那么如果针对某一…

情人节专场即将到来,各大平台各显神通

一年一度的情人节即将到来&#xff0c;情人节除了有情侣、恋人之间表达爱意或者追求浪漫之外&#xff0c;也有很多人想要购买一些特殊的礼物送给自己的爱人或者亲人。对于跨境电商而言&#xff0c;这个时段往往能更好的将品牌与社交媒体上的目标客户建立起联系&#xff0c;同时…

【青训营】分布式定时任务简述

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天 分布式定时任务简述 定义 定时任务是指系统为了自动完成特定任务&#xff0c;实时、延时、周期性完成任务调度的过程。分布式定时任务是把分散的、可靠性差的定时任务纳入统一平台&#xff0c;并且实现集群管理调度和…

OpenCV-PyQT项目实战(6)项目案例02滚动条应用

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …

JumpServer开源堡垒机v3.0版本设计重点解读

编者注&#xff1a;在1月17日的JumpServer开源堡垒机v3.0预发布恳谈会直播中&#xff0c;JumpServer创始人广宏伟与大家分享了JumpServer v3.0版本的设计思路与功能亮点。在v3.0版本正式发布之前&#xff0c;JumpServer开源项目组基于此次直播内容为大家整理总结了JumpServer v…

C++11可变模板参数

C11可变模板参数一、简介二、语法三、可变模版参数函数3.1、递归函数方式展开参数包3.2、逗号表达式展开参数包一、简介 C11的新特性–可变模版参数&#xff08;variadic templates&#xff09;是C11新增的最强大的特性之一&#xff0c;它对参数进行了高度泛化&#xff0c;它能…