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

前言:

       本篇主要参考《Wasserstein GAN and the Kantorovich-Rubinstein Duality》

重点介绍一下 WGAN 的损失函数 是如何通过 Wasserstein Distance 变换过来的。

分为5步:

  1.     我们首先建立Wasserstein Distance         极小值形式,
  2.     经过对偶变换得到Wasserstein Distance  极大值形式,
  3.     通过Farkas 引理证明其二者是强对偶关系,
  4.    利用对偶形式的约束函数 对 极大值形式 进行变换,得到WGAN 损失函数形式
  5.    极大值的约束函数就是1-Lipschitz

 


   目录:

  1.         Earth Mover’s Distance
  2.         对偶形式(Dual Form)  
  3.         Farkas 引理(Farkas Theorem)
  4.         强对偶(Strong Duality)
  5.        传输成本的对偶( Dual Implementation)
  6.         对偶到WGAN
  7.          Lipschitz约束和Wasserstein 关系

一    Earth Mover’s Distance

         我们以任意两个离散的概率分布p,q 为例

     1.1 EMD 距离定义

        

           一种用来测量两个概率分布之间的距离度量。它主要应用在图像处理和语音信号处理领域。EMD问题可以通过线性规划来求解,其核心思想是将一个分布的密度通过“搬土”的方式转移到另一个分布的位置上,使得转移的代价最小。在这个过程中,每个点对之间的距离和转移的量共同决定了总的工作量,即EMD

                   

                                      

      优化的目标:  

                   求解r,使得W[p,q] 达到极小值

        其中:

                      p(x) :离散的随机分布,对应状态变量x的维度为l

                              (图像中就是对应每个像素值变化范围0-255)

                     q(y):   离散的随机分布,对应状态变量y的维度为l

                     \gamma(x,y)\sim\prod (P_r,P_{\theta}): 代表推土方案,是(P_r,P_{\theta})的联合概率分布函数

                      inf:    积分下限 ,等价于求极小值

               约束条件

                     

 

1. 2   矩阵表达形式

         

          \left \langle \right \rangle_F is Frobenius inner product: 两个大小相同的矩阵元素一一对应相乘并且相加

    1.3 EMD 向量表达形式

                

                 通过求解optimal transport plan \Gamma, 使得EMD 最小

             

              约束条件: A\Gamma =b

                  

    1.4    线性规划问题(LP: Linear Programming)

          通过上面我们可以看到EMD等价于LP问题:

        ​​​​​​​

               

  Python 有对应的LP 库,如下例子

# -*- coding: utf-8 -*-
"""
Created on Sun Mar 10 20:58:19 2024@author: cxf
"""import numpy as np
from scipy.optimize import linprogdef run():"""数学规划模型scppy.optimize.linprog"""c=np.array([-2,-3,5]).transpose()    #行列向量不影响求解A=np.array([[-2,5,-1],[1,3,1]])b=np.array([-10,12])Aeq=np.array([[1,1,1]])    # 单个约束也要表示为矩阵形式beq=np.array([7])x=linprog(c,A,b,Aeq,beq,method='highs',bounds=np.array([[0,None],[0,None],[0,None]]))print(x)def main():'''LINPROG_METHODS = ['simplex','revised simplex','interior-point', 'highs', 'highs-ds','highs-ipm']Returns-------None.'''print("\n ------1--------")P_r = np.array([[0.1,0.9]]).transpose()P_t = np.array([[0.5,0.5]]).transpose()D = np.array([[0.0,1.0],[1.0,0.0]])L,L = D.shapeC = D.reshape((L**2,1))print("\n  C: distance |x-y| 功能 \n",C)A_r = np.zeros((L,L,L))A_t = np.zeros((L,L,L))for i in range(L):for j in range(L):A_r[i,i,j]=1A_t[i,j,i]=1#Aeq是约束条件aeq = np.concatenate((A_r.reshape(L,L**2),A_t.reshape(L,L**2)),axis=0)print("\n 约束条件:Ax=b: \n",aeq,aeq.shape)#b 就是Pr,Pg 的概率分布组成一列beq =  np.concatenate((P_r,P_t),axis=0)print("\n   vec(pr,pg) :\n",beq)bound = np.repeat([[0.0,1.0]],L*L,axis=0)print("\n 0=<x<1 \n",bound)#x[L*L,1]#bounds=boundopt_res= linprog(C,A_eq=aeq, b_eq=beq, method='highs-ds',bounds=bound)emd = opt_res.fun#gamma = opt_res.x.reshape((1,1))print("\n x:\n ",opt_res.x)print("\n-----------")
main()


