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

news2024/12/23 2:13:52

简介:

         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.coloradmin.cn/o/1510070.html

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

相关文章

AI毕业设计生成器(基于AI大模型技术开发)支持Java和Python

这是一个辅助生成计算机毕业设计的工具&#xff0c;可以自动完成毕业设计的源码。它基于几百个github上面开源的java和python项目&#xff0c;运用tengsorflow技术&#xff0c;训练出了AI大模型。基本实现了计算机毕业设计生成器&#xff0c;能够初步生成Java或python基本源码。…

嵌入式驱动学习第三周——container_of()宏

前言 Linux内核编程中&#xff0c;会经常看见一个宏函数container_of&#xff0c;那么这究竟是什么呢&#xff0c;本篇博客记录学习container_of的过程。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可…

1688平台最关键的接口接入实例|获得1688商品详情| 按关键字搜索商品| 按图搜索1688商品(拍立淘)| 获得淘口令真实url

参数说明 通用参数说明 version:API版本key:调用key,测试key:test_api_keyapi_name:API类型[item_get,item_search]cache:[yes,no]默认yes&#xff0c;将调用缓存的数据&#xff0c;速度比较快result_type:[json,xml,serialize,var_export]返回数据格式&#xff0c;默认为jsonl…

【JavaScript 漫游】【034】AJAX

文章简介 本篇文章为【JavaScript 漫游】专栏的第 034 篇文章&#xff0c;对浏览器模型的 XMLHttpRequest 对象&#xff08;AJAX&#xff09;的知识点进行了总结。 XMLHttpRequest 对象概述 浏览器与服务器之间&#xff0c;采用 HTTP 协议通信。用户在浏览器地址栏键入一个网…

Cisco Packet Tracer模拟器实现交换机的vlan配置、生成树技术及模拟器路由设置

1. 内容 1.对交换机进行Vlan配置&#xff0c;完成交换机Vlan的划分、交换机间相同Vlan的通信以及三层交换机的配置。 2.实现交换机的生成树技术&#xff0c;在两个交换机上配置生成树协议&#xff0c;实现Vlan的负载均衡 3.对路由器进行设置&#xff0c;包括模拟器中路由器的…

案例分析篇07:数据库设计相关28个考点(23~28)(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

基于yolov5的草莓成熟度检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的草莓成熟度检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的草莓成熟度系统是在pytorch框架下实现的&#xff0c;这是一个完整的项目…

力扣226.翻转二叉树(二叉树的先序遍历)

文章目录 题目描述思路复杂度Code 题目描述 思路 利用二叉树的先序遍历&#xff0c;每次递归遍历时将当前节点的左右子节点交换即可 复杂度 时间复杂度: O ( n ) O(n) O(n)&#xff1b;其中 n n n为树节点的个数 空间复杂度: O ( h e i g h ) O(heigh) O(heigh)&#xff1b;其…

虚位以待!OpenHarmony开发者激励计划持续招募中

虚位以待&#xff01;OpenHarmony开发者激励计划持续招募中 自2022年5月7日&#xff0c;OpenHarmony开发者激励计划启动招募以来&#xff0c;就正式公开邀请广大开发者们参与 OpenHarmony 生态共建。随着社区的快速成长&#xff0c;目前已有累计超过7000名贡献者&#xff0c;产…

7个帮您恢复文件的Android 数据恢复推荐

您的 Android 设备上保存哪些类型的数据&#xff1f;如果您像大多数人一样&#xff0c;那么您可能已经列出了文档、照片、视频和音频文件。如果您使用智能手机或平板电脑的时间足够长&#xff0c;我们愿意打赌您对 Android 数据丢失有第一手经验。 对您来说幸运的是&#xff0…

目标检测数据集:手机顶盖焊缺陷检测数据集

✨✨✨✨✨✨目标检测数据集✨✨✨✨✨✨ 本专栏提供各种场景的数据集,主要聚焦:工业缺陷检测数据集、小目标数据集、遥感数据集、红外小目标数据集,该专栏的数据集会在多个专栏进行验证,在多个数据集进行验证mAP涨点明显,尤其是小目标、遮挡物精度提升明显的数据集会在该…

ubuntu 18.04安装教程(详细有效)

文章目录 一、下载ubuntu 18.04镜像二、安装ubuntu1. 点击下载好的Vmware Workstation&#xff0c;点击新建虚拟机&#xff0c;选择 “自定义(高级)”&#xff0c;之后下一步。2. 默认配置&#xff0c;不需要更改&#xff0c;点击下一步。3. 选择 “安装程序光盘映像文件(iso)(…

用信号的方式回收僵尸进程

当子进程退出后&#xff0c;会给父进程发送一个17号SIGCHLD信号&#xff0c;父进程接收到17号信号后&#xff0c;进入信号处理函数调用waitpid函数回收僵尸进程若多个子进程同时退出后&#xff0c;这是切回到父进程&#xff0c;此时父进程只会处理一个17号信号&#xff0c;其他…

vulhub中Weblogic SSRF漏洞复现

Weblogic中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而攻击内网中redis、fastcgi等脆弱组件。 访问http://your-ip:7001/uddiexplorer/&#xff0c;无需登录即可查看uddiexplorer应用。 SSRF漏洞测试 SSRF漏洞存在于http://your-ip:7001/ud…

魅族录屏功能在哪里?这篇文章告诉你答案

“魅族录屏功能在哪里&#xff1f;作为一名魅族手机的新用户&#xff0c;我对这款手机非常满意。然而&#xff0c;最近我在工作中需要用到录屏功能&#xff0c;却找不到如何开启的方法。想请教各位魅族手机的达人们&#xff0c;能否分享一下录屏功能的开启方法&#xff1f;非常…

Android studio Gradle下载失败,如何手动配置解决该问题详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 前言&#xff1a; 今天在打开公司一个项目时&#xff0c;突然要重新下载相关的gradle&am…

JWT实战之升级Java JWT

概述 关于JWT的基础概念&#xff0c;如JWT组成部分&#xff0c;以及入门实战&#xff0c;如&#xff1a;如何生成Token、如何解析Token、怎么加入自定义字段等&#xff0c;可参考JWT入门教程。 如前文提到的blog所述&#xff0c;大多数公司都会使用如下&#xff08;版本&…

C#,入门教程(26)——数据的基本概念与使用方法

上一篇: C#,入门教程(25)——注释(Comments)你会吗?看多图演示,学真正注释。https://blog.csdn.net/beijinghorn/article/details/124681888 本文所述的知识基本上适用于C/C++,java等其他语言。 数据是程序的基础,算法是程序的栋梁。 徒弟们交作业的之后,一般都会有…

【Sql】数据库的三范式?MySQL数据库引擎有?InnoDB与MyISAM的区别

目录 数据库的三范式&#xff1f; MySQL数据库引擎有&#xff1f; InnoDB与MyISAM的区别 数据库的三范式&#xff1f; 第一范式&#xff1a;是数据库最基本的要求&#xff0c;列不可再分 第二范式&#xff1a;行可以唯一区分&#xff0c;主键约束 第三范式&#xff1a;是在…