机器人中的数值优化(五)——信赖域方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例



七、信赖域方法

1、信赖域方法简介

信赖域方法(Trust Region Methods)是一种用于非线性优化的数值优化方法,旨在寻找目标函数的最小值。信赖域算法是一种迭代算法,即从给定的初始解出发,通过逐步迭代,不断改进,直到获得满意的近似最优解为止。其基本思想是把最优化问题转化为一系列简单的局部寻优问题。

它的核心思想是在当前点的局部模型和真实模型之间建立一个可信区域(Trust Region),并在可信区域内寻找更优的解。

该方法在解决非线性优化问题时,常使用局部二次模型来近似目标函数,并在每个迭代步骤中解决这个二次模型的最小化问题。信赖域方法是求解非线性最优化问题的有效方法之一,广泛应用于计算机视觉、机器学习、优化控制等领域。


2、信赖域方法基本思想

信赖域方法的基本思想是将问题分解为多个步骤。首先,用一个二次模型来近似目标函数,这个模型只在一个局部域内是准确的。其次,在这个局部域内求解二次模型的最小值。最后,使用这个最小值来更新优化变量,然后检查更新后的函数值是否小于当前的函数值。如果是,则扩大局部域的半径,否则缩小局部域的半径,以此控制每个步骤的更新大小。

那么为什么要构建局部模型,而不使用真实模型呢?

假设在点 x k x_k xk处,我们欲求下降方向 d x d_x dx,若直接求解极小值问题 m i n f ( x k + d ) min f(x_k+ d) minf(xk+d)去得到 d k d_k dk,那么这个问题与原问题复杂程度相同,而关于方向d的问题应该是相对简单、易求的。所以,解决这个问题简单可行的方法是:利用Taylor展式,在点 x k x_k xk的邻域中,使用 f ( x k + d ) f(x_k+ d) f(xk+d)的一阶近似函数或二阶近似函数作为局部模型代替 f ( x k + d ) f(x_k+ d) f(xk+d)去求 d k d_k dk 。(常使用二阶近似函数),我们记这个局部模型函数为 q k ( d ) q_k(d) qk(d).求取局部模型 q k ( d ) q_k(d) qk(d)的极小点,并将其作为迭代方向 d k d_k dk ,即求

min ⁡ d q k ( d ) \operatorname*{min}{d}q{k}(d) dminqk(d)


q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的好坏,是受到 x k x_k xk处邻域大小的影响的.合适的邻域和合适的近似函数的选取,可以保证 q k ( d ) q_k(d) qk(d)是 f ( x k + d ) f(x_k+ d) f(xk+d)的一个好的近似函数,如取

q k ( d ) = f k + ∇ f k T d + 1 2 d T ∇ 2 f k d q_k(d)=f_k + \nabla f_k^T d + \frac{1}{2} d^T \nabla^2 f_k d qk(d)=fk+∇fkTd+21dT∇2fkd

当||d||较小时, q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的误差亦小. 如果 x k x_k xk处的邻域太大,就无法保证 q k ( d ) q_k(d) qk(d)是 f ( x k + d ) f(x_k+ d) f(xk+d)的好的近似函数,此时可能会出现 q k ( d ) q_k(d) qk(d)的极小点与目标函数 f ( x k + d ) f(x_k+ d) f(xk+d)的极小点相差甚远的情况. 而邻域的大小决定了步长的长短,太短的步长会增加算法的迭代次数,影响算法的收敛速度,所以领域也不能取得过小。

因此,每步迭代在 x k x_k xk处选择一个合适的邻域,在这个邻域中求解 min ⁡ d q k ( d ) \operatorname*{min}{d}q{k}(d) mindqk(d),这就是信赖域方法的思想.这个邻域,我们称之为信赖域,即在此信赖域中,我们相信 q k ( d ) q_k(d) qk(d)是 f ( x k + d ) f(x_k+ d) f(xk+d)的好的近似函数.

假定在第k步迭代已得 x k x_k xk以及信赖域的半径 Δ k \Delta_k Δk,则信赖域的子问题即为求解如下表达式,得到 d k d_k dk

min ⁡ q k ( d ) , s.t. ∥ d ∥ ⩽ Δ k , Δ k > 0 \begin{array}{l}\min q_k(d),\\ \textrm{s.t.}\|d\|\leqslant\Delta_k,\Delta_k>0\end{array} minqk(d),s.t.∥d∥⩽Δk,Δk>0

