Ceres中tr_radius的理解

tr_radius 是 Trust Region Radius 的缩写,直译是信赖域半径,是 Ceres信赖域(LM)算法的核心控制参数—— 它定义了算法每次迭代时,参数更新步长能探索的最大范围,简单说就是给参数更新画了一个「探索圈」,步长只能在这个圈子里试探,圈子的半径就是tr_radius。
结合之前讲的tr_ratio(步长有效性),tr_radius会根据步长效果动态收缩 / 扩大,让算法既敢大步优化、又能防止发散,下面从核心含义、判定规则、日志实际变化三方面讲透,结合你的日志截图,一眼看懂。
一、tr_radius 核心含义:参数更新的「探索圈半径」
光束法平差的优化是调整相机位姿 + 路标点坐标,tr_radius就是给这些参数的总更新步长(|step|) 设定一个上限:
每次迭代,算法只会在「步长范数 ≤ tr_radius」的范围内找更新方向;
tr_radius越大,「探索圈」越大,算法敢尝试更大的步长,优化速度可能更快,但也容易迈过最优值导致发散;
tr_radius越小,「探索圈」越小,算法只尝试更小的步长,优化更稳定,不会发散,但收敛速度会变慢。
简单理解:tr_radius是 LM 算法的「胆子大小」—— 半径大 = 胆子大,敢大步试探;半径小 = 胆子小,只小步摸索。
二、tr_radius 动态调整规则(和 tr_ratio 强绑定)
LM 算法的聪明之处,就是根据步长有效性(tr_ratio)实时调整这个半径,核心规则只有 3 条,和tr_ratio完全对应,这也是日志里tr_radius忽大忽小的原因:

tr_ratio 结果(步长效果) tr_radius 调整策略 算法逻辑
tr_ratio > 0(有效步长,代价下降) 扩大(通常 ×2/×3) 步长有效,说明探索圈画小了,下次胆子大一点,尝试更大步长加速优化
tr_ratio ≤ 0(无效步长,代价上升) 收缩(通常 ÷2/÷4) 步长无效,说明探索圈画大了,迈过最优值了,下次胆子小一点,小步摸索防止发散
tr_ratio ≈ 1(最优步长,实际 = 预测) 大幅扩大 步长效果完美,说明探索范围刚好,下次大幅扩大半径,最快速度收敛

这个调整规则是全自动的,Ceres 会根据每次迭代的tr_ratio自动改tr_radius,不用手动干预。
tr_radius、tr_ratio、|step|三者是强联动的,共同推动优化收敛,核心关系是:
tr_ratio(步长效果) → 决定 tr_radius(探索圈大小) → 限制 |step|(实际更新步长) → 最终影响收敛状态。
简单说:tr_ratio 是 “裁判”,判定步长好不好;tr_radius 是 “规则”,根据裁判结果改探索范围;|step | 是 “行动”,在规则范围内做实际的参数更新,三者配合,让算法从「大步优化」到「小步试探」,最终收敛。
总结
tr_radius= 信赖域半径,是 LM 算法给参数更新画的最大探索范围,半径越大,步长可探索的范围越广;
它的核心作用是平衡优化速度和稳定性:大步快优化,小步防发散;
动态调整规则和tr_ratio绑定:有效步长扩大,无效步长收缩,全自动调整;

posted @ 2026-02-06 14:09  阳光天气  阅读(18)  评论(0)    收藏  举报