从VAE到Diffusion生成模型详解(2.1):普通GAN的改进及变种

news2024/11/23 11:46:36

文章目录

  • 1. JS散度的问题
  • 2. LSGAN(Least Square GAN)
    • LSGAN目标函数
  • 3. WGAN(wasserstein GAN)
    • WGAN的目标函数
  • 4. 条件GAN
    • cGAN
    • SGAN
    • ACGAN
    • InfoGAN
    • text2image
    • image2image
  • 参考

1. JS散度的问题

上一篇博客从VAE到Diffusion生成模型详解(2):生成对抗网络GAN中提到普通GAN判别器部分实际上就是求 P G P_G PG P d a t a P_{data} Pdata两个分布的JS散度。但是JS散度最大的缺陷就是,当两个分布不重合时,JS散度就是一个常量 l o g 2 log2 log2,具体推理可查看理解JS散度(Jensen–Shannon divergence),这在学习算法中是比较致命的,这就意味这这一点的梯度为 0,梯度消失了。

2. LSGAN(Least Square GAN)

LSGAN使用回归的方法代替了原先判别器分类的方法,原先分类的时候JS散度输出是一个常量,造成优化器不知道往什么方向优化,LSGAN使用回归的方式计算生成样本与0的距离,真实样本与1的距离,随着迭代优化的进行,使得距离越来越小。具体改进点如下:

  • 网络结构上:最后一层换为linear层,去掉sigmoid
  • 损失函数上:用L1或L2距离代替原先的交叉熵
    在这里插入图片描述

LSGAN目标函数

普通GAN的目标函数如下:

min ⁡ θ g max ⁡ θ d [ E x ∼ p d a t a log ⁡ D θ d ( x ) + E z ∼ p ( z ) log ⁡ ( 1 − D θ d ( G θ g ( z ) ) ) ] \operatorname*{min}_{\theta_{g}}\operatorname*{max}_{\theta_{d}}\left[E_{x\sim p_{d a t a}}\log D_{\theta_{d}}(x)+E_{z\sim p(z)}\log(1-D_{\theta_{d}}(G_{\theta_{g}}(z)))\right] θgminθdmax[ExpdatalogDθd(x)+Ezp(z)log(1Dθd(Gθg(z)))]

LSGAN的目标函数如下

min ⁡ D V L S G A N ( D ) = 1 2 E x ∼ p data  ( x ) [ ( D ( x ) − b ) 2 ] + 1 2 E z ∼ p z ( z ) [ ( D ( G ( z ) ) − a ) 2 ] min ⁡ G V L S G A N ( G ) = 1 2 E z ∼ p z ( z ) [ ( D ( G ( z ) ) − c ) 2 ] \begin{aligned} \min _D V_{\mathrm{LSGAN}}(D) & =\frac{1}{2} \mathbb{E}_{\boldsymbol{x} \sim p_{\text {data }}(\boldsymbol{x})}\left[(D(\boldsymbol{x})-b)^2\right]+\frac{1}{2} \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}\left[(D(G(\boldsymbol{z}))-a)^2\right] \\ \min _G V_{\mathrm{LSGAN}}(G) & =\frac{1}{2} \mathbb{E}_{\boldsymbol{z} \sim p_{\boldsymbol{z}}(\boldsymbol{z})}\left[(D(G(\boldsymbol{z}))-c)^2\right] \end{aligned} DminVLSGAN(D)GminVLSGAN(G)=21Expdata (x)[(D(x)b)2]+21Ezpz(z)[(D(G(z))a)2]=21Ezpz(z)[(D(G(z))c)2]

一般来说 a = − 1 , b = 1 , c = 1 a=-1, b=1, c=1 a=1,b=1,c=1

下面展示了LSGAN的数学推导,可见优化普通GAN最后等价优化JS散度,而优化LSGAN最后实际等价优化的是卡方距离,卡方距离相关知识可参考机器学习中的数学——距离定义(十八):卡方距离(Chi-square Measure)
在这里插入图片描述

3. WGAN(wasserstein GAN)

WGAN和LSGAN一样,也是针对JS散度在两个分布差别较大时输出为常量的问题,如下图所示,只要 P G P_G PG P d a t a P_{data} Pdata补充叠,无论两者距离多远,JS散度输出都是常量log2
在这里插入图片描述
WGAN使用“推土机距离”代替了普通GAN中的JS散度,所谓推土机距离如下图所示,会先进行分块,然后将相应的快推导合适的地方,详情可参考EMD(earth mover’s distances)距离
在这里插入图片描述
对一个方案 γ \gamma γ,则在 γ \gamma γ方案下的距离为

