非線性最小二乘問題的求解方法

2022-08-02 09:12:12 字數 4035 閱讀 5663

目錄對於形如(1)的函式,希望尋找乙個區域性最優的\(x^*\),使得\(f(x)\)達到區域性極小值\(f(x^*)\) 。

\[\begin

f(\mathbf)=\frac \sum_^\left(f_(\mathbf)\right)^

\end

\]其中,\(f_ : \mathbf^ \mapsto \mathbf, i=1, \ldots, m\),即 \(x \in r^n,f_i(x)\in r\)。

區域性極小值:存在\(\delta>0\),對任意滿足\(\left\|\mathbf-\mathbf^\right\|<\delta\) 的\(x\),都有\(f\left(\mathbf^\right) \leq f(\mathbf)\)。

這裡舉三個簡單的例子:

\(x\in r,m=1,f_1(x)=x+1\),則\(f(x)=\frac (x+1)^2\),區域性極小值在\(x^*=-1\)處取得。

\(x\in r , m=2,f_1(x)=x+1,f_2(x)=exp(3x^2+2x+1)\),則\(f(x)=\frac (x+1)^2+exp(3x^2+2x+1)\),此時就不容易計算出區域性最優\(x^*\)的位置了。

\(x\in r^3, m=1,f_1(x)=x^tx\),則\(f(x)=\frac (x^tx)^2\)

事實上,\(f_i\)也可以將\(x\)對映到\(r^m\)空間中,因為\(f_i(x)^2=f_i(x)^tf_i(x) \in r\),最終計算出來的值總是乙個實數。對於簡單的最小二乘問題,如1,可以用求導取極值的方法得到區域性極小值的位置,然而複雜的、高維的,如2和3,就只能採取一些迭代的策略來求解區域性極小值了。

注意,是區域性極小值而非全域性最小值!對於凸函式而言是可以得到全域性最小值的。

假設函式(1)是可導並且光滑的,則可以對函式(1)在\(x\)處進行二階泰勒展開為(2)式

\[\begin

f(\mathbf+\delta \mathbf)=f(\mathbf)+\delta \mathbf^t \mathbf +\frac \delta \mathbf^ \mathbf \delta \mathbf+o\left(\|\delta \mathbf\|^\right)

\end

\]其中 \(j=\left[\begin)}}} \\ \\ )}}}\end\right]\),\(h=\left[\begin h(\mathbf)} \partial x_}} & & h(\mathbf)} \partial x_}} \\ & & \\ h(\mathbf)} \partial x_}} & & h(\mathbf)} \partial x_}}\end\right]\),\(j\)和\(h\)分別\(f\)對變數\(x\)的一階導和二階導。

忽略公式(2)二階以上的導數,可以將其寫成二次多項式的形式

\[\begin

\end

\]當$x=x^* $時,我們可以得出一些結論

\(j= \mathbf\),我們稱此點為駐點。(原因,假設其不為0,則必定存在使\(f(x)\)下降的\(\delta x\))

\(h\)為對稱矩陣,且\(h\)為正定矩陣。(原因同樣是保證不會存在使\(f(x)\)下降的\(\delta x\))

那麼,如何尋找\(\delta x\)使得\(f(x+\delta x)\)保持下降呢?最速下降法給出了乙個解決方法,首先是忽略掉一階以上的導數,則公式(3)可以重寫為

\[\begin

\end\]而

\[\begin

\end

\]最速下降法的迭代更新方式為

\[\begin

\delta x = \lambda j

\end\]則

\[\begin

\end

\]此方法最速體現在負梯度方向是區域性下降最快的梯度方向。

牛頓法利用了(3)式的二階導數,收斂速度為二階收斂,比最速下降法的一階收斂要快。

對(3)式的\(\delta x\)求導可得

\[\begin

\end

\]令上式等於0,即可計算出每次迭代的\(\delta \mathbf\)步長

\[\begin

\delta \mathbf = -\mathbf^\mathbf

\end

\]然而,\(\mathbf\)可能不存在逆矩陣,因此可以加上阻尼因子\(\mu>0\)

