Ceres使用经验之柯西核函数

本文探讨了在存在异常值的情况下,如何利用鲁棒优化技术改进模型的拟合效果。通过引入柯西核函数,可以有效抑制异常值对模型的影响,避免过度拟合。以直线拟合为例,对比了标准最小二乘法与柯西核函数下的目标函数值,展示了柯西核函数的优越性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理

在优化中,经常会遇见有异常值的情况.如在直线拟合中,可能会出现若干个不在直线上点,此时如果每一个点的权重一样,就会导致求得的直线方程不理想.
为了增强优化过程中对异常值的鲁棒性,一种比较可行的办法是使用鲁邦和函数,常见的鲁邦和函数有:柯西核函数,huber核函数.以下以柯西核函数为例说明;
在标准的最小二乘中,rir_iri是残差项,一般最小化如下目标函数:
min1/2Σiri2min 1/2\Sigma_i r_i^2min1/2Σiri2
以应用柯西核函数如下:
minΣc22log(1+(ric)2)min \Sigma \frac{c^2}{2}log(1+(\frac{r_i}{c})^2)minΣ2c2log(1+(cri)2)
与普通的最小二乘目标函数相比,采用柯西核函数之后,使得当r_i过大时,其对应的目标函数不至于过大,从而起到抑制异常值的作用.

实例

举一个简单的例子.拟合一条y=x的直线,现在出现一个(0,10)的outlier, 根据标准最小二乘,其目标函数为:
fleastsquare=50 f_{leastsquare} = 50fleastsquare=50
假设c=1, 柯西核函数目标函数值:
fcauchy=1/2log(101)=2.3f_{cauchy} = 1/2log(101) = 2.3fcauchy=1/2log(101)=2.3
可以看出使用柯西核函数之后,该点对整个系统的影响明显减小了.当然使用柯西核函数也有其缺点:

  1. 可能会导致有无数个无法观测的解."With a descending first derivative, such a function has a
    tendency to yield erroneous solutions in a way which can not be observed"
    在Ceres中,只需要在增加残差项时指定柯西核函数:
optimize_problem.AddResidualBlock(cost_function, new ceres::CauchyLoss(0.5), pose_params.data());

同时还需要制定柯西函数的c值,可以通过对目标函数求导,看出c值对目标函数值的影响:
∂O∂r=c2211+(r/c)2=r1+(r/c)2\frac{\partial O}{\partial r} = \frac{c^2}{2} \frac{1}{1+(r/c)^2} = \frac{r}{1+(r/c)^2}rO=2c21+(r/c)21=1+(r/c)2r
可以看出当c增大,目标函数的一阶导数越小,即异常值对目标函数影响越小.

参考

  1. Parameter Estimation Techniques: A Tutorial with Application to Conic Fitting, Zhengyou Zhang
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手持电烙铁的侠客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值