二 对偶形式(Dual Form)

        

            原始形式 问题:

         不幸的是,这种优化在很多情况下并不实用,尤其是在通常使用 GAN 的领域。在我们的示例中,我们使用具有十种可能状态的一维随机变量。可能的离散状态的数量随着输入变量的维度数量呈指数级增长。对于许多应用,例如图像,输入很容易就有数千个维度。即使是近似值那么几乎是不可能的。但实际上我们并不关心。我们只想要一个数字,即 EMD。此外,我们想用它来训练我们的生成器网络,该网络生成分布,为此,我们必须能够计算梯度。自从p和q只是我们优化的限制,这不可能以任何直接的方式实现. 事实证明,还有另一种更方便的 EMD 计算方法。任何 LP 有两种方式可以表述问题:我们刚才使用的原始形式和对偶形式。

       证明:

设    A^Ty \leq c

         z=c^Tx \geq \begin{pmatrix} A^Ty \end{pmatrix}^Tx

                          \geq y^TAx

                          \geq y^Tb

           因为y^Tb 是标量,所以 \tilde{z}=b^Ty \leq z

         

   这种形式也称为弱对偶形式,那是否有强对偶使得z=\tilde{z}  


三    Farkas 引理

       强对偶形式的证明,主要用到称之为“Farkas 引理”的结论:

       对 \forall A \in R^{m\times n}, 以下两个命题是互斥的:

     3.1 引理一:   向量b在凸锥C内

          矩阵 A=\begin{bmatrix} a_1 &a_2 & ... & a_n \end{bmatrix}  由n个m维的列向量组成

          向量  x=\begin{bmatrix} \alpha_1\\ \alpha_2 \\ ... \\ \alpha_n \end{bmatrix}  由n个非负标量组成 

          Ax=\alpha_1a_1+\alpha_2a_2+...+\alpha_na_n 

          a_1,a_2,...a_n的非负系数的线性组合是一个凸锥C

      如上图:

         a_1,a_2 两个向量顶点连接起来可以组成一个凸锥C,

两者通过非负的线性系数相加得到的a_3 也一定落在该凸锥C 内

同理:   Ax=b(x\geq0) 

非负的线性组合a_1,a_2,..a_n 组成了凸锥C,b由该非负的线性组合得到,也落在该凸锥C内.

 

   3.2 引理二  :b在凸锥C外

     

          A^Ty \leq 0  :  、  A^Ty=\begin{bmatrix} a_1^Ty\leq0\\ a_2^Ty\leq0 \\ ... \\ a_n^Ty\leq0 \end{bmatrix}

                        向量y在凸锥C外,向量y与该凸锥C中任意向量夹角大于90  

          b^Ty> 0:   

                            b^Ty=|b||y|cos\theta,向量 b,y 夹角小于90度, 所以向量b 在凸锥C外

               

                     也可以用下图表示

                          

   


四 强对偶(Strong Duality)

      

             

                Farkas 两条引理:

            ​​​​​​​

            我们要利用Farkas 两条引理 , 证明的是 \hat{z}  可以无限接近 z

  证明:

      假设原始问题的最优解为z^{*}=c^Tx^*,我们定义:

   

        其中 \epsilon,\alpha \in R

    4.1 当 \epsilon =0 时,满足   Farkas case (1)

                 因为 \hat{A}x^*=\hat{b_0} 

                \begin{bmatrix} Ax^*\\ -c^Tx^* \end{bmatrix}=\begin{bmatrix} b\\ -z^*+0 \end{bmatrix}

         不满足Farkas case(2) 即

           \forall \hat{A}^T\hat{y} \leq 0,      \hat{b_0}^T\hat{y} \leq 0 ....(9)

   4.2 \epsilon >0 时,满足Farkas case(2)

               \hat{A}x=\begin{bmatrix} Ax\\-c^Tx\end{bmatrix}
.             因为z^* 已经是最小值了,不存在非负解,使得c^Tx=z^*-\epsilon(EMD为非负的值)

  所以Farkas case(1) 不成立, Farkas case(2) 成立。

               存在\hat{y}=\begin{bmatrix} y\\ \alpha \end{bmatrix} 使得 \hat{A}\hat{y}\leq 0\hat{b_{\epsilon }}\hat{y}>0

              

                 等价于: 推理2,推理3 

              ...(10)

                         \forall \hat{A}^T\hat{y} \leq 0,   \hat{b_{\epsilon }}^T\hat{y}=\hat{b_0}^T\hat{y}+\alpha \epsilon > 0 ...(11)

        当 \forall \hat{A}^T\hat{y} \leq 0,    根据式(9) \hat{b_0}^T\hat{y} \leq 0,  式(11)  \hat{b_{\epsilon }}^T\hat{y}=\hat{b_0}^T\hat{y}+\alpha \epsilon > 0

                得知\alpha>0,取\alpha=1

                         max_{y}\begin{Bmatrix} b^Ty|A^Ty \leq c & \end{Bmatrix} \geq z^*-\epsilon

                弱对偶形式:

                          z^* \geq max_{y}\begin{Bmatrix} b^Ty|A^Ty \leq c & \end{Bmatrix}

                 则:

                       z^*-\epsilon \leq max_{y}\begin{Bmatrix} b^Ty|A^Ty \leq c & \end{Bmatrix} \leq z^*

               \epsilon>0 是任意的,两者可以无限接近,从而

                      max_{y}\begin{Bmatrix} b^Ty|A^Ty \leq c & \end{Bmatrix} = z^*=min_x\begin{Bmatrix} c^Tx|Ax =b,x\geq 0\end{Bmatrix}