B ( γ ) = ∑ x p , x q γ ( x p , x q ) ∣ ∣ x p − x q ∣ ∣ B(\gamma)=\sum_{x_{p},x_{q}}\gamma(x_{p},x_{q})\vert\vert x_{p}-x_{q}\vert\vert B(γ)=xp,xqγ(xp,xq)∣∣xpxq∣∣
其中 γ ( x p , x q ) \gamma(x_p, x_q) γ(xp,xq)代表需要转运的土的量,即上图中的块, ∣ ∣ x p − x q ∣ ∣ ||x_p-x_q|| ∣∣xpxq∣∣表示转移的距离。那么最终结果的距离为:

W ( P , Q ) = min ⁡ γ ∈ Π B ( γ ) W(P, Q)=\min _{\gamma \in \Pi}B(\gamma) W(P,Q)=γΠminB(γ)

即选择距离最小的方案作为最终距离

WGAN的目标函数

普通GAN的判别器目标函数如下
V ( G , D ) = E x ∼ P d a t a [ l o g D ( x ) ] + E x ∼ P G [ l o g ( 1 − D ( x ) ] V(G, D)=E_{x \sim P_{data}}[log D(x)]+E_{x \sim P_G}[log(1-D(x)] V(G,D)=ExPdata[logD(x)]+ExPG[log(1D(x)]

而经过一系列的推导后WGAN描述P_{data}和P_G的距离为:

V ( G , D ) = 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 ) ] } V(G,D)=\operatorname*{max}_{D\in\mathbf{1-Lipschi t z}}\{E_{x\sim P_{d a t a}}[D(x)]-E_{x\sim P_{G}}[D(x)]\} V(G,D)=D1Lipschitzmax{ExPdata[D(x)]ExPG[D(x)]}

Lipchitz函数

∣ ∣ f ( x 1 ) − f ( x 2 ) ∣ ∣ ≤ K ∣ ∣ x 1 − x 2 ∣ ∣ ||f(x_1)-f(x_2)|| \le K||x_1-x_2|| ∣∣f(x1)f(x2)∣∣K∣∣x1x2∣∣

∣ ∣ f ( x 1 ) − f ( x 2 ) ∣ ∣ ∣ ∣ x 1 − x 2 ∣ ∣ ≤ K \frac{||f(x_1)-f(x_2)||}{||x_1-x_2||} \le K ∣∣x1x2∣∣∣∣f(x1)f(x2)∣∣K

K=1, 就是1-Lipchitz。注意上式中左半部分是求导公式,在1-Lipchitz可约束下就是要控制判别器的输出值不要变化的太快,即梯度不要大于1,防止在优化目标函数时出现真实数据预测为正无穷,生成样本被预测成负为负无穷这种情况而造成无法优化。

4. 条件GAN

普通GAN是给定一个噪声生成一张图片,现在我们需要对网络能够控制,比如给定一个类别让模型生成对应类别的图片。如给定一个猫的类别,加上噪声,让模型生成猫的图片

传统GAN的目标函数

min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ) ] + E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \operatorname*{min}_{G}\operatorname*{max}_{D}V(D,G)=\mathbb{E}_{x\sim p_{\mathrm{data}}(x)}{\big[}\log D(x){\big]}+\mathbb{E}_{z\sim p_{z}(z)}{\big[}\log(1-D(G(z))){\big]} GminDmaxV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]

条件GAN的目标函数

min ⁡ G max ⁡ D V ( D , G ) = E x ∼ p d a t a ( x ) [ log ⁡ D ( x ∣ y ) ] + E x ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ∣ y ) ) ) ] \operatorname*{min}_{G}\operatorname*{max}_{D}V(D,G)=\mathbb{E}_{x\sim p_{data}(x)}[\log D(x|y)]+\mathbb{E}_{x\sim p_{z}(z)}[\log(1-D(G(z|y)))] GminDmaxV(D,G)=Expdata(x)[logD(xy)]+Expz(z)[log(1D(G(zy)))]

条件GAN的实现有如下几种方式
在这里插入图片描述

cGAN

cGAN中生成器的输入有两部分:噪声 z z z和条件
判别器输入有三个:真实图片 x x x,生成图片 x ^ \hat x x^, 条件 c c c

