【PyTorch][chapter 22][李宏毅深度学习]【无监督学习][ WGAN]【理论一】

简介:

         2014年Ian Goodfellow提出以来,GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多论文都在尝试解决,但是效果不尽人意,比如最有名的一个改进DCGAN依靠的是对判别器和生成器的架构进行实验枚举,最终找到一组比较好的网络架构设置,但是实际上是治标不治本,没有彻底解决问题。

         2017年Martin Arjovsky提出了 Wasserstein GAN(下面简称WGAN)成功解决了GAN的系列问题:

         1  彻底解决GAN训练不稳定的问题,不再需要小心平衡生成器和判别器的训练程度
         2  基本解决了collapse mode的问题,确保了生成样本的多样性
        3   训练过程中终于有一个像交叉熵、准确率这样的数值来指示训练的进程,这个数值越小代                表GAN训练得越好,代表生成器产生的图像质量越高

    WGAN 里面比较难以理解的是EMD和WGAN 损失函数的关系,以及理论证明

这个会在理论二单独证明.

 目录

   1 GAN 

   2 WGAN 

   3 WGAN 理论


一    GAN 问题

        GAN  使用了BCE loss, 根据生成器的损失函数差异: 有两种方案

         2.1   log(1-D(x))

              总体损失函数:

              V(G,D)= log_{x\sim p_r}logD(x)+log_{x\sim p_g}log(1-D(x))

             生成器G的优化目标:

              V(G,D^{*})= 2JS(p_r||p_g)-2log2

              问题

              P_r,P_g 不重叠的时候, JS(p_r||p_g)=log2,为常数,梯度为0,无法优化生成器G.                       备注:

            P_rP_g的支撑集(support)是高维空间中的低维流形(manifold)时,P_rP_g重叠部分测度(measure)为0的概率为1。

              P_r是由低维的流形(随机噪声输入)映射到高维空间的

            

  •    支撑集(support)其实就是函数的非零部分子集,比如ReLU函数的支撑集就是(0,+∞),一个概率分布的支撑集就是所有概率密度非零部分的集合。
  • 流形(manifold)是高维空间中曲线、曲面概念的拓广,我们可以在低维上直观理解这个概念,比如我们说三维空间中的一个曲面是一个二维流形,因为它的本质维度(intrinsic dimension)只有2,一个点在这个二维流形上移动只有两个方向的自由度。同理,三维空间或者二维空间中的一条曲线都是一个一维流形。
  • 测度(measure)是高维空间中长度、面积、体积概念的拓广,可以理解为“超体积

         

        2.2    -logD(x)

          V(G,D)= log_{x\sim p_r}logD(x)-log_{x\sim p_g}log(D(x))

             生成器G的优化目标:

             V(G,D^{*})= KL(p_g||p_r)-2JS(p_r||p_g)

             这个等价最小化目标存在两个严重的问题。第一是它同时要最小化生成分布与真实分布的KL散度,却又要最大化两者的JS散度,一个要拉近,一个却要推远!在数值上则会导致梯度不稳定,这是后面那个JS散度项的毛病。 这就是mode collapse 问题

       


二 WGAN

   2.1 模型

    生成器G

              输入

                     随机噪声z

              输出:

                      x_f=G(z)

    鉴别器D:

               输入:

                    一种是采样自训练集中的

2.2 损失函数

     

       ,

       GAN 输出的是一个0,1之间的概率

       WGAN 输出的一个scalar

     对于鉴别器D:

                输入训练图片x_r,希望C(x_r)尽量大

                输入生成图片x_f,希望C(x_f)尽量小,

2.3 跟GAN区别

  • 1  判别器最后一层去掉sigmoid
  • 2  生成器和判别器的loss不取log
  • 训练技巧:
  • 1  每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
  • 2 不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行

 2.4   训练方法

\


三  理论分析

  WGAN 的理论基础是Wasserstein  Distance,也叫推土机距离, Kantorovich-Rubinstein 算法.

本篇我们重点讲两个

  1: 什么是 Wasserstein Distance

  2:    Wasserstein  Distance 怎么变换到WGAN 的损失函数

3.1 Wasserstein  Distance

        Wasserstein Distance也称为推土机距离(Earth Mover’s distance, EMD),Wasserstein Distance的定义是评估由P分布转换成Q分布所需要的最小代价(移动的平均距离的最小值).