在得到新的迭代点 x k + 1 = x k + d k x_{k+1}=x_k+d_k xk+1=xk+dk之后,我们可以判断 Δ k \Delta_k Δk是否是下一步迭代的合适的信赖域半径,若不合适,可以修正 Δ k \Delta_k Δk得下一步迭代的 Δ k + 1 \Delta_{k+1} Δk+1,上式中的范数可依方法而定。


那么如何衡量 Δ k \Delta_k Δk是否是下一步迭代的合适的信赖域半径呢?

应该根据 x k x_k xk处 q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的好坏来确定,具体来说,可以根据从 x k x_k xk到 x k + d k x_k+d_k xk+dk, f ( x ) f(x) f(x)的实际减少量 Δ f k \Delta f_k Δfk与近似函数 q k ( d ) q_k(d) qk(d)的减少量 Δ q k \Delta q_k Δqk之比 γ k \gamma_k γk来衡量,其中 q k ( 0 ) = f ( x k ) q_k(0)=f(x_k) qk(0)=f(xk)

Δ f k = f ( x k ) − f ( x k + d k ) Δ q k = q k ( 0 ) − q k ( d k ) γ k = Δ f k Δ q k \begin{array}{l}\Delta f_k=f(x_k)-f(x_k+d_k)\\ \\ \Delta q_k=q_k(0)-q_k(d_k)\\ \\ \gamma_k=\dfrac{\Delta f_k}{\Delta q_k}\end{array} Δfk=f(xk)−f(xk+dk)Δqk=qk(0)−qk(dk)γk=ΔqkΔfk

γ k \gamma_k γk接近1时,表明 q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的程度好,下一步迭代应增大 Δ k \Delta_k Δk;当 γ k \gamma_k γk为接近于零的正数时,表明 q k ( d ) q_k(d) qk(d)近似 f ( x k + d ) f(x_k+ d) f(xk+d)的程度不好,下一步迭代应减小 Δ k \Delta_k Δk;当 γ k \gamma_k γk为零或负数时,说明 f ( x k + d k ) ≥ f ( x k ) f(x_k+ d_k)≥ f(x_k) f(xk+dk)≥f(xk) , x k + d k x_k+ d_k xk+dk不应被接受为下一步的迭代点,这时只应缩小信赖域的半径 γ k \gamma_k γk:,并重新求解。


3、信赖域方法的具体步骤

(1)初始化:选择一个初始点 x 0 x_0 x0,设定信赖域的初始大小 Δ 0 \Delta_0 Δ0,初始化迭代次数k=0。

(2)开始迭代:判断是否满足终止条件(例如目标函数的值达到了一定的精度),若满足则输出 x k x_k xk,迭代停止

(3)构建局部模型:在当前点 x k x_k xk处,构建一个局部二次模型,

q k ( d ) = f k + ∇ f k T d + 1 2 d T ∇ 2 f k d q_k(d)=f_k + \nabla f_k^T d + \frac{1}{2} d^T \nabla^2 f_k d qk(d)=fk+∇fkTd+21dT∇2fkd

其中, f k f_k fk是目标函数在 x k x_k xk处的函数值, ∇ f k \nabla f_k ∇fk是目标函数在 x k x_k xk处的梯度, ∇ 2 f k \nabla^2 f_k ∇2fk是目标函数在 x k x_k xk处的Hessian矩阵的近似值。

(4)寻找下降方向:求解 q k ( d ) q_k(d) qk(d)的最小值 d k d_k dk,满足 ∣ d k ∣ ≤ Δ k |d_k| \leq \Delta_k ∣dk∣≤Δk,其中 Δ k \Delta_k Δk是当前信赖域的半径。

(5)计算实际下降量和预测下降量:计算从 x k x_k xk到 x k + d k x_k+d_k xk+dk, f ( x ) f(x) f(x)的实际减少量 Δ f k \Delta f_k Δfk与近似函数 q k ( d ) q_k(d) qk(d)的减少量 Δ q k \Delta q_k Δqk之比 γ k \gamma_k γk

(6)更新信赖域大小:根据比值 γ k \gamma_k γk的大小更新信赖域大小

