pot lib:optimal transport python库

news2024/12/24 2:45:11

文章目录

    • transport
      • 1. [计算最优传输(Computational Optimal Transport)](https://zhuanlan.zhihu.com/p/94978686)
      • 2. 离散测度 (Discrete measures), 蒙日(Monge)问题, Kantorovich Relaxation (松弛的蒙日问题)
      • 3. scipy.stats.wasserstein_distance 距离计算
      • 4. 转化为线性方程求解 Wasserstein距离 , KL散度的对比分析
      • 5. pytorch 通过Sinkhorn 方法计算 Wasserstein距离
      • 6. sinkhorn 原理:
      • 7. 解决方案
      • 8. KL散度
      • 9. book
    • pot lib
      • 1 问题目标
      • 2 ot.emd 方法
      • 3. ot.dist
      • 4. 计算Wasserstein distance
      • 5. 特殊case:快速计算
      • 6. Regularized Optimal Transport
        • 6.1 Entropic regularized OT
        • 6.2 Quadratic regularization 二次方约束
        • 6.3 Group Lasso regularization
      • 7 一个通用的约束框架
      • 7.1 二范数正则化
      • 7.2 entropic regularization
      • 7.3 平方 + entropic reg
    • 8. 求质心
    • 9. Debiased Sinkhorn barycenter 无偏质心
    • 10 unbalanced OT
    • 11. Partial optimal transport 部分转换

transport

https://github.com/rpetit/color-transfer
Rabin, J., & Papadakis, N. (2014). Non-convex relaxation of optimal transport for color transfer.

https://github.com/RachelBlin/Colorization-optimal-transport
Adaptive color transfer with relaxed optimal transport" by Rabin et. al.

A non parametric approach for histogram
segmentation 一种根据直方图分布的图像分割算法。

Optimal Transportation for Example-Guided Color Transfer 颜色转换

https://github.com/search?q=Optimal+Transport

1. 计算最优传输(Computational Optimal Transport)

介绍距离矩阵 和 概念

2. 离散测度 (Discrete measures), 蒙日(Monge)问题, Kantorovich Relaxation (松弛的蒙日问题)

最优运输(Optimal Transfort):从理论到填补的应

3. scipy.stats.wasserstein_distance 距离计算

转化为累计直方图的差异。
還看不懂Wasserstein Distance嗎?看看這篇
在这里插入图片描述

4. 转化为线性方程求解 Wasserstein距离 , KL散度的对比分析

Wasserstein距离

5. pytorch 通过Sinkhorn 方法计算 Wasserstein距离

想要算一算Wasserstein距离?这里有一份PyTorch实战

6. sinkhorn 原理:

最优传输简介
在这里插入图片描述

7. 解决方案

在这里插入图片描述

8. KL散度

在这里插入图片描述

https://zhuanlan.zhihu.com/p/527799934

9. book

Computational Optimal Transport
https://arxiv.org/pdf/1803.00567v4.pdf

pot lib

1 问题目标

将一个分布转移到另一个分布,做最小的功
在这里插入图片描述

主要应用:
1)测量两个分布的相似性,尤其是对于没有相同因变量(support)的分布
2)获得两个分布的mapping 关系。

  1. Wasserstein distance between distributions

用于测量两个分布的距离或相似度。 <C, P>

  1. mapping
    OT问题的一个非常有趣的方面是OT映射本身。当计算离散分布之间的最佳传输时,一个输出是OT矩阵,它将为您提供每个分布中样本之间的对应关系.

  2. ot.optim.cg

    是一个通用的OT问题求解器,可以利用各种平滑连续约束。
    generic OT solver ot.optim.cg that can solve OT problems with any smooth/continuous regularization term making it particularly practical for research purpose.

  3. 规模大的问题用 geomloss, 兼容pytorch

2 ot.emd 方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPVkY2KA-1681721618643)(2023-04-12-13-11-15.png)]

