从GAN到WGAN及WGAN-GP

2023-11-10

20200910 -

0. 引言

最近看了PassGAN的代码,他是使用了WGAN-GP的代码作为GAN的框架,来进行密码生成,由此引出了对GAN的学习。在GAN的研究中,有一个方向就是研究如何使GAN更加稳定的训练。在此之中,WGAN和WGAN-GP算是比较好的解决方案。
为了弄明白这些东西,也是花费了很长时间,主要是因为这部分都是数学公式的内容,而我这种半吊子也不是搞数学的,也不是专门搞人工智能的,就顺着他们的思路弄明白是怎么回事就好了,对于数学原理还是看看就好了。

本篇文章主要是参考了几篇文章,然后结合PassGAN的代码部分来理解就好了。

1. 整体的学习脉络

正好这几天的学习过程中,也对GAN有了新的认识,或者说更深层次的认识。这里就记录一下,如果是把这部分内容给忘记了,怎么重新捡起来。

1.1 GAN基本原理

在该部分要明白,GAN的对抗过程是什么意思,明白两个网络的损失函数分别是怎么作用的。
这里可以参看之前的文章《GAN的编写 - tensorflow形式(tensorflow与GAN同学习,重点分析训练过程)》,写的不是很好,但是重点是思考的过程。

1.2 GAN的编写过程

编写过程分为两部分,一个是keras框架,一个是tensorflow框架。

后面就开始记录最近看的内容,其实,仔细阅读他们文章中使用的伪代码图片(论文中),是能大致明白主要的思路的。

1.3 WGAN的学习

WGAN是学习优化GAN训练过程的第一步,在这个学习过程中,并没有去参考原始论文,而是直接学习了文章中的说法,但是实际上如果想深入理解这部分内容,必然是应该通过阅读论文的方式来进行学习。其中主要参考了文章《From GAN to WGAN》[1],这篇文章的内容要我说,我是理解不了,虽然顺着思路能够明白是这么一个道理,但是在后面流式学习的部分,就已经不明白了。配合着另外一篇文章
GAN — Wasserstein GAN & WGAN-GP》[2],基本上算是理解了。然后结合《Wasserstein GAN implementation in TensorFlow and Pytorch》中的代码,可以同代码的角度来理解这部分内容。

1.4 WGAN-GP的学习

这部分还是参考了文章[2]的内容,同时结合学习了[4]的代码,算是简单明白了。但深层次的数学原理还是理解不了,没办法哦。好了,下面就开始学习具体的内容。

2. WGAN的学习

在学习WGAN之前,不管是[1],还是[2]都先说明了两个相似度度量公式:KL散度,JS散度;而WGAN正是将利用JS散度的GAN转化到了EM距离。这里还是要解释一下,我在文章[1]中的分析得出的结论是,GAN利用JS散度只是在判别器达到最优的时候是能够用JS来进行解释的,所以,是不是其他的地方也可以利用JS散度来解释,我不是很明白。(这部分是需要后续研究的过程)。
在原始的损失函数中,如果判别器达到了最优,其可以写成为下面的公式。
最优化D的损失函数
当然,最后的时候,如果是生成器也是最优的,那么损失函数就是-2log2。
原始GAN的主要问题,梯度消失的问题,此时对生成器的部分就很难训练,特别是当判别器的性能比较好的时候。所以为了更好的训练GAN,WGAN被提出来。
WGAN,以Wasserstein距离作为损失函数的GAN。文章[1-2]在讲解EM距离的距离的时候,都是通过一个离散的移动变量的方式来展示的,当然连续状态下也是可行的,最终的表现形式如下。
最终表现形式
该公式定义了两个概率曲线之间的最小值下界。而Wasserstein距离效果能够比JS或者KL散度效果好的原因,就是他能持续提供一个平滑的梯度曲线。后面来讲一下到底WGAN是怎么应用起来的。
上面这个公式需要遍历所有的频率分布来计算最小值,显然是不可行的,WGAN的论文作者提出了另外一种方案,通过Kantorovich-Rubinstein二元性进行转换:
在这里插入图片描述
这种方式定义了一个上限来作为距离函数,而上式中,需要满足在这里插入图片描述
即:
在这里插入图片描述
而此时原始的GAN中的判别器就换了一个身份,其不再是原始的进行分类的神经网络,而是为了学习上述f函数的一个神经网络,而改名为critic,其输出可以认为是生成图片的真实性大小。也就是说,critic变成了一个学习具备K -Lipschitz continuous性质的函数,所以损失函数就变成了Wasserstein距离。在训练过程中,为了保持K -Lipschitz continuous属性,在每次进行梯度更新后,都将权值w(critic的参数全定在了一个窗口内,例如[-0.01,0.01];同时为了更好的梯度更新,作者推荐使用RMSProp优化器。
在这里插入图片描述
下面来总结一下WGAN与原始GAN的不同:
1)在每次梯度更新权值时,将critic圈定在[-c,c]中
2)训练次数,多训练判别器几次,才训练生成器一次
3)使用新的损失函数,该损失函数没有了log,那么在critic输出部分,也就没有了sigmoid函数。
4)更换优化器为RMSProp
注:在一开始学习的过程中,一直没有注意到其将学习f的过程,变换为了critic的权值,也就导致了即使看了代码也不是很明白。现在大致知道了他的具体思路,所以再看[3]代码的时候,就更容易明白了。例如[3]中的代码,关于权值的部分:

# theta_D is list of D's params
clip_D = [p.assign(tf.clip_by_value(p, -0.01, 0.01)) for p in theta_D]

(上述代码在WGAN-GP中是另一种表现形式)
关于这部分,基本上算是顺着该部分思路走了下来,明白了代码各个部分都是干什么,但具体的数学原理不清楚,这个也没有办法。

3. WGAN-GP的学习

对于WGAN-GP的学习就集中在文章[2]上,这部分具体的内容就不展开了,最大的变化就是在损失函数上增加了一个惩罚项,这部分我在代码中也能看到相应的改变。
在这里插入图片描述
当时对着伪代码学习算法的时候,发现了一个不对的地方,实际代码[4]如下:

differences = fake_data - real_data
interpolates = real_data + (alpha*differences)

但代码好像是

differences = real_data - fake_data
interpolates = fake_data + (alpha*differences)

这个在[5]中有解答,这是因为两者都是一致的,因为都是随机产生的随机数。

4. 总结

关于GAN的学习就是这些,其中比较关键的是两个优化的内容,通过转换损失函数,使其具备平滑的梯度。但因为数学功底不好,特别是WGAN-GP的内容就更不用提了。但是还是建议,如果想深入理解,就把文章[1][2]好好读一读,即使没有办法彻底从数学上理解原理,也能够在代码上对应上关系。

参考

[1]From GAN to WGAN
[2]GAN — Wasserstein GAN & WGAN-GP
[3]Wasserstein GAN implementation in TensorFlow and Pytorch
[4]improved_wgan_training/gan_language.py
[5]Mismatch between code and paper in the gradient penalty algorithm #84

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从GAN到WGAN及WGAN-GP 的相关文章

