机器人中的数值优化|【四】L-BFGS理论推导与延伸
往期内容回顾
机器人中的数值优化|【一】数值优化基础
机器人中的数值优化|【二】最速下降法,可行牛顿法的python实现,以Rosenbrock function为例
机器人中的数值优化|【三】无约束优化,拟牛顿法理论与推导
L-BFGS方法
在上一节中我们对拟牛顿法进行了详细的推导,特别是对BFGS的推导过程比较熟悉了,我们发现BFGS虽然解决了牛顿法中hessian可能不存在以及hessian求逆计算复杂的通电,但是在大规模优化过程中,很可能没有办法去存储一个 n × n n \times n n×n矩阵,因此Limited memory GFGS算法自然而然就被提出,表示使用有限的空间来进行计算。观察原来的式子
Δ B t = Δ g t Δ g t T Δ x t Δ g t T − B t Δ x t Δ x t T B t T Δ x t T Δ B t T Δ x t \Delta B_t = \frac{\Delta g_t \Delta g_t^T}{\Delta x_t \Delta g_t^T} - \frac{B_t \Delta x_t \Delta x_t^T B_t^T}{\Delta x_t^T \Delta B_t^T \Delta x_t} ΔBt=ΔxtΔgtTΔgtΔgtT−ΔxtTΔBtTΔxtBtΔxtΔxtTBtT
B t + 1 − 1 = ( I n − Δ x Δ g T Δ x t T Δ g t ) B t − 1 ( I n − Δ g t Δ x t T Δ x t T Δ g t ) + Δ x t Δ x t T Δ x t T Δ g t B_{t+1}^{-1} = (I_n - \frac{\Delta x \Delta g^T}{\Delta x_t^T \Delta g_t})B_t^{-1}(I_n - \frac{\Delta g_t \Delta x_t^T}{\Delta x_t^T \Delta g_t}) + \frac{\Delta x_t \Delta x_t^T}{\Delta x_t^T \Delta g_t} Bt+1−1=(In−ΔxtTΔgtΔxΔgT)Bt−1(In−ΔxtTΔgtΔgtΔxtT)+ΔxtTΔgtΔxtΔxtT
我们很容易知道, B t + 1 B_{t+1} Bt+1可以通过迭代计算 Δ x t , Δ g t \Delta x_t,\Delta g_t Δxt,Δgt来得到,LBFGS的思想是不再使用所有的 Δ x t , Δ g t \Delta x_t,\Delta g_t Δxt,Δgt,而是通过使用最近的 m m m个序列来计算。这样只需要保存 2 m 2m 2m个向量,然后每次迭代最近的结果即可计算出近似矩阵 B B B,避免显式保存矩阵信息。
令
ρ k = 1 Δ x k T Δ g k \rho_k = \frac{1}{\Delta x_k^T \Delta g_k} ρk=ΔxkTΔgk1
V k = I − ρ k Δ x k Δ g k T V_k = I -\rho_k \Delta x_k \Delta g_k^T Vk=I−ρkΔxkΔgkT
可以简写为
B t + 1 − 1 = V k B t − 1 V k T + ρ k Δ x t Δ x t T B_{t+1}^{-1} = V_kB_{t}^{-1}V_k^T + \rho_k \Delta x_t \Delta x_t^T Bt+1−1=VkBt−1VkT+ρkΔxtΔxtT
实际工程应用中,可以使用two-loop recursion方法,直接计算得到搜索方向,不用显示计算矩阵,如下所示: