Sinkhorn-Knopp算法

这篇具有很好参考价值的文章主要介绍了Sinkhorn-Knopp算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Sinkhorn-Knopp是为了解决最优传输问题所提出的。

Sinkhorn算法原理

最优运输问题的目标就是以最小的成本将一个概率分布转换为另一个概率分布。即将概率分布 c 以最小的成本转换到概率分布 r,此时就要获得一个分配方案 P ∈ R n × m
其中需满足以下条件:

P 的行和服从分布 r
P 的列和服从分布 c

因此在分布 r 、c 约束下, P 的解空间可以做如下定义:
sinkhorn最优传输,DETR系列,算法,python,机器学习
同时希望最小化转换成本,即需要一个成本矩阵(cost matrix)M。于是就有了最优传输问题的公式化表示:
sinkhorn最优传输,DETR系列,算法,python,机器学习
此时为Wasserstein metric 或earth mover distance(EMD 推土机距离)代价函数。
Sinkhorn距离是对推土机距离的一种改进,在其基础上引入了熵正则化项,则代价函数表示为:

sinkhorn最优传输,DETR系列,算法,python,机器学习
其中h§为添加的正则项,即P的信息熵

sinkhorn最优传输,DETR系列,算法,python,机器学习

上式两侧对Pij求导
sinkhorn最优传输,DETR系列,算法,python,机器学习
令其为0可得:
sinkhorn最优传输,DETR系列,算法,python,机器学习
这是在无约束条件下求得的关联矩阵,若考虑约束条件,则上式变为:
sinkhorn最优传输,DETR系列,算法,python,机器学习
其中α i 和 β j 分别是是的行和列满足约束的因子。
伪代码如下:

sinkhorn最优传输,DETR系列,算法,python,机器学习

实现流程

首先是M定义的为cost矩阵。

sinkhorn最优传输,DETR系列,算法,python,机器学习

求得P值: P = np.exp(-lam * M) # (8, 5)

sinkhorn最优传输,DETR系列,算法,python,机器学习
随后进行归一化操作

P /= P.sum()  # 归一化
u = np.zeros(n) # (8, )

np.abs 为对数组中的每一个元素求其绝对值。

    while np.max(np.abs(u - P.sum(1))) > eplison: # 这里是用行和判断收敛
        # 对行和列进行缩放,使用到了numpy的广播机制,不了解广播机制的同学可以去百度一下
        u = P.sum(1) # 行和 (8, )
        x=(r / u).reshape((-1, 1)) # 缩放行元素,使行和逼近r
        P *= x
        v = P.sum(0) # 列和 (5, )
        y=(c / v).reshape((1, -1)) # 缩放列元素,使列和逼近c
        P *= y

sinkhorn最优传输,DETR系列,算法,python,机器学习

广播机制计算

sinkhorn最优传输,DETR系列,算法,python,机器学习

代码实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
r = np.array([3, 3, 3, 4, 2, 2, 2, 1])
c = np.array([4, 2, 6, 4, 4])
M = np.array(
    [[2, 2, 1, 0, 0],
    [0, -2, -2, -2, -2],
    [1, 2, 2, 2, -1],
    [2, 1, 0, 1, -1],
    [0.5, 2, 2, 1, 0],
    [0, 1, 1, 1, -1],
    [-2, 2, 2, 1, 1],
    [2, 1, 2, 1, -1]],
    dtype=float)
M = -M # 将M变号,从偏好转为代价
def compute_optimal_transport(M, r, c, lam, eplison=1e-8):
    """
    Computes the optimal transport matrix and Slinkhorn distance using the
    Sinkhorn-Knopp algorithm

    Inputs:
        - M : cost matrix (n x m)
        - r : vector of marginals (n, )
        - c : vector of marginals (m, )
        - lam : strength of the entropic regularization
        - epsilon : convergence parameter

    Outputs:
        - P : optimal transport matrix (n x m)
        - dist : Sinkhorn distance
    """
    n, m = M.shape  # 8, 5
    P = np.exp(-lam * M) # (8, 5)
    P /= P.sum()  # 归一化
    u = np.zeros(n) # (8, )
    # normalize this matrix
    while np.max(np.abs(u - P.sum(1))) > eplison: # 这里是用行和判断收敛
        # 对行和列进行缩放,使用到了numpy的广播机制,不了解广播机制的同学可以去百度一下
        u = P.sum(1) # 行和 (8, )
        P *= (r / u).reshape((-1, 1)) # 缩放行元素,使行和逼近r
        v = P.sum(0) # 列和 (5, )
        P *= (c / v).reshape((1, -1)) # 缩放列元素,使列和逼近c
    return P, np.sum(P * M) # 返回分配矩阵和Sinkhorn距离
lam = 10
P, d = compute_optimal_transport(M,r,c, lam=lam)
print(P)
partition = pd.DataFrame(P, index=np.arange(1, 9), columns=np.arange(1, 6))
print(partition)
ax = partition.plot(kind='bar', stacked=True)
plt.show()
print('Sinkhorn distance: {}'.format(d))
ax.set_ylabel('portions')
ax.set_title('Optimal distribution ($\lambda={}$)'.format(lam))

sinkhorn最优传输,DETR系列,算法,python,机器学习文章来源地址https://www.toymoban.com/news/detail-608623.html

到了这里,关于Sinkhorn-Knopp算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能的数学基础】最优传输(Optimal Transport)问题与Wasserstein距离

    Wasserstein Distance. 本文目录: 最优传输问题 Optimal Transport Problem 最优传输问题的对偶问题 Dual Problem Wasserstein距离及其对偶形式 对于两个概率分布 p ( x ) p(textbf{x})

    2024年02月09日
    浏览(32)
  • 计算机视觉算法——基于Transformer的目标检测(DETR / Deformable DETR / Dynamic DETR / DETR 3D)

    DETR是DEtection TRansformer的缩写,该方法发表于2020年ECCV,原论文名为《End-to-End Object Detection with Transformers》。 传统的目标检测是基于Proposal、Anchor或者None Anchor的方法,并且至少需要非极大值抑制来对网络输出的结果进行后处理,涉及到复杂的调参过程。而DETR使用了Transformer

    2024年02月09日
    浏览(40)
  • 目标检测7-DETR算法剖析与实现

    欢迎访问个人网络日志🌹🌹知行空间🌹🌹 DETR 是 Facebook AI 的 Nicolas Carion 等于 2020 年 05 月提交的论文中提出的。 论文地址: https://arxiv.org/abs/2005.12872 开源代码: https://github.com/facebookresearch/detr DETR(DEtection TRansformer) 将目标检测问题看成是集合预测的问题,所谓集合预测 set

    2024年02月22日
    浏览(23)
  • 目标检测算法——deformable-detr源码调试

    环境 版本 torch 1.11.0+cu113 torchvision 0.12.0+cu113 论文 源码 自定义数据集 这一步出问题了请检查自己的环境,之前用的pytorch1.10.0报错,换成pytorch1.11.0就好了 ImportError: .conda/lib/python3.7/site-packages/MultiScaleDeformableAttention-1.0-py3.7-linux-x86_64.egg/MultiScaleDeformableAttention.cpython-37m-x86_64-linu

    2024年02月16日
    浏览(36)
  • DETR | 基于匈牙利算法的样本分配策略

    如有错误,恳请指出。 前不久,沐神对DETR进行了讲解,其实之前也对DETR进行了介绍,见:论文阅读笔记 | 目标检测算法——DETR。现对DETR的核心内容进行重温,也就是其所提出的目标检测的end-to-end框架,输入的是一张图像,输出的直接是最后的预测标注结果,不再需要后处

    2024年02月11日
    浏览(28)
  • 最优化:建模、算法与理论(最优性理论2

    考虑优化问题 min ⁡ x ∈ R n 1 2 ∣ ∣ x − y ∣ ∣ 2 2 , s . t . A x = b min_{x{in}R^n}frac{1}{2}||x-y||_2^2,\\\\ s.t.{quad}Ax=b x ∈ R n min ​ 2 1 ​ ∣∣ x − y ∣ ∣ 2 2 ​ , s . t . A x = b 其中 A ∈ R m × n , b ∈ R m , y ∈ R n A{in}R^{m times n},b{in}R^m,y{in}R^n A ∈ R m × n , b ∈ R m , y ∈ R n 为给定的矩阵

    2024年02月07日
    浏览(35)
  • RT-DETR算法改进:最新Inner-IoU损失函数,辅助边界框回归的IoU损失,提升RT-DETR检测器精度

    💡 本篇内容 :RT-DETR算法改进:最新Inner-IoU损失函数,辅助边界框回归的IoU损失,提升RT-DETR检测器精度 💡本博客 改进源代码改进 适用于 RT-DETR目标检测算法 (ultralytics项目版本) 按步骤操作运行改进后的代码即可🚀🚀🚀 💡改进 RT-DETR 目标检测算法专属|芒果专栏

    2024年02月19日
    浏览(29)
  • 【计算机视觉 | 目标检测】术语理解7:二值匹配(Binary Matching),DETR中的Object query的理解,匈牙利算法,DETR中的二分图匹配

    当涉及到计算机视觉中的二值匹配(Binary Matching),它是一种用于比较和匹配二值图像的技术。二值图像由黑色和白色像素组成,每个像素只有两种可能的取值。二值匹配的目标是确定两个二值图像之间的相似度或匹配度。 以下是几种常见的二值匹配方法: 汉明距离:通过

    2024年02月07日
    浏览(26)
  • 【算法】遗传算法GA寻优xgboost最优参数模型

    需求:实现遗传算法GA寻优xgboost最优参数模型搭建 遗传算法(Genetic Algorithm)是一种 通过模拟生物进化过程来解决优化问题的算法 。它模拟了自然界中的遗传、变异和选择等过程,并通过不断迭代寻找最优解。 并行性强 遗传算法可以应用并行计算技术,同时对多个个体进行

    2024年02月12日
    浏览(24)
  • 算法进阶指南图论 最优贸易

    C C C 国有 n n n 个大城市和 m m m 条道路,每条道路连接这 n n n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这 m m m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1 1 1 条。 C C C 国幅员辽阔,各

    2024年02月19日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包