# a and b are 1D histograms (sum to 1 and positive)
# M is the ground cost matrix
T = ot.emd(a, b, M)  # exact linear program

exact linear program 求精确解,复杂度是 O^3

一维例子:
两个直方图以及他们的cost 矩阵
在这里插入图片描述

得到的结果
在这里插入图片描述

二维例子:
2D point, 每个点的概率相同(uniform)

在这里插入图片描述

得到的结果和转换关系:
在这里插入图片描述

无论是一维还是二维,都是一些位置,另外就是把每个位置的值当作土堆的质量

3. ot.dist

采用不同的距离评价标准:

a, b = ot.unif(n), ot.unif(n)  # uniform distribution on samples

# loss matrix
M1 = ot.dist(xs, xt, metric='euclidean')
M1 /= M1.max()

# loss matrix
M2 = ot.dist(xs, xt, metric='sqeuclidean')
M2 /= M2.max()

# loss matrix
Mp = ot.dist(xs, xt, metric='cityblock')
Mp /= Mp.max()

得到不同的距离矩阵(cost matrix):
在这里插入图片描述

最终得到的映射关系也是不同的:
在这里插入图片描述

4. 计算Wasserstein distance

可以通过计算出的转换矩阵T 与 cost matrix M对应相乘求和。
也可以通过 ot.emd2(a, b, M)
在这里插入图片描述

注意Wasserstein distance的公式:
在这里插入图片描述

当p=1时, 利用 M = ot.dist(xs, xt, metric=‘euclidean’)
当p=2时, 利用 M = ot.dist(xs, xt) 默认是metric=‘seuclidean’, 因此调用ot.emd2后,还要求一个平方根,毕竟是 1/p

利用不同的M求解ot.emd2的效果:
分布距离越来越大,值也越来越大。
在这里插入图片描述

5. 特殊case:快速计算

再1D的情况下, ot.emd_1d, ot.emd2_1d, ot.wasserstein_1d 会有更好的计算效率。
另外就是如果两个分布都服从高斯分布,ot.gaussian.bures_wasserstein_mapping可以更快的计算。

6. Regularized Optimal Transport

正则化项1)提高计算效率,2)对于不同的应用可以设置不同的约束
在这里插入图片描述

具体来说有以下常见约束:

6.1 Entropic regularized OT

在这里插入图片描述

利用sinkhorn-knopp算法求解,函数是 ot.sinkhorn 和 ot.sinkhorn2.
lamda是一个超参数,控制 熵的大小,lamda越大,对转换矩阵的熵约束越弱,会使结果的熵更大,转换矩阵更加平滑。

The Sinkhorn-Knopp algorithm is implemented in ot.sinkhorn and ot.sinkhorn2 that return respectively the OT matrix and the value of the linear term.

主要函数是:(还有其他解法,没有一一列出。)

ot.sinkhorn
ot.sinkhorn2
ot.bregman.empirical_sinkhorn
ot.bregman.empirical_sinkhorn2

ot.sinkhorn实验:

# reg term
lambd = 1e-1

Gs = ot.sinkhorn(a, b, M, lambd)

在这里插入图片描述

ot.bregman.empirical_sinkhorn 实验:
在这里插入图片描述

两者差不多。

不同的lamda reg得到的 转换矩阵T不同:
在这里插入图片描述

损失也会随着lamda增大而变大。
在这里插入图片描述

6.2 Quadratic regularization 二次方约束

在这里插入图片描述

使用函数:

ot.smooth.smooth_ot_dual(a, b, M, lambd, reg_type='kl')
ot.smooth.smooth_ot_dual(a, b, M, lambd, reg_type='l2') # 这个是二次方约束
ot.smooth.smooth_ot_semi_dual

6.3 Group Lasso regularization

没有太理解其具体原理,它的作用是促进稀疏性,一般情况下 emd算法已经足够稀疏,所以这个约束并没有什么意义。 可以将它与 entropic regularization结合。

7 一个通用的约束框架

