机器人中的数值优化|【四】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方法,直接计算得到搜索方向,不用显示计算矩阵,如下所示:
 
 


















