GAN笔记_李弘毅教程(六)WGAN、EBGAN

2023-12-23 21:32

本文主要是介绍GAN笔记_李弘毅教程(六)WGAN、EBGAN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Wasserstein GAN(WGAN)
  • Improved WGAN(WGAN GP)
  • Energy-based GAN(EBGAN)
  • Loss-sensitive GAN(LSGAN)


在大多数情况下, P G {P_G} PG P d a t a {P_{data}} Pdata训练到最后是不会重叠的。因为有两点。
1.data本质: P G {P_G} PG P d a t a {P_{data}} Pdata是高维空间中的低维合成,这个重叠几乎是可以忽略的。(开始训练时)
2.从Sample角度来说,Sample两个部分,这两个部分交叠的部分也比较少。

P G {P_G} PG P d a t a {P_{data}} Pdata没有重叠的时候,用JS散度看它们之间的差异会在train的过程造成很大的障碍。
完全不重叠时,JS divergence=log2,下图最后一张图表示完全重叠。
下图表示,一开始不重叠时,JS divergence=log2,虽然第二张图距离近些,但仍是JS divergence=log2,而且第一张图因为JS divergence等于常数就无法迭代到第二张图。更无法迭代到第三张图。
当两者没有重叠时,二维分类器就可以完全辨别出这两者,最后的出来的目标函数值也会是相同的。

当很平的时候,就迭代不了了。(有点像梯度消失)
解决方法:LSGAN就是把sigmod换成linear。
positive值越接近1越好,negtive值越接近0越好。

Wasserstein GAN(WGAN)

把P这抔土移到Q的平均距离,如果P到Q的distance恒为d,那么Earth Mover’s Distance为1。

但当不恒定的时候,要使两者分布相同,可以有不同的方法。但哪一种才是所需要的?
穷举出每个方法所需要的距离,最小的即为最优。


更正规的表达方式如下图
每一个方块表示要把对应的P拿多少移到对应的Q,越亮表示移动越多。
(为什么一行或一排合起来就是高度?)
γ ( x p , x q ) \gamma ({x_p},{x_q}) γ(xp,xq)表示要从 x p {x_p} xp拿多少 x q {x_q} xq ∣ ∣ x p − x q ∣ ∣ ||{x_p} - {x_q}|| xpxq表示两者间距离
穷举 γ \gamma γ,看哪个 γ \gamma γ W ( P , Q ) W(P,Q) W(P,Q)最小,这个最小的距离 W ( P , Q ) W(P,Q) W(P,Q)即为the best plan

右上角是眼睛的进化过程。下图可以把JS散度过程转为WGAN过程,因此可以迭代成功。

如何设计D,就可用WGAN?
Lipshitz表示D是很平滑的意思。
如果只是一味的让real越来越大,generated越来越小。系统会崩溃。因此需要设置额外的限制。
这个限制就是D必须是平滑的。

Lipshitz函数的定义如下图
output差距不能比input差距大
k=1时,即为1-Lipshitz。
绿色的线是1-Lipshitz。

怎么解?
最原始的方法就是Weight Clipping
设置最大最小值

但是WGAN只是单纯的smooth,因此衍生出一个Improved WGAN(WGAN GP)

Improved WGAN(WGAN GP)

加一个修正项,但无法check无论是哪一个x都满足小于等于1这个条件,所以把x从概率分布为 P p e n a l t y {P_{penalty}} Ppenalty的x中sample出来的。其他范围内的管不了

P p e n a l t y {P_{penalty}} Ppenalty就是下图中蓝色的从 P d a t a {P_{data}} Pdata P G {P_{G}} PG的距离范围。
实验证明这样做ok。
理论上也是因为要从 P G {P_{G}} PG搬到 P d a t a {P_{data}} Pdata,所以中间的蓝色区域才影响结果,其他地方的无所谓。

实际上, ∣ ∣ ∇ x D ( x ) ∣ ∣ ||{\nabla _x}D(x)|| xD(x)越接近1越好,无论大于1还是小于1,都要有惩罚。

Improved WGAN(WGAN GP)也存在一些问题
有人提出要把 P p e n a l t y {P_{penalty}} Ppenalty放到 P d a t a {P_{data}} Pdata里。

也可以用Spectrum Norm(频谱范数?)
能让每一个梯度范数都小于1

以下是原始GAN的算法

而WGAN改变的地方如下
去掉sigmoid,让输出是linear的。
加上Weight clipping,来使结果收敛。

Energy-based GAN(EBGAN)

BEGAN是它的变形。
改了D的架构,本来D是二维分类器架构,但EBGAN将其变为一个autoencoder;G不变。
D输出的也是scalar,scalar是从autoencoder出来的。
好处就是这个autoencoder可以在没有G的情况下用真实值就被预训练。
用原来的方法,刚开始D不会很厉害的。用EBGAN一开始就可以产生比较厉害的D。

建设是难得,破坏是容易的。
D中negative样本对应的值小于一个值就行

Loss-sensitive GAN(LSGAN)

当已经有相对比较逼真的图片时,那就不要把它压得很低,放到上面点的位置。

这篇关于GAN笔记_李弘毅教程(六)WGAN、EBGAN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实