随机推荐

  • C# 引用类型作为函数参数时

    C 引用类型作为函数参数时 在探讨本文的主题之前 先来介绍下C 中的值类型和引用类型 众所周知C 中有值类型和引用类型 值类型有基础数据类型 诸如int double bool等 结构体 枚举 引用类型有接口 类 委托 值类型全部在操作系统
  • sqli-labs--Less7

    目录 一 Less 7 1 按照之前文中的思路 输入 id 1 发现提示 2 提示我们使用outfile函数 接下来需要做的就是研究outfile 的用法 以及寻找注入点 3 执行写入的文件 发现执行成功 一 Less 7 1 按照之前文中
  • 3. Python3 运算符

    Hi 大家好 我是茶桁 前两节我们学习了基本的Python特性和语法 并且认识了一些基本的Python脚本 今天 我们来学习一下Python的运算符 而我们选择的版本为Python3 什么是运算符 为了能让我们的学习顺利进行下去 首先我们需
  • 【编程之路】常见的排序算法(一)

    常见的排序算法 一 本文将介绍五种基础的排序算法 分别是 冒泡 选择 插入 快速 归并 1 冒泡排序 冒泡排序应该是入门级的排序算法了 class solution def sort arr self arr n len arr for i
  • 聊聊最近几年的路径追踪技术的进展(一)

    路径追踪技术 Path tracing PT 已经是当下工业中离线渲染使用的主流技术 不管是商业渲染器如皮克斯的RenderMan Solid Angle的Arnold等 还是迪士尼的in house渲染器Hyperion以及Weta Di
  • 与finally单独使用的是try

    try一般和catch搭配使用 捕获时可以没有catch块 但是此时必须有finally块 换言之try可以和catch finally两个中的一个搭配使用 但是catch和finally不能单独搭配使用
  • 如何正视自己的劣势?面试!

    面试真的是最直接面对自己劣势的方式 平时身边人看不清或者不愿意指出你的劣势 自己如果又不肯正视 那就会逐渐的积累成大问题 印象最深刻的是某小公司的技术终面 做的跟我完全同领域 面试官与我对切模型然后我败下阵来 临走的时候他说 我们公司还是想
  • 域名备案后修改服务器,域名备案后修改服务器

    域名备案后修改服务器 内容精选 换一换 PHPWind 简称 PW 是一个基于PHP和MySQL的开源社区程序 是国内较受欢迎的论坛之一 轻架构 高效易开发 使用户可快速搭建并轻松管理 本文档指导用户使用华为云市场镜像 PHPWind 论坛
  • 推荐系统(一)

    协同过滤 Collaborative Filtering A基于邻域的算法 B隐语义模型 C基于图的随机游走算法 A 基于邻域的算法 一 基于用户的协同过滤算法 UserCF 给用户推荐与其兴趣相似的其他用户喜欢的物品 1 首先找到与目标用
  • 几种常见的神经网络了解

    神经网络技术起源 感知机 神经网络技术起源于上世纪五 六十年代 当时叫感知机 perceptron 拥有输入层 输出层和一个隐含层 输入的特征向量通过隐含层变换达到输出层 在输出层得到分类结果 早期感知机的推动者是Rosenblatt 当时
  • 【单片机毕业设计】【mcuclub-309】衣柜除湿消毒

    设计简介 项目名 基于单片机的智能衣柜除湿消毒控制系统设计 标准版 基于单片机的衣柜环境监测 控制系统设计 标准版 基于单片机的多功能衣柜控制系统设计 标准版 单片机 STC89C52 功能简介 1 通过DHT11检测衣柜内温湿度 当湿度大
  • 常用正则表达式以及校验

    1 邮箱验证 判断邮箱格式是否正确 String ruleEmail w w w A Za z0 9 A Za z0 9 A Za z0 9 正则表达式的模式 编译正则表达式 Pattern p Pattern compile ruleEm
  • nRF52832学习记录(九、SAADC)

    nRF52xx 处理器中的ADC为一个逐次逼近的模拟数字转换器 所有nRF52xx 系列处理器的内部 ADC 称为 SAADC 目录 nRF52xx SAADC基础介绍 SAADC采样示例 SAADC EasyDMA 缓冲采样示例 SAAD
  • 记一次容器环境下出现 Address not available

    困惑的源地址 pod 创建后一段时间一直是正常运行 突然有一天发现没有新的连接创建了 业务上是通过 pod A 访问 svc B 的 svc name 的方式 进入 pod 手动去 wget 一下 发现报错了 Address not ava
  • 思科 计算机网络 第2章测试&考试 答案

    拓展 思科交换机常用命令及配置 测验 当通过 Cisco CLI 配置主机名时 哪三项命名约定将作为指南的一部分 选择三项 A 主机名的长度应少于 64 个字符 B 主机名应全部用小写字符表示 C 主机名应不包含空格 D 主机名应该以一个特
  • 球面如何切分成多个扇面?

    近期在研究使用D3D开发三维显示场景 发现D3D支持的纹理图的大小有限制 这种限制一般由D3D引擎 显卡驱动和显卡硬件共同决定 使用如下代码可以获取当前系统能支持最大纹理大小 D3DCAPS9 caps m pd3dDevice gt Ge
  • Linux 下计算圆周率

    转自 http blog csdn net zhuying linux article details 7298465 oracle sor sys time echo scale 5000 4 a 1 bc l q 输出的是小数点后 位的
  • 防治交换机窃听技术_等保2.0建设基本要求(技术部分)解读(下)

    网御星云对等保2 0基本要求技术部分 以四级为例 对安全计算环境 安全管理中心的控制点逐项解读内容如下 01 安全计算环境 1 1 身份鉴别 a 应对登录的用户进行身份标识和鉴别 身份标识具有唯一性 身份鉴别信息具有复杂度要求并定期更换 b
  • rpgmv存档修改html_使用HTML5存档网站内容更改

    rpgmv存档修改html The majority of web content today exists in a state of retrograde amnesia Created in a moment content is c
  • 从GAN到WGAN及WGAN-GP

    20200910 0 引言 最近看了PassGAN的代码 他是使用了WGAN GP的代码作为GAN的框架 来进行密码生成 由此引出了对GAN的学习 在GAN的研究中 有一个方向就是研究如何使GAN更加稳定的训练 在此之中 WGAN和WGAN