最近ICCV 2021上有一项姿态识别领域非常厉害的工作,它就是今天要介绍的残差似然估计(Residual Log-likelihood Estimation)。其工作的核心在于,通过flow方法,估计出模型输出关节的分布概率密度。一旦估计出令人满意的先验分布函数,就能动态优化损失函数loss,从而促进模型的回归训练。
从结果上讲,该论文也交出了一份令人满意的答卷:有史以来第一次,回归关节坐标的方法比高斯热图方法取得了更好的效果,而且,回归方法还能保持更快、更轻。(For the first time, regression based methods achieve superior performance to the heatmap-based methods, and it's more computation and storage efficient.)
通过flow方法,估计出模型输出关节的分布概率密度。一旦估计出令人满意的先验分布函数,就能动态优化损失函数loss,从而促进模型的回归训练。
然而,对于没有太多这方面基础知识的同学而言,这段话可能有点不好理解,脑子里也会很快地跳出几个问题:
1、为什么要估计关节的概率密度函数?有什么好处?
2、估计出来关节的概率密度分布和我损失函数又有什么关系?
3、为什么要用所谓的flow方法来估计概率密度函数,说到底什么是flow方法?
4、这个残差Residual又是起什么作用的?
没关系,这篇文章的目的就是用尽量简单的语言,从零开始,来一一解答上面的几个小问题。
一、概率密度分布,损失函数与最大似然估计
1、为什么要估计关节的概率密度函数?
2、估计出来关节的概率密度分布和我损失函数又有什么关系?
先拿一个简单的问题问大家:你们有没有想过,为什么平时我们第一印象上总喜欢用均方误差作为回归的损失函数?
可能有人说,因为均方误差衡量了距离,也有人会说均方误差衡量了目标在预测周围的集中程度,这都有其直觉上的道理。但数学上讲,这其实是和一种常见而重要的概率分布联系在一起的,那就是高斯分布。我们默认用均方误差作为损失函数,其实就是因为高斯分布在自然界中比较常见,而且有较好的性质,所以我们默认要预测的变量服从高斯分布。
是的,如果我们有一个想要预测的变量y,那么变量y的分布情况影响了我们要采用的损失函数。如果y是高斯分布的变量,我们会倾向采用均方误差(l2 loss)来衡量。如果y是拉普拉斯分布的变量,我们会倾向采用绝对值误差来衡量(l1 loss),不一而足。
可是概率分布和损失函数到底是怎么对应上的呢?为什么高斯用l2 loss,拉普拉斯就用l1 loss呢?这就要讲到小标题“最大似然估计,概率密度分布与损失函数”中的第三个词,也就是“最大似然估计”了,正是最大似然估计,将loss和概率密度联系在了一起。
这一段将由变量的高斯分布,推导出一个结论:均方误差
是最大似然法下的损失函数
。假设我们要用线性函数
预测y,而我们事先知道 y 被高斯噪声
影响 ,那么真实情况下 y 被加性噪声影响的表达式为
,把噪声单独放在等式一边则有
。可以看出y也就服从均值为
,方差为
高斯分布: ,展开来写作:
那