最小二乘非線性優化整理 (METHODS FOR NON-LINEAR LEAST SQUARES PROBLEMS)

泰勒展開

在整理非線性最小二乘問題之前,先整理一個預備知識,泰勒展開。
這裏直接放上一個很不錯的學習視頻,看完這個我就開始在B站學數學了。
泰勒級數
這是一位博主對該視頻做了一個簡單的總結: 泰勒級數博客

泰勒展開的公式如下:
f(x)=f(a)0!+f(a)1!(xa)+f(a)2!(xa)2+...+f(n)(a)n!(xa)n+Rn(x) f(x) = \frac{f(a)}{0!} + \frac{f'(a)}{1!}(x-a) + \frac{f''(a)}{2!}(x-a)^2 + ...+ \frac{f^{(n)}(a)}{n!}(x-a)^n +R_n(x)
從視頻中我們可以知道,泰勒展開其實就是用一系列的多項式來在a點附近擬合一個複雜的函數。本質上就是讓多項式與原函數的各級導數保持一致,從而在a點附近保持比較高的一致性。

接下來的內容則是從一篇文章中截取的:
METHODS FOR NON-LINEAR LEASTSQUARES PROBLEMS

最小二乘問題與非線性優化

問題定義:
問題定義
這個問題定義可能看着不是很明朗,但帶上數據擬合的例子就比較清楚了。
在這裏插入圖片描述
數據點與待擬合模型之間總是有誤差的,設擬合模型爲
M(x,t)=x3ex1t+x4ex2tM(x,t) = x_3e^{x_1t}+ x_4e^{x_2t}
該模型的係數爲 x=[x1,x2,x3,x4]Tx = [x_1, x_2, x_3, x_4]^T,這是待求的。那麼最小二乘的的目的就是計算一個最優的 xx', 使yiy_iM(x,ti)M(x',ti)的誤差之和最小。與公式1.1對應,也就是F(x)=12i=1m(yiM(x,ti))2 F(x) = \frac{1}{2}\sum\limits_{i = 1}^m (y_i - M(x,ti))^2
【m表示數據點的個數,其中f(xi)=(yiM(x,ti))f(x_i) = (y_i - M(x,ti)) 被稱爲cost function】