代价取决于两个因素: 移动的距离以及移动大小

      定义:

       EMD(P,Q)=inf_{r \in \prod}\sum_{x,y}||x-y||r(x,y)

                                =inf E_{(x,y)\sim r}||x-y||

       我们下面举个例子,帮助理解该函数:

      

3.2 例子

     如上图:

      生成图像的概率密度函数是P(x)

       真实图像的概率密度函数是Q(y)

     传输方案一(Transport plan 1 标记 \pi_1

       我们把P(X=6)=0.5的概率 : 

                  移动0.1 至Q(Y=7)     移动0.4 至 Q(Y=9)

      我们把P(X=10)=0.5的概率 : 

                   移动0.1 至Q(Y=7)  ,   移动0.4 至 Q(Y=9)

    我们可以用矩阵表示

    其EMD 距离为

 EMD(P,Q)=|6-7|*0.1+|6-9|*0.4+|10-7|*0.1+|10-9|*0.4

                          =0.1+1.2+0.3+0.4

                          =2.0

      传输方案二(Transport plan 2 标记 \pi_2

       我们把P(X=6)=0.5的概率 : 

                  移动0.2 至Q(Y=7)     移动0.3 至 Q(Y=9)

      我们把P(X=10)=0.5的概率 : 

                 移动0.5 至 Q(Y=9)

    我们可以用矩阵表示

EMD(P,Q)=|6-7|*0.2+|6-9|*0.3+|10-7|*0.0+|10-9|*0.5

                         =0.2+0.9+0.5

                        =1.6

因为方案2 EMD_{\pi_2}<EMD_{\pi_1}, 所以\pi_2更好,实际上我们真实图像的分布复杂度远远比

该分布复杂,对应的传输方案也有无数种,深度学习的目标就是借助神经网络,

从该方案中找到最优的方案

参考


1  WAGAN 论文: https://arxiv.org/pdf/1701.07875.pdf

2  WGAN基本原理及Pytorch实现WGAN-CSDN博客

3   earth-movers-distance_哔哩哔哩_bilibili

4  https://www.youtube.com/watch?v=3JP-xuBJsyc&t=2644s

5     令人拍案叫绝的Wasserstein GAN - 知乎

6  Introduction to the Wasserstein distance_哔哩哔哩_bilibili

7  https://www.youtube.com/watch?v=xs9uibPODGk

8   Wasserstein GAN and the Kantorovich-Rubinstein Duality - Vincent Herrmann

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

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

相关文章

Kafka的基本介绍以及扩展

文章目录 基本操作新增Topic查询Topic修改Topic删除Topic 生产者和消费者创建生产者创建消费者 Broker扩展Producer扩展Topic、Partition、Message扩展存储策略容错机制 基本操作 新增Topic 指定两个分区&#xff0c;两个副本&#xff0c;replication不能大于集群中的broker数…

【MAC】MacOS M2 芯片的Mysql 数据库安装与使用

1.下载 https://downloads.mysql.com/archives/community/ 选择ARM的 2.安装 在安装到最后一步&#xff1a;configuration 一定要选择Use Legacy Password Encryption。 一定要记得输入密码&#xff0c;这个密码也是登陆mysql的密码&#xff0c;非常重要。备注&#xff1a;…

Huggingface中Transformer模型使用

NLP自从Transformer模型出现后&#xff0c;处理方式有大统一的趋势&#xff0c;首先回答几个基础问题&#xff1a; 1、自然语言处理究竟要做一件什么事呢&#xff1f;自然语言处理最终解决的是分类问题&#xff0c;但是它不仅仅输出一个分类的预测结果&#xff0c;关键的在于构…

私立医院的革命者:大数据解决方案全面解析

第一部分&#xff1a;背景 在信息化飞速发展的今天&#xff0c;医疗行业正经历着一场深刻的数字化转型。特别是对于私立医院来说&#xff0c;要在这个变革的浪潮中立于不败之地&#xff0c;就必须拥抱新技术&#xff0c;优化服务流程&#xff0c;提高医疗质量。大数据技术&…

Mac M1:通过docker安装RocketMQ、RocketMQ-Dashboard

0. 引言 最近本地启动以前docker安装的rocketmq发现报错了&#xff0c;因为是从老mac迁移过来的&#xff0c;发现支持的芯片还是amd的&#xff0c;于是重新在docker下安装rocketmq&#xff0c;并记录下步骤&#xff0c;方便大家后续参考。 1. 步骤 1、先下载项目源码 git c…

基于eleiment-plus的表格select控件

控件不是我写的&#xff0c;来源于scui,但在使用中遇到了一些问题&#xff0c;希望能把过程记录下来&#xff0c;同时把这个问题修复掉。 在使用的时候对控件进行二级封装&#xff0c;比如我的一个商品组件&#xff0c;再很多地方可以用到&#xff0c;于是 <template>&l…

【Python】一文详细介绍 plt.rc_context() 在 Matplotlib 中的原理、作用、注意事项

【Python】一文详细介绍 plt.rc_context() 在 Matplotlib 中的原理、作用、注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&a…

2024.3.11 C++作业

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {char str[20];cout << "please enter the str:";gets(str);in…

linux GitLab 私有仓库的搭建

下载地址 gitLab 安装包下载地址&#xff1a;https://about.gitlab.com/install/ 环境准备&#xff1a; 环境&#xff1a;CentOS7.6 安装包&#xff1a;gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm 硬件配置&#xff1a; 4G 安装步骤&#xff1a; 安装&#xff1a; [rootserver3 ~]…

Docker学习——Dock镜像

什么是Docker镜像 Docker 镜像类似于虚拟机镜像&#xff0c;可以将它理解为一个只读的模板。 一个镜像可以包含一个基本的操作系统环境&#xff0c;里面仅安装了 Apache 应用程序&#xff08;或 用户需要的其他软件&#xff09; 可以把它称为一个 Apache 镜像。镜像是创建 Do…

如何把一款App从无到有运营起来?都需要哪些资源?

引言 在这个数字化的时代&#xff0c;移动应用程序&#xff08;App&#xff09;如同现代社会的魔法手段&#xff0c;将我们与世界连接在一起。无论是寻找爱情的那一刻&#xff0c;还是享受美食的时光&#xff1b;无论是在城市喧嚣中找到宁静的那一刻&#xff0c;还是在孤寂时刻…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题⑤

2024 年广东省职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项样题⑤ 模块一 私有云&#xff08;50 分&#xff09;任务 1 私有云服务搭建&#xff08;10 分&#xff09;任务 2 私有云服务运维&#xff08;25 分&#xff09;任务 3 私有云运维开发&#xf…

软件杯 图像检索算法

文章目录 1 前言2 图像检索介绍(1) 无监督图像检索(2) 有监督图像检索 3 图像检索步骤4 应用实例5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 图像检索算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff…

c++之旅——第六弹

大家好啊&#xff0c;这里是c之旅第五弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一,静态成员&…

【rk3229 android7.1.2 替换默认输入法】

问题平台描述 问题描述解决方法 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip CPU:rk3229 OS:Android 7.1.2 Kernel: 3.10 问题描述 国内客户&#xff0c;觉得安卓自带的输入法不好用&#x…

智能警用装备柜管理系统|智能化可视化管理

智能警用装备柜管理系统|智能化可视化管理 我司&#xff08;JIONCH集驰&#xff09;警用装备管理系统&#xff08;智装备DW-S304&#xff09;是依托互云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对警用装备进行统一管理、分析的信息化、智能化、规范化的系统。 智…

返回值不同算方法重载么?为什么?

1、典型回答 返回值不同不算方法重载 方法重载&#xff08;Overloading&#xff09;是指在同一个类中定义了多个同名方法&#xff0c;但它们的参数列表不同&#xff0c;方法重载要求方法&#xff1a; 名称相同参数类型、参数个数或参数顺序&#xff0c;至少有一个不同 方法…

分布式之LoadBalancer

一、LoadBalancer介绍 Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,抽象和实现&#xff0c;用来替代Ribbon&#xff08;已经停更&#xff09;&#xff0c; 二、Ribbon和Loadbalance 对比 组件组件提供的负载策略支持负载的客户端Ribbon随机 Ran…

[MYSQL数据库]--约束

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、空属性…

C++的学习

代码练习 输入一个字符串&#xff0c;统计其中大写字母、小写字母、数字、空格以及其他字符的个数 #include <iostream>using namespace std;int main() {cout << "请输入一个字符串" << endl;string str;getline(cin,str);int capital 0;int l…