【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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

B端系统优化,可不是换个颜色和图标,看看与大厂系统的差距。

Hi&#xff0c;我是贝格前端工场&#xff0c;优化升级各类管理系统的界面和体验&#xff0c;是我们核心业务之一&#xff0c;欢迎老铁们评论点赞互动&#xff0c;有需求可以私信我们 一、不要被流于表面的需求描述迷惑。 很多人找我们优化系统界面&#xff0c;对需求总是轻描淡…

开源模型应用落地-工具使用篇-Ollama(六)

一、前言 在AI大模型百花齐放的时代&#xff0c;很多人都对新兴技术充满了热情&#xff0c;都想尝试一下。但是&#xff0c;实际上要入门AI技术的门槛非常高。除了需要高端设备&#xff0c;还需要面临复杂的部署和安装过程&#xff0c;这让很多人望而却步。不过&#xff0c;随着…

设计模式大题做题记录

设计模式大题 09年 上半年&#xff1a; 09年下半年 10年上半年 10年下半年 11年上半年 11年下半年 12年上半年 12年下半年 13年上半年 13年下半年

数据结构——lesson7二叉树 堆的介绍与实现

前言&#x1f49e;&#x1f49e; 啦啦啦~这里是土土数据结构学习笔记&#x1f973;&#x1f973; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1f4a5; 所属专栏&#xff1a;数据结构学习笔记 &#x1f4a5;对于数据结构顺序表链表有疑问的都可以在上面数据结…

计算机中丢失缺少mfc100.dll文件该如何解决?

当你打开某个应用程序时&#xff0c;有时候会遇到一个“mfc100.dll丢失”或找不到mfc100.dll的错误信息提示。这种情况表明你的计算机缺少一个名为mfc100.dll的动态链接库文件。这个文件是由Microsoft VC 2010 Redistributable Package提供的&#xff0c;它是一组可重用的组件&…

普通专线维护成本太高?不如试试SD-WAN专线

企业数字化转型的加速&#xff0c;对于网络连接的需求变得越来越迫切。然而&#xff0c;传统的普通专线维护成本高、部署周期长等问题逐渐凸显&#xff0c;而SD-WAN&#xff08;软件定义广域网&#xff09;专线却因其灵活性和成本效益而备受关注。本文将探讨普通专线和SD-WAN专…

idea2023和历史版本的下载

1.idea中文官网 idea官网历史版本下载(https://www.jetbrains.com.cn/idea/download/other.html)

配置与管理NFS服务器

配置与管理NFS服务器 NFS&#xff1a;即网络文件系统&#xff0c;只提供网络文件共享&#xff0c;不提供数据传输 作用&#xff1a;可以是用户在异构网络操作系统之间进行文件系统共享 概述&#xff1a;客户机与服务器之间可以共享文件&#xff0c;但不可数据传输功能&#…

蓝桥杯-最长递增

思路及代码详解:(此题为容易题) #include <iostream> using namespace std; int main() {int a[1000]{0};int n,temp;int num0;int count0;cin>>n;for(int i0;i<n;i){cin>>a[i];}//输入数据tempa[0];//设置一个临时比较的存储变量for(int i1;i<n;i){i…

md5绕过

文章目录 \\和\\\md5数组绕过科学计数法绕过双md加密md5碰撞Hash长度攻击 下面会以同一道题给大家演示&#xff1a; (题目来源与nssctf) 和 在php代码中我们会看到和&#xff0c;虽然两个都是表示相等&#xff0c;但是在细节上会有所部区别 &#xff1a;是弱比较&#xff0c;只…

C++错误总结(1)

1.定义函数类型时&#xff0c;如果没有返回值&#xff0c;用void void swap(int &x, int &y){ int tem x; x y; y tem; } 2.输入时&#xff0c;不加换行符 cin >> a >> b >> c >> endl ;(红色标记的是错误的部分) 3.【逆序出入…

王道机试C++第 4 章 字符串:字符串内容详解及三个小程序 Day29

第 4 章 字符串 本章介绍一种基础数据类型——字符串&#xff0c;并且介绍一些字符串处理的方法及字符串匹配的方法。虽然字符串的内容非常基础&#xff0c;但是十分重要。希望读者能够好好学习本章的内容&#xff0c;为此后的学习打下良好的基础。 4.1 字符串内容详解 由于 …

Vue事件处理:.passive修饰符与应用场景

.passive修饰符 passive这个修饰符会执行默认方法。你们可能会问&#xff0c;明明默认执行为什么会设置这样一个修饰符。这就要说一下这个修饰符的本意了。 浏览器只有等内核线程执行到事件监听器对应的JavaScript代码时&#xff0c;才能知道内部是否会调用preventDefa…

蓝桥杯练习题——归并排序

1.火柴排队 思路 1.求最小值的时候&#xff0c;可以直接按升序排序&#xff0c;这样得到的值就是最小值 2.求最小交换次数的时候&#xff0c;不能直接排序&#xff0c;因为只能交换相邻的数&#xff0c;只需要知道他们的相对大小&#xff0c;所以可以先用离散化&#xff0c;把…

C及C++每日练习(3)

选择题&#xff1a; 1.以下程序的输出结果是&#xff08;&#xff09; #include <stdio.h> main() { char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p; int i; i 8; p a i; printf("%s\n", p - 3); } A.6 B. 6789 C. 6 D.789 对于本题&#xff0…

【视频图像取证篇】模糊图片复原车牌号技术原理和实战应用小结

【视频图像取证篇】模糊图片复原车牌号技术原理和实战应用小结 模糊图片复原车牌号常用的技术原理和实战应用—【蘇小沐】 &#xff08;一&#xff09;运动模糊视频图像 由于各种各样的原因&#xff0c;主体或者拍摄设备运动共同造成的视频图像模糊等。 1、快门速度 快门速…

【虚拟换衣+论文+代码】2403.OOTDiffusion:高分辨率(1024x768)可控的虚拟试穿(已开源,暂不能训练)

项目地址&#xff1a;https://github.com/levihsu/OOTDiffusion 试用地址&#xff1a;https://ootd.ibot.cn/ 论文地址&#xff1a;2403.OOTDiffusion: 基于衣服融合的可控虚拟试穿潜在扩散 | readpaper arxiv: Outfitting Fusion based Latent Diffusion for Controllable Vir…

第三节:在Sashulin中自定义组件

上一节讲解了如何建立一个业务消息流&#xff0c;流程是由组件构成的。目前SMS提供了General、Database、MessageQueue、Socket、WebService、Http、Internet等系列常用组件&#xff0c;如果不满足业务需求&#xff0c;可以进行自定义组件开发。 一、组件开发 1、建立一个Jar…

二维码门楼牌管理系统应用场景:推动旅游与文化产业的智慧化升级

文章目录 前言一、二维码门楼牌管理系统在旅游领域的应用二、二维码门楼牌管理系统在文化产业的应用三、结语 前言 随着信息技术的不断发展&#xff0c;二维码门楼牌管理系统作为一种创新的信息化手段&#xff0c;正在逐渐渗透到旅游和文化领域。它通过为文化景点、旅游景点和…

面试经典150题——两数相加

​Anything is worth "fighting for," and when you get it, dont doubt it, you deserve it, you deserve it. 1. 题目描述 2. 题目分析与解析 2.1 思路一 这个题目虽然标的是中等&#xff0c;但是大家看一下应该还是比较容易想到思路的&#xff0c;这不就相当于…