求取全局最優解是很複雜的。在後面的解釋中,我們只給出一個較爲簡單的解決方案,也就是求取局部最優解。問題定義爲:
在這裏插入圖片描述
這也是非線性最優化問題的基本解題思路,尋找 F(x)F(x) 的下降方向,持續迭代直至該函數無法再下降。【從定義1.1可以看出 F(x)F(x) 總是大於等於0 的。只要 F(x) 不斷減小,那麼就擬合的越好。在ICP匹配中,就是使用最小二乘,不斷迭代來找到使總體匹配誤差最小的情況,從而求得位移矩陣及旋轉矩陣。】
在這裏插入圖片描述
原泰勒公式描述的是複雜函數在a點的擬合公式,那麼對於a+h,其泰勒公式爲
f(a+h)=f(a)0!+f(a)1!(h)+f(a)2!(h)2+...+f(n)(a)n!(h)n+Rn(a+h) f(a+h) = \frac{f(a)}{0!} + \frac{f'(a)}{1!}(h) + \frac{f''(a)}{2!}(h)^2 + ...+ \frac{f^{(n)}(a)}{n!}(h)^n +R_n(a+h)
然後用x來替換a,就可以得到1.4a的公式。
後面是兩個定理。如果一個點,其一次導數等於0,附近的二次導數是正定的,那麼該點就是局部最小點。二次導數正定意味着一次導數是遞增的,也就意味着該點附近的一次導數,左邊小於0,右邊大於0。也就是該點左邊是遞減的,右邊是遞增的。那麼顯然該點是一個局部最小點。
在這裏插入圖片描述
在這裏插入圖片描述
總之,最小二乘的目標就是找到一個點,使總誤差最小。而爲了達到這個目標,所有的非線性優化方法都是通過迭代來完成的。每次迭代都需要滿足
F(xk+1)<F(xk)...............................(2.1) F(x_{k+1}) < F(x_k) ...............................(2.1)
在這裏插入圖片描述
在這裏插入圖片描述
那麼第一個方法也就呼之欲出了。hTh^T就是我們想要求的迭代增量。下面介紹非線性優化的常用方法。

下降法 (Descent methods)

最速下降法 (The Steepest Descent method)

最速下降法也叫梯度法,此方法只需要計算原函數的一次導數,故計算速度比較快。從前面的定義2.6也可以大概看出,要想滿足該條件,那麼顯然 hT=F(x)h^T = -F'(x)。具體的推導見下。【注意,cos(θ)cos(\theta)中的 θ\theta指的是 hhF(x)F'(x)的夾角】
在這裏插入圖片描述
從幾何角度來看,最速下降法的下降方向就是與該點切線方向(一次導數)相反的方向。該方法的優勢在於計算速度快,對初始位置要求低,但在最終的收斂階段會比較慢,容易陷入局部最優。

牛頓法(Newton’s Method)

最速下降法只利用了一次導數的信息,並沒有關注一次導數的變化趨勢。只關注表面,而不掌握其背後的規律,這樣肯定會被迷惑,栽跟頭。比如當迭代到某一處,其附近的一次導數都爲0時,最速下降法就停止迭代了,而這個點可算不上局部最優點(原文中稱之爲Stationary point, 駐點)。而牛頓法則更聰明一點,它還考慮了二次導數的信息。一次導數反映的函數值的變化趨勢,而二次導數反映的則是一次導數的變化趨勢。
在這裏插入圖片描述
牛頓法得到的結果可以確保是局部最優,其同時滿足定理 1.5 和 1.8。但代價是較慢的下降速度與較複雜的計算(二次導數的計算)。那麼很自然的,就會有人提出一種混合的方法。在初始階段,使用最速下降法。在收斂階段,使用牛頓法。
在這裏插入圖片描述
如果該點二次導數是正定的(初始階段),使用最速下降法的下降方向。如果該點不是正定的(收斂階段),那就使用牛頓法的下降方向。

該章節後面還介紹了怎麼選取步長 α\alpha,這不是我所關注的,有興趣的可自己去看看原文。同樣,後面還有對信賴域法和阻尼法的介紹。

非線性最小二乘問題(NON-LINEAR LEAST SQUARES PROBLEMS)

問題定義

下面的定義其實與前面的最小二乘問題是一樣的,區別在於用 Jacobian Matrix 代替了一次導數, 用 Hessian Matrix 代替了 二次導數。關於線性代數,再次推薦B站學習視頻:線性代數的本質 - 系列合集
在這裏插入圖片描述
在這裏插入圖片描述

高斯牛頓法(The Gauss–Newton Method)

3.7a 公式是用 l(h)l(h) 來表示 f(x+h)f(x+h)。 後面雖然看着複雜,其實也就是一些符號變換,比如用 f 表示 f(x), 用 J 表示 J(x) , 爲了將問題說的更清楚。涉及一些線性代數的知識。這裏的轉置是爲了維度匹配,簡單理解可以直接看成是乘法就好。比如 fTff^Tf 直接看成 f2f^2 即可。而此處得到的結果 3.9,你會發現跟 2.9a 是一樣的。 知道怎麼求每次的下降方向,也就解決了問題了。
在這裏插入圖片描述
在這裏插入圖片描述
然而,一般牛頓高斯法只是一個引子,真正高效常用的方法是 LM 方法,一種帶阻尼的高斯牛頓法。通過阻尼來混合使用高斯牛頓法和最速下降法。

The Levenberg–Marquardt Method

LM算法與 高斯牛頓法的區別在於其加入了一個阻尼因子,從而將 公式 3.11 中的 JTJJ^T J 變成了 JTJ+μIJ^T J + \mu I, 得到下面的 3.13 式。這個 μ\mu 雖然看着不起眼,但作用巨大。

  1. 確保了二次導數是正定的,這意味着在未到達最優點之前,求得的增量肯定是下降的。
  2. μ\mu 比較大時, LM算法類似於最速下降法,這意味着該算法對初始迭代點要求不高。
  3. μ\mu 較小時,LM 算法類似於高斯牛頓法,有利於收斂到最優解。
  4. 與前面方法相比,此動態步長更加靈活高效。

後面描述了 μ\mu 的初始值選取以及如何更新的。 μ\mu 的更新取決於一個更新比公式。該公式分子部分是原函數在某個點的增量,分母部分是近似函數在該點的增量。根據此增量比來更新 μ\mu
在這裏插入圖片描述
在這裏插入圖片描述
下面是 LM 算法的僞代碼。總體架構和前面的一樣。
在這裏插入圖片描述
最後放上一篇論文,使用 FPGA 對非線性優化最小二乘問題做加速。【雖然非線性優化需要求解高維矩陣的逆,但評估發現其運算很快,只有幾十us。】
Pang Y, Wang S, Peng Y, et al. A microcoded kernel recursive least squares processor using fpga technology[J]. ACM Transactions on Reconfigurable Technology and Systems (TRETS), 2016, 10(1): 1-22.

如果有什麼地方寫的有問題,歡迎大佬們批評指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章