五:传输成本的对偶

      EMD 优化目标

            

   

      GAN 在图像处理里面,状态变量 x,和y 的范围一致,所以EMD 优化目标可以写成如下:

     

          根据约束条件:A^TF \leq C

       


六   对偶到WGAN

       我们得到最优传输成本的对偶形式

    

     因为 g(x) \leq -f(x), 同时 p(x),q(x)代表的是非负的概率(标量),所以

   

      等价于求解

    这便是我们最终要寻找的最优传输成本(1)的对偶形式了

   当c(x,y)=||x-y||,我们有 c[p,q]=W_1(p,q)

    

这就是WGAN所采用的W距离,于p,q 都是概率分布,因此我们可以写成采样形式

自然地,整个WGAN的训练过程就是


七 Lipschitz约束和Wasserstein 关系

     7.1 Lipschitz 函数定义

       当L =1 的时候 就是 WGAN的约束条件

    

         其中约束条件我们通常写为||f||_L \leq 1

参考:  

20 AI Projects for Kids That Will Blow Their Minds

https://www.cnblogs.com/yhxm/p/13047489.html

python模块:Scipy.optimize.linprog线性规划求解-CSDN博客

CSDN

从Wasserstein距离、对偶理论到WGAN - 科学空间|Scientific Spaces

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

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

相关文章

王道机试C++第6章 数学问题和22年蓝桥杯省赛选择题Day34

6.1 进制转换 二进制数&#xff08;十转二&#xff09; 习题描述 大家都知道&#xff0c;数据在计算机里中存储是以二进制的形式存储的。 有一天&#xff0c;小明学了C语言之后&#xff0c;他想知道一个类型为unsigned int 类型的数字&#xff0c;存储在计算机中的二进制串是…

详解Python中open()函数指定文件打开方式的用法

当我们用open()函数去打开文件的时候&#xff0c;有好几种打开的模式。 r->只读 w->只写&#xff0c;文件已存在则清空&#xff0c;不存在则创建。 a->追加&#xff0c;写到文件末尾 b->二进制模式,比如打开图像、音频、word文件。 ->更新(可读可写) 这个带号…

Spring MVC中的REST风格

文章目录 REST风格1 REST简介问题导入1.1 REST介绍1.2 RESTful介绍1.3 注意事项 2 RESTful入门案例问题导入2.1 快速入门2.2 PathVariable介绍2.3 RequestBody、RequestParam、PathVariable区别和应用 3 REST快速开发【重点】3.1 代码中的问题3.2 Rest快速开发 4案例&#xff1…

【node】模块化与包(二)

1、模块化的基本概念 模块化是指解决一个复杂的问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说&#xff0c;模块是可组合、分解和更换的单元。 &#xff08;1&#xff09;模块化的优点 遵循固定规则&#xff0c;把大文件拆分成对立并相互依赖…

springboot3 打包报错32-bit architecture x86 unsupported或者 returned non-zero result

springboot3 打包异常情况处理记录 在测试springboot3 native打包时候遇到的异常&#xff0c;百度和谷歌上方法都无法解决我的问题&#xff0c;最后记录一下我最后的原因和解决方案。 前置要求&#xff1a;自己处理好vs的相关内容后 报错一&#xff1a; [1/7] Initializing…

蓝桥杯算法训练VIP-数组查找及替换

题目 1634: 蓝桥杯算法训练VIP-数组查找及替换 时间限制: 3s 内存限制: 192MB 提交: 1629 解决: 890 题目描述 给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素&#xff0c;同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间&#xff0…

跨境电子商务支付与结算的支撑系统

​1、跨境电子商务支付与结算的核心系统。 核心系统是用户执行跨境电子商务支付的核心模块&#xff0c;包括以下具体流程。 ​ ​①用户从跨境电子商务支付应用启动跨境电子商务支付流程。 ②跨境电子商务支付应用根据应用和用户选择的支付工具&#xff0c;来调用对应的支付产…

Linux 动态库和静态库 【详解】