在这里插入图片描述

SGAN

如下图所示,SGAN的主要区别在于判别器部分,判别器不仅要判断是否为真伪,还要对具体的类别进行分类
在这里插入图片描述

ACGAN

ACGAN 的结构如下图所示
在这里插入图片描述
其目标函数如下

L S = E [ log ⁡ P ( S =  real  ∣ X real  ) ] + E [ log ⁡ P ( S =  fake  ∣ X fake  ) ] L C = E [ log ⁡ P ( C = c ∣ X real  ) ] + E [ log ⁡ P ( C = c ∣ X fake  ) ] \begin{aligned} & \begin{aligned} L_S=E[\log P(S= & \text { real } \left.\left.\mid X_{\text {real }}\right)\right]+ E\left[\log P\left(S=\text { fake } \mid X_{\text {fake }}\right)\right] \end{aligned} \\ & L_C=E\left[\log P\left(C=c \mid X_{\text {real }}\right)\right]+ E\left[\log P\left(C=c \mid X_{\text {fake }}\right)\right] \end{aligned} LS=E[logP(S= real Xreal )]+E[logP(S= fake Xfake )]LC=E[logP(C=cXreal )]+E[logP(C=cXfake )]

L S L_S LS是用于区分真假样本, L C L_C LC用于针对具体类别进行分类

判别器训练时, 最大化 L C + L S L_C+L_S LC+LS,训练判别器是我们希望对真样本能被识别为真样本,针对生成的样本能被识别成假样本,因此是加上 L S L_S LS
生成器训练时,最大化 L C − L S L_C-L_S LCLS。训练生成器,我们希望生成的图像足够逼真,以至于判别器无法区分真假样本,即真样本被识别为假的,生成的样本被识别为真样本,因此是减去 L S L_S LS

InfoGAN

InfoGAN的结构如下图所示,InfoGAN中使用了隐变量 c c c,为了方便讲述隐变量的作用,我们假设当前隐变量是一个三维向量 c = [ c 1 , c 2 , c 3 ] c=[c_1, c_2, c_3] c=[c1,c2,c3],如(a)图所示,当我们改变 c 1 c_1 c1的值时,最后会生成不同的数字,如(c)图所示,当我们改变 c 2 c_2 c2的值时,生成图片的角度会发生改变,如(d)图所示,当我们改变 c 3 c_3 c3时,生成图片的字体大小会发生变化。即我们可控制变量,且变量的每一维度都有明确的意义。
在这里插入图片描述

text2image

文本到图像的生成,首先将文本用自然语言模型表征成向量,然后和噪声concat到一起作为新的噪声,输入到网络中进行生成。判别器不仅要判断图片的真假,还要判断图像与文字是否匹配。此外,还需要让模型学会插值, E t 1 , t 2 ∼ p d a t a [ l o g ( 1 − D ( G ( z ) , β t 1 + ( 1 − β ) t 2 ) ) ] E_{t_1, t_2 \sim p_{data}}[log(1-D(G(z), \beta t_1+(1-\beta)t_2))] Et1,t2pdata[log(1D(G(z),βt1+(1β)t2))],即 t 1 t_1 t1是一段文本的向量, t 2 t_2 t2是另一段文本的向量,我们期望 t 1 , t 2 t_1, t_2 t1,t2的组合包含两者的信息。
在这里插入图片描述
stack GAN
stack GAN结构如下图所示,先生成小图,然后将小图特征送入下一层网络再生成大一点的图,如此堆叠下去,和拉普拉斯GAN很像,step by step 的生成。
在这里插入图片描述

image2image

