基础算法:Sinkhorn算法

来源:https://blog.csdn.net/zsfcg/article/details/112510577?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163272158416780269811867%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163272158416780269811867&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-112510577.pc_search_all_es&utm_term=sinkhorn+algorithm&spm=1018.2226.3001.4187

主要是解决最优匹配的问题。

从Superpoint到SuperGlue再到其它基于深度学习的图像匹配算法,几乎都用到了Sinkhorn,到底什么是Sinkhorn,参考了一篇外文,写的很清晰,翻译了一部分,供大家参考。

(注意,本文不分析Sinkhorn到底如何用于图/图像匹配,但如果看懂本文,我想这一问题就不在话下了)

Sinkhorn解决的是最优传输问题,简单讲就是把一个概率分布以最小代价转换成另外一个分布(此非人话,不理解也无妨,我也很讨厌这种过于学术的表述,不利于知识传播,但是确实没想出来到底怎么表述更合理更易于理解)

用例子解释一下问题

现有5种小吃,merveilleux, eclair, chocolate mousse, bavarois, carrot cake,每种小吃数量如下图所示,

                                            

实验室开party,要将这些小吃分享给8位同事,Bernard, Jan, Willem, Hilde, Steffie, Marlies, Tim, Wouter, 每个人对小吃的需求量如下图所示。

                                     

每个人对各小吃的喜爱程度如下表所示,其中-2分表示非常不喜欢,2分表示非常喜欢。

                                          

我们的任务(问题)是将这些小吃分发给这8个同事,同时使得大家满意度最高。

问题数学表述

  • 令r记录每个人所获得的小吃的数量,

,这里r的维度为8,为使得后续分析更具普遍性,此处记为n.

  • 令c记录每种小吃有多少份,

,这里c的维度为5,记为m.

一般地,r,c 表示边缘分布(就是从一个概率分布转为另一个概率分布的两个分布),因此rc中元素之和需为1,这个在后续程序里会处理一下.

  • 定义

                                                                           

包含所有可能的小吃分配方案。注意,这里每份小吃是可以随意切割进行分配的.

  • 每个用户对各小吃的喜爱程度存储在矩阵

(矩阵

在其它资料中也被成为代价矩阵,本例中将矩阵

中的元素取负即可得到其对应的代价矩阵)

最终问题可表示为,

                                                                        

其中

又被称为 Wasserstein 距离.

此外,上述问题还可添加正则项,使得问题的描述更加合理,即,

                                                                      

又被成为Sinkhorn距离。在本例中,这样做一方面可以尽可能给每个人分配他们最喜欢的食物,但同时又尽量满足均匀分布…(不清楚具体含义,原文为trying to give every person only their favorites or encouraging equal distributions.)

解决方法:Sinkhorn

上述问题最优解可表示为,

                                                                        

其中

为要求解的常数,具体的,Sinkhorn伪代码为

                                                      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值