动静态库的基本原理 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库&#xff08;.so&#xff09;&#xff1a;程序在运行的时候才去链接动态库的代码&#xff0c;多个程序共享使用库的…

SkyEye:助力飞行器状态控制系统仿真

飞行器与常见的航天器一样&#xff0c;属于安全关键领域的大型复杂设备&#xff0c;对安全性、可靠性有着极高的要求。为保证稳定飞行&#xff0c;需要对目标对象进行实时跟踪&#xff0c;通过发出正确的修正偏差指令来操纵飞行器改变飞行姿态&#xff0c;因此对飞行器状态控制…

2024-03-13 作业

网络编程&#xff1a; 1.思维导图&#xff1a; 2.上课写的代码&#xff1a; 2.1网络字节序与主机字节序转换 运行代码&#xff1a; #include <myhead.h> int main() {int num 0x12345678;short int value 0x1234;int num_n htonl(num);int value_n htons(value);…

ISIS单区域实验简述

ISIS 中间系统到中间系统&#xff0c;也是链路状态协议&#xff0c;工作在数据链路层&#xff0c;不依赖IP地址&#xff1b;与OSPF一样采用最短路径SPF算法&#xff0c;收敛速度快。 实验基础配置&#xff1a; r1: sys sysname r1 undo info enable int g0/0/0 ip add 12.1.1.1…

jenkins 使用k8s插件连接k8s集群

jenkins 安装k8s 插件 配置k8s节点 填写k8s 配置信息 生成秘钥 在服务器上面 查看地址 cat /root/..kube/config 查看秘钥 -----BEGIN CERTIFICATE----- MIIDITCCAgmgAwIBAgIIGOkRkIVlo74wDQYJKoZIhvcNAQELBQAwFTETMBEGA1UE AxMKa3ViZXJuZXRlczAeFw0yNDAyMDgwNjAwMjdaFw…

王庆:当下股市过于悲观,A股、港股基本完成补跌和普跌过程,逆向布局时机已到

核心观点&#xff1a; 1、房地产对中国经济增长拖累最严重的时期正在过去...密切关注真正拐点的出现。 2、当前资本市场从价格表现上来讲&#xff0c;表现的远远超过了基本面所决定的悲观程度。 由于当前资本市场过于悲观&#xff0c;那么反过来就是孕育着机会。 3、我们判…

快速排序 刷题笔记

思路 分治双指针 在每个区间选定一个基准目标 两个指针从数组的两边向中间推进 使用 while循环判断 do {i;}while(q[i]<x); do{j--;}while(q[j]>x); 每次这样做完就会找到q[i]>x,,,,q[j]小于x 此时我们交换 q[i] ,q[j]于是小于x的数分到了小于x的一侧 大…

《详解:鸿蒙NEXT开发核心技术》

我们现在都知道鸿蒙作为一个国产的全栈自研系统&#xff0c;经过国家主推后。已经引起人们很大的关注&#xff0c;其中作为开发者来说&#xff1b;许多一线大厂已经与其华为鸿蒙展开原生应用的合作了&#xff0c;目前了解到已经有200家。而之后出现了很多的高薪鸿蒙开发岗位&am…

【数据库-黑马笔记】基础-SQL

本文参考b站黑马数据库视频,总结详细全面的笔记 ,可结合视频观看1~26集 MYSQL 的基础知识框架如下 目录 一、MYSQL概述 1、数据库相关概念 2、MYSQL的安装及启动 二、SQL 1、DDL【Data Defination】 2、DML【Data Manipulation】 ①、插入 ②、更新和删除 3、 DQL【Data…

Linux本地搭建FastDFS系统

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

jenkins部署go应用 基于docker-compose

丢弃旧的的构建 github 拉取代码 指定go的编译版本 安装插件 拉取代码是排除指定的配置文件 比如 conf/config.yaml 文件 填写配置文件内容 比如测试环境一些主机信息 等 可以配置里面 构建的时候选择此文件替换开发提交的配置文件。。。。 编写docker-compose 文件 docker…

短视频解析接口分发系统

宝塔面板&#xff1a;Nginx系统 php7.2 Mysql 5.6-5.7 伪静态Thinkphp 上传文件直接访问域名安装即可 可以自备 听说后边要出saas去水印小程序 下载地址&#xff1a;https://pan.xunlei.com/s/VNskSEelfRVIzoSm5P5Rcw34A1?pwdqzhh# 接口演示&#xff1a; 前端演示…

解决ipconfig不是内部或外部命令,也不是可运行的程序或批处理文件

问题所示&#xff1a;ipconfig不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。 解决办法如下: 1.右击此电脑&#xff0c;点击属性设置&#xff1a; 2.点击高级系统设置 3.点击进入环境变量 4.在系统变量中进行设置&#xff0c;双击PATH进行配置 5.点击新建&am…