如果 γ k \gamma_k γk一定程度上接近于1(比如说 γ k \gamma_k γk>0.75)说明局部模型对目标函数有较好的拟合效果,可以增加信赖域的大小 Δ k + 1 = min ⁡ ( γ 2 Δ k , Δ max ⁡ ) \Delta_{k+1}=\min(\gamma_2 \Delta_k, \Delta_{\max}) Δk+1=min(γ2Δk,Δmax),其中 γ 2 > 1 \gamma_2>1 γ2>1是一个大于1的常数, Δ max ⁡ \Delta_{\max} Δmax是信赖域大小的上限。

如果 γ k \gamma_k γk一定程度上接近于0(比如说 γ k \gamma_k γk<0.25)说明局部模型对目标函数的拟合效果较差,应该减少信赖域的大小 Δ k + 1 = γ 1 Δ k \Delta_{k+1}=\gamma_1 \Delta_k Δk+1=γ1Δk,其中 0 < γ 1 < 1 0<\gamma_1<1 0<γ1<1是一个小于1的常数。

如果 γ k \gamma_k γk位于0~1之间,既不靠近0也不靠近1(比如说0.25< γ k \gamma_k γk<0.75)说明局部模型对目标函数的拟合效果既不好也不坏,可以保持信赖域不变 Δ k + 1 = Δ k \Delta_{k+1}=\Delta_k Δk+1=Δk。

(7)判断是否接受新的点 x k + 1 = x k + d k x_{k+1}=x_k+d_k xk+1=xk+dk。

如果 γ k \gamma_k γk<=0,说明 f ( x k + d k ) ≥ f ( x k ) f(x_k+ d_k)≥ f(x_k) f(xk+dk)≥f(xk) , x k + d k x_k+ d_k xk+dk不应被接受为下一步的迭代点,取 x k + 1 = x k x_{k+1}=x_k xk+1=xk,转到第(2)步继续迭代,重新求取第k次迭代的解。

如果 γ k \gamma_k γk>0,说明 f ( x k + d k ) < f ( x k ) f(x_k+ d_k)< f(x_k) f(xk+dk)<f(xk) , x k + d k x_k+ d_k xk+dk可以被接受为下一步的迭代点,取 x k + 1 = x k + d k x_{k+1}=x_k+d_k xk+1=xk+dk,并将迭代数加1,即k=k+1,转到第(2)步继续迭代。


4、总结

与线搜索方法先在 x k x_k xk点求得下降方向 d k d_k dk,再沿 d k d_k dk方向确定步长 a k a_k ak不同,信赖域方法是先限定步长的范围,再同时确定下降方向 d k d_k dk和步长 a k a_k ak。

信赖域方法相对于其他优化算法的优点在于它可以保证每次迭代都可以得到一个可行解,并且可以保证在可信区域内寻找更优的解,从而增加算法的稳定性和可靠性。此外,信赖域方法也可以灵活地处理约束条件和不等式约束问题。

然而,信赖域方法也存在一些缺点。例如,它可能会陷入局部最优解,并且每次迭代需要计算Hessian矩阵或其近似,计算成本较高。同时,信赖域大小的选取也需要一定的经验和调试。

总的来说,信赖域方法是一种有效的非线性优化算法,可以用于解决一类较为复杂的优化问题。



参考资料:

1、机器人中的数值优化

2、信赖域算法

3、数值最优化方法(高立 编著)

相关推荐
Mr.Winter`3 天前
路径规划 | ROS中多个路径规划算法可视化与性能对比分析
人工智能·算法·机器人·自动驾驶·ros·ros2·路径规划
zhangrelay10 天前
机器人和智能的进化速度远超预期-ROS-AI-
学习笔记
zhangrelay12 天前
个体能量的勇气层级是否容易达到?
学习笔记
SomeBottle13 天前
【小记】探探学习平台的字体混淆
javascript·学习笔记·逆向工程
ITenderL1 个月前
Python学习笔记-函数
python·学习笔记
紫郢剑侠1 个月前
Linux shell编程学习笔记85:fold命令——让文件瘦身塑形显示
linux·学习笔记·shell编程·脚本编程·fold命令
软件算法开发1 个月前
基于遗传优化算法的多AGV栅格地图路径规划matlab仿真
matlab·栅格地图·路径规划·遗传优化·多agv
紫郢剑侠2 个月前
Linux shell编程学习笔记80:gzip命令——让文件瘦身
linux·学习笔记·shell编程·脚本编程
紫郢剑侠2 个月前
Linux shell编程学习笔记78:cpio命令——文件和目录归档工具(上)
linux·学习笔记·shell编程·脚本编程·cpio
DrRatio2 个月前
数论 莫比乌斯反演
学习笔记