在这里插入图片描述
在这里插入图片描述

分别依赖ot.emd 和 ot.sinkhorn

函数分别是 ot.optim.cg 和 ot.optim.gcg
使用的时候需要定义正则化约束函数 和 其导数,通过这个方法可以实现各种正则化方法。

7.1 二范数正则化

def f(G):
    return 0.5 * np.sum(G**2)
def df(G):
    return G
reg = 1e-1
Gl2 = ot.optim.cg(a, b, M, reg, f, df, verbose=True)

7.2 entropic regularization

def f(G):
    return np.sum(G * np.log(G))
def df(G):
    return np.log(G) + 1.

reg = 1e-3
Ge = ot.optim.cg(a, b, M, reg, f, df, verbose=True)

7.3 平方 + entropic reg

def f(G):
    return 0.5 * np.sum(G**2)
def df(G):
    return G

reg1 = 1e-3
reg2 = 1e-1
Gel2 = ot.optim.gcg(a, b, M, reg1, reg2, f, df, verbose=True)

效果对比:
在这里插入图片描述

8. 求质心

alpha = 0.5  # 0<=alpha<=1
weights = np.array([1 - alpha, alpha])
# l2bary
bary_l2 = A.dot(weights)
# wasserstein
reg = 1e-3
ot.tic()
bary_wass = ot.bregman.barycenter(A, M, reg, weights)
ot.toc()
# linear exact
ot.tic()
bary_wass2 = ot.lp.barycenter(A, M, weights, solver='interior-point', verbose=True)
ot.toc()

以上三种方法的表现:
在这里插入图片描述

9. Debiased Sinkhorn barycenter 无偏质心

barycenter(A, M, reg, weights)
barycenter_debiased(A, M, reg, weights)
A是两个分布
效果对比如下:
在这里插入图片描述

对于2Dimage:
ot.bregman.convolutional_barycenter2d(A, reg, weights)
ot.bregman.convolutional_barycenter2d_debiased(A, reg, weights, log=True)
A 是多个图cancat在一起, reg是正则化系数,weights是 每个图的权重
最终效果如下:
在这里插入图片描述

10 unbalanced OT

数量不平衡,对转换矩阵的严格要求变为 正则化约束, 不要求完全a转到b, 因为两者的总数量也不同。
在这里插入图片描述

主要函数:

ot.sinkhorn_unbalanced
ot.sinkhorn_unbalanced2

entropic_kl_uot = ot.unbalanced.sinkhorn_unbalanced(a, b, M, reg, reg_m_kl)

# mm_unbalanced 不带 reg正则化项
kl_uot = ot.unbalanced.mm_unbalanced(a, b, M, reg_m_kl, div='kl')
l2_uot = ot.unbalanced.mm_unbalanced(a, b, M, reg_m_l2, div='l2')

质心:
bary_wass = ot.unbalanced.barycenter_unbalanced(A, M, reg, alpha, weights=weights)
在这里插入图片描述

11. Partial optimal transport 部分转换

允许只tansport一部分:

w0, log0 = ot.partial.partial_wasserstein(p, q, M, m=0.5, log=True)
w, log = ot.partial.entropic_partial_wasserstein(p, q, M, reg=0.1, m=0.5,
                                                 log=True)
精确解 和 约束解

公式如下:
在这里插入图片描述

对于两个数据分布如下:
在这里插入图片描述

转换矩阵求得为:
在这里插入图片描述

可以看出只进行了部分数据的转换。

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

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

相关文章

CVPR2023活体检测Instance-Aware Domain Generalization for Face Anti-Spoofing学习笔记

论文链接&#xff1a;https://arxiv.org/pdf/2304.05640.pdf 代码链接&#xff1a;GitHub - qianyuzqy/IADG: (CVPR 2023) Instance-Aware Domain Generalization for Face Anti-Spoofing&#xff08;尚未公布&#xff09; 研究动机 此前的基于域泛化&#xff08;domain gen…