iGAN
如下图所示,iGAN主要是解决再原始图片上通过画笔修改即可生成对应的图片
在这里插入图片描述
iGAN主要操作图像的隐变量,即先将原始图片编码成向量 z z z,然后操作该向量。其目标函数如下:
z ∗ = arg ⁡ min ⁡ z ∈ Z { ∑ g ( L g ( G ( z ) , v g ) ⏟ data term  + λ s ⋅ ∥ z − z 0 ∥ 2 2 ⏟  manifold   smoothness  } . z^*=\underset{z \in \mathbb{Z}}{\arg \min }\{\underbrace{\sum_g\left(\mathcal{L}_g\left(G(z), v_g\right)\right.}_{\text {data term }}+\underbrace{\lambda_s \cdot\left\|z-z_0\right\|_2^2}_{\begin{array}{c} \text { manifold } \\ \text { smoothness } \end{array}}\} . z=zZargmin{data term  g(Lg(G(z),vg)+ manifold  smoothness  λszz022}.

损失函数第一项是约束用户引导图像 v g v_g vg和模型生成图片 G ( z ) G(z) G(z)的差异,其中 L g L_g Lg可以看作是像素差异函数,让其两者尽可能相似。第二项中 z 0 z_0 z0是最开始给定图片的隐变量,即我们当前的隐要求的隐变量不能和原始图片对应的隐变量相差太大。

Pix2Pix
如下图所示,Pix2Pix主要解决给定草图,生成真实图片的场景
在这里插入图片描述
其目标函数如下所示,与普通GAN相比,pix2pix最大不同在于,判别器的输入有两个:草图和生成的图片。下式中 x x x是草图, y y y是真实图片, G ( x ) G(x) G(x)是根据草图生成的图片

min ⁡ G max ⁡ D E x , y [ log ⁡ D ( x , y ) + log ⁡ ( 1 − D ( x , G ( x ) ) ) ] \operatorname*{min}_{G}\operatorname*{max}_{D}\mathbb{E}_{x,y}{\big[}\log D(x,y)+\log(1-D{\big(}x,G(x){\big)}{\big)}{\big]} GminDmaxEx,y[logD(x,y)+log(1D(x,G(x)))]

CycleGAN
pix2pix训练需要如下图作伴部分的pair对,而实际中这种pair对比较少,而像右边的这种unpair的情况更多
在这里插入图片描述
主要流程如下
在这里插入图片描述

参考

理解JS散度(Jensen–Shannon divergence
从VAE到Diffusion生成模型详解(2):生成对抗网络GAN
计算机视觉与深度学习 北京邮电大学 鲁鹏
机器学习中的数学——距离定义(十八):卡方距离(Chi-square Measure)
EMD(earth mover’s distances)距离

了解更多AI算法,关注微信公众号 funNLPer

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

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

相关文章

Node+MySQL+Vue2.0+elementUI实现的博客管理系统(一)

前端部分: Vue项目的入口文件main.js: //引入Vue import Vue from vue //引入App import App from ./App.vue //引入VueRouter import VueRouter from vue-router import router from ./router/index import Vuex from vuex import store from ./store //完整引入…

数学专题训练2 组合计数

1. 硬币购物 4 种面值的硬币,第 i 种的面值是 C i C_i Ci​​。 n n n​ 次询问,每次询问给出每种硬币的数量 D i D_i Di​​ 和一个价格 S S S​,问付款方式。 n ≤ 1 0 3 , S ≤ 1 0 5 n\leq 10^3,S\leq 10^5 n≤103,S≤105​. 如果用…

第一百零九天学习记录:C++实战:职工管理系统(黑马教学视频)

1、管理系统需求 代码进入一个 while 循环,不断从文件流 ifs 中读取数据。循环的条件是 ifs 从文件中读取 id、name 和 dId 三个值的操作都成功。如果读取成功,循环内部的代码块会执行一次, num 的值加一。 这段代码的作用是从文件中逐行读取…

ENSP路由器的基本命令操作(第十六课)

ENSP路由器的基本命令操作(第十六课) 1-1 代码重点回顾 1 ipconfig 查看 pc机的IP地址2 ping 连接的IP地址3 system-view 进入系统视图4 [Huawei]interface GigabitEthernet 0/0/1 进入接口视图 过0/0/15 quit 返回上一层视图6 ctrlZ 快速返回用户视图7 [sy]sysna…

【V8】【2. 内联函数、Slot】

什么是内联函数 在 V8 执行函数的过程中,会观察函数中一些调用点 (CallSite) 上的关键的中间数据,然后将这些数据缓存起来,当下次再次执行该函数的时候,V8 就可以直接利用这些中间数据,节省了再次获取这些数据的过程&…

PS图层混合模式超详细解答-图层混合模式的原理(Part2)

对比度组 叠加Overlay 此模式是正片叠底和滤色的组合,组合依据是底图的中性灰平面,如果在 [ 0 , 128 ] [0,128] [0,128]则使用正片叠底,若是在 ( 128 , 255 ] (128,255] (128,255]之间,则是实用滤色。 公式 r O v e r L a y (…

专项练习29

目录 一、选择题 1、如果修改obj里面的name属性时会发生什么? 2、以下代码执行后,a.x 和 b.x 的结果分别为() 3、在ECMAScript6 中,Promise的状态有() 4、下面哪些方式在同一个窗口下能够检测一个js对象是…

解决:eclipse无法查看源代码

eclipse的jdk没有配置对应的src,需要手动去添加jdk的源代码附件。 步骤如下: 1、找到以下路径:windows(窗口)–>Preferences(首选项)–>Java–>Installed JRES(已安装的JRE),出现如下图所示的图片后,选中点…

15 - 信号处理设计模式

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中)Linux系统编程训练营 - 目录 文章目录 1. Linux应用程序安全性讨论1.1 问题1.2 不同场景1.2.1 场景一:不需要处理信号1.2.2 场景二:需要处理信号 2. 场景…

SQLmap使用指南(包含使用SQLmap获取shell)

文章标题 一:SQLmap基础知识二:SQLmap各大模块中的常用命令(一) 基础命令(二) target模块(三) Emuneration模块(四)其他命令 三:SQLmap应用示例&a…

数据结构_进阶(2):二叉树的OJ练习题

目录 1. 二叉树创建字符串。OJ链接 2. 二叉树的分层遍历1。OJ链接 3. 二叉树的分层遍历2。OJ链接 4. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 。OJ链接 5. 二叉树搜索树转换成排序双向链表。OJ链接 6. 根据一棵树的前序遍历与中序遍历构造二叉树。 OJ链接…

2023年NOC决赛-加码未来编程赛项决赛模拟题-Python模拟题--卷4

第一题、计算 1+2+3+⋯+(n−1)+n 的值,其中正整数 n 不大于 100。由于你没有高斯聪明,所以你不被允许使用等差数列求和公式直接求出答案。 输入格式 输入一个正整数 n。 输出格式 输出一个正整数,表示最后求和的答案。 输入输出样例 输入 #1 100 输出 #1 5050 第二…

手撕自定义类型:结构体,枚举,联合——【C语言】

在开始学习之前我们先来欣赏一下五岳之一华山的风景,来营造一个好心情,只有一个好心情我们才能更好的学习 目录 结构体 1 结构体的声明 1.1 结构的基础知识 1.2 结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 …

Go语言之重要数组类型切片(slice)make,append函数

切片是一个动态数组,因为数组的长度是固定的,所以操作起来很不方便,比如一个names数组,我想增加一个学生姓名都没有办法,十分不灵活。所以在开发中数组并不常用,切片类型才是大量使用的。 切片基本操作 切片…

Linux系统文件编程及文件读、写操作

Linux 系统编程Day01 文章目录 Linux 系统编程Day011.文件编程概述1.1 文件的打开及创建1.1.1 参数说明1.1.2 文件写入操作示例1.1.3 文件的权限 2.文件操作2.1 写入文件2.2 文件读取操作2.3 文件的光标移动操作 3.文件操作原理简述3.1文件描述符3.2 Linux文件操作流程 1.文件编…

【数据结构】二叉树的前中后序遍历(C语言)

文章目录 什么是二叉树树相关的概念树的表示形式特殊的二叉树如何创造出一棵二叉树二叉树的遍历先序遍历(前序遍历)中序遍历后序遍历 总结 什么是二叉树 [二叉树] 顾名思义就是有两个分支节点的树,不仅如此,除了叶子外的所有节点都具有两个分支节点&…

单个电源模块给多个负载使用,并且电源后还经过了磁珠-二级电源直流压降仿真

单个电源模块给多个负载使用,并且电源后还经过了磁珠-二级电源直流压降仿真 下面介绍单个电源模块给多个负载使用,并且电源后还经过了磁珠-二级电源直流压降仿真,常见于二级压降仿真,以下图为例

备战秋招 | 笔试强训5

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、在上下文和头文件均正常情况下,以下程序的输出结果是() int x 1; do {printf("%2d\n",x); }while(x--); A. 1 B. 无任何输出 C. 2 D. 陷入死循环 …

三种智能算法优化PID参数软件,MATLABAPP开发

今天的主题是:三种智能算法优化常见传递函数的PID参数,采用MATLAB APP Designer 开发。提供代码源程序,可以自行修改源代码(不是封装软件) 这个软件基本涵盖了所有的传递函数类型,传递函数的参数简单易改。…

【Java反射机制详解】—— 每天一点小知识

💧 J a v a 反射机制详解 \color{#FF1493}{Java反射机制详解} Java反射机制详解💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客🎐 🐳 《数据结构与算法》专栏的文章…