GAN:WGAN-GP-带有梯度惩罚的WGAN

论文:https://arxiv.org/pdf/1704.00028.pdf

代码:GitHub - igul222/improved_wgan_training: Code for reproducing experiments in "Improved Training of Wasserstein GANs"

发表:2017

WGAN三部曲的终章-WGAN-GP

摘要

WGAN在稳定训练GANs方面有一定的进展,但依然存在生成样本质量低、难以收敛等问题。主要原因是:采用了weight clipping。本文作者提出了gradient penalty (GP)来替代 w-c,有效的解决了WGAN存在的缺陷。同时本文也是第一个在很深的网络上(res101)成功训练GANS.

weight clipping缺陷:模型建模能力弱化,以及梯度爆炸或消失。

权重约束的难点

作者发现WGAN中的权重裁剪会导致优化困难,即使优化成功,也可能导致判别器具有病态的值表面。作者尝试了其他的权重约束方案:L2 norm clipping、weight normlization、以及L1和L2 权重衰减,都存在相似的问题,并不能解决问题

作者同时发现在WGAN中:判别器中增加BN可以一定程度上缓解上述问题,但随着网络的加深,WGAN依然会面临难以收敛的困境。

权重分布问题

WGAN在训练过程中保证判别器的所有参数处于[-c, +c]的范围内,约束了判别器对相似样本有相似的结果。实际训练需求是希望判别器尽可能拉开真假样本的分数差,而weight-clipping限制了网络的参数范围,使得最优的策略是尽可能让所有参数拉开,要么取最大值c,要么取最小值-c。而g-p 的权重数值分布就比较正常。

梯度回传问题

c-p另一个问题就是会导致梯度消失或者爆炸,如下图。判别器通常是一个多层网络,设想一下:

如果weight clipping 阈值设置的很小(比如下图中的c=0.001),每经过一层网络,保留的梯度就变小一点,多层之后,可能就会出现梯度消失的问题。

如果weight clipping 阈值设置的很大(比如下图中的c=0.1),每经过一层网络,保留的梯度就变大一点,多层之后,可能就会出现梯度爆炸的问题。

所以只有设置的不大不小,比如c=0.01(wgan作者推荐的数值),下图中的紫色线,梯度保持相对合理,才能让生成器获得不错的回传梯度。所以这个参数在实际应用中调试不容易把握。

本文提出的 g-p(图中蓝色线),不论判别器深度如何,梯度范数,都保持相对稳定,有效解决梯度消失和梯度爆炸的问题。

梯度惩罚

在原始判别器的损失上增加了一项惩罚,惩罚系数设置为10经过验证,可以在各个框架和数据集上表现不错。

公式在下面, 里面表达的是它在WGAN的loss上加了一个惩罚项,如果判别器的 gradient 的 norm,离 1 越远,那么 loss 的惩罚力度越高。

算法流程

  • 训练 n_critic=5 次判别器,训练1次生成器
  • 训练判别器:
    • 采样一次真实数据x和生成数据\tilde{x}
    • 将真实数据x和生成数据\tilde{x}\varepsilon比例叠加混合,得到\hat{x}
    • \hat{x}输入判别器,得到混合图片数据的梯度,对梯度计算 norm,看看这个 norm 离单位距离 1 有多远(离1越近,惩罚越小)

对于上面第2点,为什么要用真假数据进行一个插值处理?这篇文章的解释: 要求 ‖T‖L ≤ 1 在每一处都成立,所以数据应该是全空间的均匀分布才行, 显然这很难做到。所以作者采用了一个非常机智(也有点流氓)的做法: 在真假样本之间随机插值来惩罚,这样保证真假样本之间的过渡区域满足 1-Lipschitz 约束。

移除判别器中BN

 大多数GANs中在生成器和判别器中均使用BN,目的是稳住训练过程。但WGAN-GP中移除了判别器中的BN操作: 因为WGAN-gp的惩罚项计算中,惩罚的是单个数据的gradient norm,如果使用 batchNorm,就会扰乱这种惩罚,让这种特别的惩罚失效。作者发现移除后效果很好。除了移除BN外,也可以使用Layer normalization 来替代 batch normalization。

实验部分

1:wgan-gp在各种架构和条件下都可以成功训练:有无BN,网络深度等

2:优化器选择:作者重新对比了Adam、RMSProp。发现基于wgan-gp架构,Adam表现的更好一些(这与wgan中是完全相反的)

代码学习

wgan:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/wgan/wgan.py

wgan-gp:https://github.com/eriklindernoren/PyTorch-GAN/blob/master/implementations/wgan_gp/wgan_gp.py

1:生成器和判别器没有变化 。这个代码里面是没有BN操作的。如果判别器有,最好是移除。

 2:lambda_gp = 10 的参数。同时优化器换回了Adam,作者验证发现Adam还是比RMSprop优化器效果好一些。

 3:梯度惩罚的实现

4:c-p和g-p的判别器实现 

5:生成器实现,没有区别 

参考

1:wgan笔记

2:wgan-gp 

3:wgan-gp 实现 

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

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

相关文章

123456前端调AES加密方法变为YehdBPev

使用密码加密服务: pig4cloud 加密服务

“天洑杯”工业数据建模揭榜挂帅专项启动暨征榜指南发布

随着人工智能和数据挖掘技术的发展,市场上已存在有大量开源的和商业的数据建模解决方案,但是对于工业企业,要想建立高质量的模型,并应用于自己的业务场景,仍存在着一定的门槛,数据荒废或投入产出失衡的现场…

js获取当前时间,当日零点,前一周时间

项目场景: 根据时间进行数据的快捷筛选 解决方案: 1.获取当前时间和当日零点时间 //当日 $("#today").click(function () { var currentTime new Date(Date.now()); var formattedCurrentTime currentTime.toLocaleString(zh-C…

【每日易题】Leetcode上Hard难度的动态规划题目——地下城游戏的实现

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,博主最近一直在钻研动态规划算法,最近在Leetcode上刷题的时候遇到一个Hard难度的动态规划题,今天就借此机会来给大家分享…

安装部署Docker-Compose

随笔记录 目录 1. 要在CentOS 7上安装Docker,操作如下: 1.1 更新系统 1.2 安装Docker依赖 1.3 添加Docker官方存储库 1.4 安装Docker引擎 1.5 启动Docker服务 1.6 验证Docker是否成功安装 1.7 设置Docker开机自启动 1.8 权限问题 2. 安装Docke…

品牌保护与知识产权:跨境电商中的法律挑战与解决方案

随着跨境电商的蓬勃发展,品牌保护和知识产权问题日益成为业界关注的焦点。在全球范围内进行电商业务,涉及到多国法律法规的复杂性,品牌所有者需要面对一系列法律挑战,保护其品牌和知识产权不受侵害。本文将深入探讨跨境电商中面临…

2023年广东工业大学腾讯杯新生程序设计竞赛不知道叫什么名字(前缀和)

需要的是男生女生数量相同,做个转化,女生变成-1,然后求一遍前缀和,我们希望找到最长的满足 s u m ( l , r ) 0 sum(l, r)0 sum(l,r)0的区间也就是 s u m ( r ) − s ( l − 1 ) 0 sum(r) - s(l - 1) 0 sum(r)−s(l−1)0 考虑枚…

L1-016:查验身份证

题目描述 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2&#xf…

quickapp_快应用_系统接口应用

系统接口 在项目中使用到的接口都需要在配置文件manifest.json中声明,不然会报如下警告 [WARN] 请在 manifest.json 文件里声明项目代码中用到的接口: system.storage, service.account, system.package, system.webview[1]检查某app是否在手机上安装 官方文档&a…

前端nginx代理,访问后端接口502问题积锦

项目场景: 项目上线:前端服务器配置了nginx反向代理后,用户发出请求,结果502,本地请求后端服务的时候就正常 解决方案 http状态码502 目前: 前端服务是正常的后端服务也正常那么,就是连结前…

【Flink基础】-- 延迟数据的处理

目录 ​一、关于延迟的一些概念 1、什么是延迟? 2、什么导致互联网延迟?

jenkins清理僵尸任务和排队任务

步骤 进入 Manage Jenkins系统管理 然后点击 Script Console , 然后根据自己需求选择性执行后面的脚本 查看所有进程 Thread.getAllStackTraces().keySet().each() {t -> println("name:"t.getName()) }例如: name:Thread-90 name:Scheduler-174573182-1 name…

Java List、Set、Map 之间的区别是什么?

Java List、Set、Map 之间的区别是什么? 在Java中,List、Set 和 Map 是三种不同的集合接口,用于存储和操作不同类型的数据。 1. List 接口: 特点: 有序:元素的顺序与插入顺序一致。允许重复:…

P1 Orange Pi Zero2镜像烧录和环境搭建(换源)

目录 前言 01 镜像下载 02 镜像烧录 03 SD卡启动 04 SSH登录开发板 05 基于官方外设开发 方法1 方法2 前言 此专栏为智能家居项目,使用的开发板一共有三块,分别为 主控:Orange Pi Zero2触摸屏控制面板:i.MX 6ULL子系统&…

【华为OD题库-063】字符匹配-java

题目 给你一个字符串数组(每个字符串均由小写字母组成)和一个字符规律(由小写字母和.和组成),识别数组中哪些字符串可以匹配到字符规律上。".“匹配任意单个字符,”*"匹配零个或多个前面的那一个元素,所谓匹配&#xff…

字符指针变量数组指针变量

字符指针变量 在指针的类型中&#xff0c;我们知道有一种指针叫做字符指针 一般的使用情况如下&#xff1a; #include<stdio.h> int main() {char ch w;char* pa &ch;*pa h;printf("%c", *pa);return 0; } 还有一种使用方法如下&#xff1a; #incl…

国内 AI 成图第一案!你来你会怎么判?

我国目前并未出台专门针对网络爬虫技术的法律规范&#xff0c;但在司法实践中&#xff0c;相关判决已屡见不鲜&#xff0c;K 哥特设了“K哥爬虫普法”专栏&#xff0c;本栏目通过对真实案例的分析&#xff0c;旨在提高广大爬虫工程师的法律意识&#xff0c;知晓如何合法合规利用…

室内外融合便携式定位终端5G+UWB+RTK

一、介绍 便携式定位终端主要用于提供高精度的位置数据&#xff0c;支持室内UWB定位和室外北斗系统定位功能&#xff0c;支持5G公网和5G专网通信功能&#xff0c;便携式定位终端中超宽带(UWB)和实时动态(RTK)技术的集成代表了精确位置跟踪方面的重大进步。这款UWBRTK便携式定位…

git 本地改动无法删除

1. 问题 记录下git遇到奇怪的问题&#xff0c;本地有些改动不知道什么原因无法删除 git stash&#xff0c; git reset --hard HEAD 等都无法生效&#xff0c;最终通过强制拉取线上解决 如下图&#xff1a; 2. 解决 git fetch --all git reset --hard origin/master执行这两…

Android RatingBar实现五星好评

属性 isIndicatorRatingBar 是否为指示器&#xff0c;为true时&#xff0c;用户将无法交互操作&#xff0c;默认为false。 numStars 显示的星型数量&#xff0c;必须是一个整形值&#xff0c;像“50”&#xff0c;虽然可以设置很大&#xff0c;但一般…