信号完整性分析:关于传输线的三十个问题解答(二)

11.对于 50 欧姆带状线的纵横比&#xff0c;什么是好的经验法则&#xff1f;(What is a good rule of thumb for the aspect ratio of a 50-Ohm stripline?) 在带状线几何形状和 FR4 基板中&#xff0c;线宽和平面之间的电介质间距的纵横比为 。由于有两个平面&#xff0c;带…

如何快速建立一个podman环境

本文介绍如何安装podman&#xff0c;并创建podman容器 环境 Centos8 安装podman Podman 是一个容器环境&#xff0c;首先在主机上安装 Podman。执行下面命令来安装podman&#xff1a; [rootlocalhost ~]# yum -y install podman然后修改一下用户命名空间的大小&#xff1a…

202305读书笔记|《因思念而沉着》——任何赞美都是身外之物唯自由可随身携带

《因思念而沉着》作者巴哑哑&#xff0c;忘了是什么时候加入的书架&#xff0c;昨天下班地铁上读完的书。是美的&#xff01; 部分节选如下&#xff1a; 羽叶茑萝举着熄灭的花青色的小枣落了一地所以哭泣沾染上了你的脸 在没落下 当我们开始生活 就是开始患上了眼疾你独自悲伤…

互联网求职指南2023版(内含腾讯、阿里、字节真实面经)

0. 缘起 五年前&#xff0c;小编曾经写过一篇文章&#xff0c;文章主要带大家了解当时的互联网巨头公司、独角兽公司。并给出了互联网的求职建议。从简历、知识储备、暑期实习、面试上给出了中肯的建议。现在看来也是很受用的&#xff0c;感兴趣的可以点击链接《互联网求职指南…

【人工智能概论】 构建神经网络——以用InceptionNet解决MNIST任务为例

【人工智能概论】 构建神经网络——以用InceptionNet解决MNIST任务为例 文章目录 【人工智能概论】 构建神经网络——以用InceptionNet解决MNIST任务为例一. 整体思路1.1 两条原则1.2 四个步骤 二. 举例——用InceptionNet解决MNIST任务2.1 模型简介2.2 MNIST任务2.3 完整的程序…

【ChatGPT 】ChatGPT Sidebar 实战:自定义 ChatGPT 搜索页面回复模板(示例开发和文员专用模板)

目录 一、前言 二、ChatGPT Sidebar 通用配置 &#xff08;1&#xff09;通用配置入口 &#xff08;2&#xff09;设置 ① 如何访问 ChatGPT ② 语言 ③ 主题 三、ChatGPT Sidebar 搜索页面 &#xff08;1&#xff09;搜索页面入口 &#xff08;2&#xff09;设置 …

Node 05-Node.js模块化

Node.js 模块化 介绍 什么是模块化与模块 ? 将一个复杂的程序文件依据一定规则&#xff08;规范&#xff09;拆分成多个文件的过程称之为 模块化 其中拆分出的 每个文件就是一个模块&#xff0c;模块的内部数据是私有的&#xff0c;不过模块可以暴露内部数据以便其他模块使用…

【问题解决】Git报错:failed to push some refs to xxxxx

Git报错&#xff1a;failed to push some refs to xxxxx To https://xxxxxxxxxxxx.git ! [rejected] master -> master (fetch first) error: failed to push some refs to ‘https://xxxxxxxx.git’ hint: Updates were rejected because the remote contains work that yo…

AI+明厨亮灶智能算法 yolo

AI明厨亮灶智能算法通过pythonyolo网络模型分析算法&#xff0c;AI明厨亮灶模型算法可接对后厨实现如口罩识别、厨师服穿戴、夜间老鼠监测、厨师帽识别、厨师玩手机打电话识别、抽烟识别等实时分析监测。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就…

领导力专题︱聊聊领导力的主要问题

