目錄對於形如(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...