\[\begin

\delta \mathbf = -(\mathbf+\mu \mathbf)^\mathbf

\end

\]此法保證\(\mathbf+\mu \mathbf\)一定可逆,同時阻尼因子是對\(\delta x\)的大小做了限制。因為最優化的式子變成了

\[\begin

\end

\]對\(\delta x\)求導很容易得到(10)式的結論。

當然,阻尼高斯方法也存在一定的缺陷:\(\mathbf\)矩陣不好計算,可能會花費更多的時間。

前面提到的方法沒有利用到最小二乘問題的形式,我想此方法之所以前面有高斯二字就是因為最小二乘形式的應用吧。

為了使公式看起來盡量簡潔,我們將公式(1)寫成矩陣形式

\[\begin

f()=\fracf(x)^2

\end

\]其中 \(\mathbf(\mathbf)=\left[\begin(\mathbf)} \\ \\ (\mathbf)}\end\right]\),這也是我此前說\(f_i\)也可以將\(x\)對映到\(r^m\)空間中的原因,這種堆疊方式其實與前述的對映在原理上是一致的。

記\[\begin

j_(\mathbf)=\frac(\mathbf)}}=\left[\frac(\mathbf)}} \cdots \frac(\mathbf)}}\right]

\end

\]\[\begin

j(\mathbf)=\left[\begin(\mathbf)}}} & & (\mathbf)}}}\end\right]=\left[\begin(\mathbf)}}} & & (\mathbf)}}} \\ & & \\ (\mathbf)}}} & & (\mathbf)}}}\end\right]

\end

\]則\(j_i(\mathbf)\)是乙個 $ 1 \times n $ 向量,而\(j(x)\)是乙個 $ n \times n $ 矩陣。

將\(f(x)\)進行一階泰勒展開

\[\begin

\end\]則

\[\begin

\end

\]對\(l(\delta x)\)求導並令其為0,則

\[\begin

\frac)}} = f(x)^tj + \delta x^t j^tj

\\ = j^tf(x) + j^tj\delta x = 0

\end

\]可得

\[\begin

\delta x = -(j^tj)^j^tf(x)

\end

\]高斯牛頓法有效的避免了hessian矩陣的計算,可以加快運算速度。

相當於新增阻尼因子,目的是使步長不要太大,起到限制步長的作用。

\[\begin

\end

\]對\(\delta x\)求導之後得到

\[\begin

f(x)^tj +j^tj\delta x+\mu \delta x = 0

\end

\]\[\begin

\\ \delta x = -(j^tj+\mu i)^f(x)^tj

\end

\]當然,這裡的步長都有一定的更新策略,而基本的方法就是上面這些內容。

lm方法在高斯牛頓方法的基礎上新增了正則化約束,能夠權衡步長與非線性程度之間的利弊。當迭代點附近的非線性程度比較高時,傾向於增大阻尼因子而減小步長,此時接近最速下降方法;而當系統近乎線性時,減小阻尼因子而增大步長,此時接近高斯牛頓方法。同時阻尼因子的引入也保證了\((j^tj+\mu i)^\)有意義。

參考文獻

[1] methods for non-linear least squares problems.

非線性最小二乘

非線性最小二乘問題是求解目標引數 的最優值的方法 1.要有待優化的引數x 2.要知道引數與估計值的函式關係 f x 3.要有觀測資料z 4.待優化引數的初值x0 5.待優化引數的範圍 可選 非線性最小二乘問題,可以轉化為非線性優化問題 解非線性最小二乘需要非線性優化演算法 非線性優化演算法最通用的方...

手寫非線性最小二乘

方法1 梯度下降法 include include include include include include include class descent method descent method descent method double a,double b,double c a a b ...

線性回歸 最小二乘求解

線性回歸 線性回歸用於數值 它的主要思想是利用預定的權值將屬性進行線性組合來表示類別 y w0 w1x1 w2x2 wnxn 其中,y是類別屬性值,x1,x2,xn是一般屬性值,w1,w2,xn是權值,w0稱為偏置,類似於一元線性回歸y ax b中b。求解線性回歸就是通過已知的一些資料點 1,xi1...