本文内容结构 一、领导力的主要问题&#xff1a;领导者与下属 1、让人敬佩的领导者的能力与技巧 2、下属的期望 &#xff08;1&#xff09;热情 &#xff08;2&#xff09;重视 &#xff08;3&#xff09;欣赏 &#xff08;4&#xff09;归属感 3、下属&#xff08;追随…

微结构MRI参数估计的神经网络:在白质扩散-弛豫模型中的应用

导读 通过使用生物物理模型来解释弛豫-扩散MRI大脑数据&#xff0c;可以研究白质微观结构的具体特征。尽管更复杂的模型有可能揭示组织的更多细节&#xff0c;但也会导致参数估计耗时较长&#xff0c;由于简并拟合地形中普遍存在局部最小值&#xff0c;这些参数估计可能会收敛…

软件测试工程师需要达到什么水平才能顺利拿到 20k 无压力?

最近有粉丝朋友问&#xff1a;软件测试员需要达到什么水平才能顺利拿到 20k 无压力&#xff1f; 这里写一篇文章来详细说说&#xff1a; 目录 扎实的软件测试基础知识&#xff1a;具备自动化测试经验和技能&#xff1a;熟练掌握编程语言&#xff1a;具备性能测试、安全测试、全…

前端Vue.js项目开发,不重启项目,快速切换后台地址---使用nginx负载简单快速实现更换后台代理地址

前端Vue.js项目开发,不重启项目,快速切换后台地址—使用nginx负载简单快速实现更换后台代理地址 本文实现了在vue项目不重启的情况下&#xff0c;快速实现更换联调后台服务器的方法&#xff0c; 能够大大节省vue项目重启时间 chen 2023-04-20 文档源码地址,最新版本会在这里修改…

互交式3d地球仪工具:Earth 3D - World Atlas Mac

Earth 3D - World Atlas for Mac是一款3d地球仪。这个交互式 3D 地球仪以世界奇观、政治和物理地图以及天气为特色。发现许多关于我们星球的有趣事实和有用信息&#xff01;原始的彩色图形、用户友好的界面和准确的信息——这就是 Earth 3D - World Atlas 的全部意义所在&#…

leetcode Two Sum-Java 和Python 的写法

我想这题是正要开始写LeetCode 的人&#xff0c;大部分的人的第一题吧&#xff0c;这题是个基本题算在easy 的题型&#xff0c;看到题目直接就会想到使用双回圈的写法&#xff0c;不过双回圈时间复杂度只有达到 O(N^2) 不那么理想&#xff0c;如果比较资深的工程师会用HashMap …

wsl的图像化实现,在wsl中启动浏览器

最近在学习wsl&#xff0c;原本我看以前的教程说wsl和vmware的区别有一点就是&#xff0c;wsl只能使用命令行&#xff0c;而vmware可以实现图像化&#xff0c;结果我在 microsoft 官方发现现在的wsl 2已经实现了 GUI 界面&#xff0c;所以就来记录一下吧。 wsl 的 GUI 实现 首…

Vue3.2 + TypeScript + Pinia + Vite4 + Element-Plus + 微前端(qiankun) 后台管理系统模板(已开源)

最终效果 一、前言 Wocwin-Admin&#xff0c;是基于 Vue3.2、TypeScript、Vite、Pinia、Element-Plus、Qiankun(微前端) 开源的一套后台管理模板&#xff1b;同时集成了微前端 qiankun也可以当做一个子应用。项目中组件页面使用了Element-plus 二次封装 t-ui-plus 组件&#xf…

C/C++每日一练(20230420)

目录 1. 存在重复元素 II &#x1f31f; 2. 外观数列 &#x1f31f;&#x1f31f; 3. 最优路线 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专…

搭建sentry来监控Django项目

sentry搭建 我的环境&#xff1a; centos7&#xff0c;已安装docker和docker compose 下载最新zip包到 /usr/local/ https://github.com/getsentry/self-hosted/tagshttps://github.com/getsentry/self-hosted/tags解压 unzip self-hosted-23.4.0.zip 安装期间会提示是否…