LM算法——列文伯格-马夸尔特算法(最速下降法,牛顿法,高斯牛顿法)(完美解释负梯度方向)
首先談一下應用場景——在擬合的時候進行應用
什么是擬合?你有一堆數據點,我有一個函數,但是這個函數的很多參數是未知的,我只知道你的這些數據點都在我的函數上,因此我可以用你的數據點來求我的函數的未知參數。例如:matlab中的fit函數
最小二乘法天生就是用來求擬合的,看函數和數據點的逼近關系。它通過最小化誤差的平方和尋找數據的最佳函數匹配進行求解。
擬合我們可以認為是一種試探性的方法,這種方法在計算機出來以前很多情況下是不可能實現的,為什么,因為公式涉及了大量的迭代過程,也就是我想要通過數據點求函數的參數,沒有解析解能夠直接代入數據求得參數,而是通過一點一點的摸索嘗試,最終得到最小誤差也就是最好擬合。最具有代表性的就是暴風法,把所有可能的結果都帶進去,找到最好的擬合。然后聰明的人類不想這么魯莽,并且這么無目的地尋找,于是人們開始研究參數向什么方向迭代是最好的,于是便出現了梯度方向等一系列方法。
有最速下降法、Newton 法、GaussNewton(GN)法、Levenberg-Marquardt(LM)算法等。
| 最速下降法 | 負梯度方向,收斂速度慢 |
| Newton 法 | 保留泰勒級數一階和二階項,二次收斂速度,但每步都計算Hessian矩陣,復雜 |
| GN法 | 目標函數的Jacobian 矩陣近似H矩陣,提高算法效率,但H矩陣不滿秩則無法迭代 |
| LM法 | 信賴域算法,解決H矩陣不滿秩或非正定, |
通過對比的形式想必大家已經記住了這一堆優化的方法,很多情況下使用中都是優化方法的改進方法,因此掌握了這些方法,改進方法也不是太難了。
這里還想說明一點上面的最速下降法,很多人都在問的一個問題,為什么最速下降方向取的負梯度方向???為什么?這個可以看我們求導數的時候(梯度和導數的關系完美解析在我之前的博文中),
其實我們從圖中不難看出,左側,y隨著x增加時,導數為正,因此導數的方向我們可以定義為指向x正方向,x與導數同向也就是x也逐漸增加時,函數是增大的。右側,y隨x增加而較小,導數為負,我們這里還定義導數的方向此時指向x負半軸,因此x沿負方向減小時,函數值是逐漸增大的,這里需要記住和注意,沿著導數方向,我們的函數值是逐漸增大的。
解釋清了上面一點,我們就可以再升幾維,在一維時我們的方向只能談論左右,而上升到二維時,我們的方向就成了平面的360度了,此時就引出了梯度,下圖是二維梯度
其實我們還是可以看出,梯度就是由導數組成的,完全可以說成是多維導數,而在一維導數存在的性質,上升了維度,我們的本質是不變的,因此我們只需要沿著每個維度的導數方向變化,我們的函數值就會增加。這里有個證明,沿梯度是增加最快的,我們可以引入方向導數,方向導數定義的在點P,沿某一方向的變化率。
求變化率我們就需要公平一點,各方向變化的尺寸是相同的,可以寫一個圓,
半徑為
ρ=(Δx)2+(Δy)2\rho =\sqrt{{{\left( \Delta x \right)}^{2}}+{{\left( \Delta y \right)}^{2}}}ρ=(Δx)2+(Δy)2?
變化為
f(x+Δx,y+Δy)?f(x,y)ρ\frac{f\left( x+\Delta x,y+\Delta y \right)-f\left( x,y \right)}{\rho }ρf(x+Δx,y+Δy)?f(x,y)?
變化率為(率這里需要加極限的概念,為什么?因為我們無法容忍一個我們沒有明確定義數值的量 ρ\rhoρ)
lim?ρ→0 f(x+Δx,y+Δy)?f(x,y)ρ\underset{\rho \to 0}{\mathop{\lim }}\,\frac{f\left( x+\Delta x,y+\Delta y \right)-f\left( x,y \right)}{\rho }ρ→0lim?ρf(x+Δx,y+Δy)?f(x,y)?
其中
f(x+Δx,y+Δy)?f(x,y)=?f?x?Δx+?f?y?Δy+°(ρ)f\left( x+\Delta x,y+\Delta y \right)-f\left( x,y \right)=\frac{\partial f}{\partial x}\centerdot \Delta x+\frac{\partial f}{\partial y}\centerdot \Delta y+\circ \left( \rho \right)f(x+Δx,y+Δy)?f(x,y)=?x?f??Δx+?y?f??Δy+°(ρ)
兩邊同時除以ρ\rhoρ
f(x+Δx,y+Δy)?f(x,y)ρ=?f?x?Δxρ+?f?y?Δyρ+°(ρ)ρ=?f?x?cos?θ+?f?y?sin?θ+°(ρ)ρ\begin{aligned} & \frac{f\left( x+\Delta x,y+\Delta y \right)-f\left( x,y \right)}{\rho }=\frac{\partial f}{\partial x}\centerdot \frac{\Delta x}{\rho }+\frac{\partial f}{\partial y}\centerdot \frac{\Delta y}{\rho }+\frac{\circ \left( \rho \right)}{\rho } \\ & =\frac{\partial f}{\partial x}\centerdot \cos \theta +\frac{\partial f}{\partial y}\centerdot \sin \theta +\frac{\circ \left( \rho \right)}{\rho } \end{aligned}?ρf(x+Δx,y+Δy)?f(x,y)?=?x?f??ρΔx?+?y?f??ρΔy?+ρ°(ρ)?=?x?f??cosθ+?y?f??sinθ+ρ°(ρ)??
lim?ρ→0 f(x+Δx,y+Δy)?f(x,y)ρ=?f?x?cos?θ+?f?y?sin?θ\underset{\rho \to 0}{\mathop{\lim }}\,\frac{f\left( x+\Delta x,y+\Delta y \right)-f\left( x,y \right)}{\rho }=\frac{\partial f}{\partial x}\centerdot \cos \theta +\frac{\partial f}{\partial y}\centerdot \sin \thetaρ→0lim?ρf(x+Δx,y+Δy)?f(x,y)?=?x?f??cosθ+?y?f??sinθ
上式可以進一步改寫為
lim?ρ→0 f(x+Δx,y+Δy)?f(x,y)ρ=?f?x?cos?θ+?f?y?sin?θ={?f?x,?f?y}?(cos?θ,sin?θ)=∣gradf(x,y)∣cos?(gradf(x,y),(cos?θ,sin?θ))\begin{aligned} & \underset{\rho \to 0}{\mathop{\lim }}\,\frac{f\left( x+\Delta x,y+\Delta y \right)-f\left( x,y \right)}{\rho }=\frac{\partial f}{\partial x}\centerdot \cos \theta +\frac{\partial f}{\partial y}\centerdot \sin \theta \\ & =\left\{ \frac{\partial f}{\partial x},\frac{\partial f}{\partial y} \right\}\centerdot \left( \cos \theta ,\sin \theta \right) \\ & =\left| gradf\left( x,y \right) \right|\cos \left( gradf\left( x,y \right),\left( \cos \theta ,\sin \theta \right) \right) \end{aligned}?ρ→0lim?ρf(x+Δx,y+Δy)?f(x,y)?=?x?f??cosθ+?y?f??sinθ={?x?f?,?y?f?}?(cosθ,sinθ)=∣gradf(x,y)∣cos(gradf(x,y),(cosθ,sinθ))?
可以看出要想cos值最大,gradf(x,y)和(cosθ,sinθ)需要同方向,而(cosθ,sinθ)就是我們下一步將要行進的方向。
到此便可以說,我們行進的方向和我們的梯度方向一致時,函數增長最快,方向相反時,函數下降最快。
有一個文獻寫的不錯,推薦一下,不過說明,本文并沒有進行參考
Wilamowski, B. M., & Yu, H. (2010). Improved computation for Levenberg–Marquardt training. IEEE transactions on neural networks, 21(6), 930-937.
總結
以上是生活随笔為你收集整理的LM算法——列文伯格-马夸尔特算法(最速下降法,牛顿法,高斯牛顿法)(完美解释负梯度方向)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 循序渐进PYTHON3(十三) --4-
- 下一篇: 芯片面积估计方法