机器学习优化算法(一)
總第122篇
前言
我們在前面說過機器學習中的損失函數,其實機器學習中的每一個模型都是在求損失函數的最優解,即讓損失達到最小值/極小值,求解方式有多種,本篇講講其中兩個基本的優化方法:
梯度下降法
牛頓法
梯度下降法
梯度下降法,肯定是利用的梯度的原理,關于梯度的講解推薦大家去看這個視頻:
https://www.bilibili.com/video/av19844108?from=search&seid=1216217609851821464,很生動形象。
1.偏導數與導數不同:
偏導數主要是用來研究多元函數的導數,一個多變量的函數的偏導數是它關于其中一個變量的導數,而保持其他變量恒定不變。現有函數z = f(x,y),下面兩式分別為函數z對x(y保持不變)、z對y(x保持不變)的偏導。
2.偏導的幾何意義:
在一個二維平面內,z對x的偏導表示在該點對x軸的切線斜率,z對y的偏導表示在該點對y軸的切線斜率,分別如下圖所示:
y值保持不變,其實是將X和Z就變成一個一維平面
X值保持不變,其實是將Y和Z就變成一個一維平面。
3.方向導數
上面提到的x軸的偏導數和y軸的偏導數,只是兩個特殊方向的偏導數,實際上在一個二維平面內的一點上可以有多個方向上的偏導數,我們把在其他方向上的偏導數稱為方向導數。
4.梯度
方向導數是在各個方向上都有,而且每個方向上的斜率是不一樣的,對應的變化速度也是不一樣的,那到底沿哪個方向斜率最大,速度最快呢?我們把這個斜率最大,速度最快的方向稱為梯度。
梯度就是將z對x軸的偏導數與z對y軸的偏導數以向量相加的結果。
假設你現在是在一座山的山頂(最高點),你要可能快的走到山底(最低點),你應該往哪個方向走呢,肯定是選擇最陡峭的那個方向走(排除其他風險的情況下),這樣走起來要快。那么該怎么尋找比較陡峭的方向呢?就可以用梯度,但是梯度是表示上升的方向,如果要用來指示下降方向的話,需要加一個負號。
這里有一個問題就是你走一會以后又得重新找當前位置對應的最陡峭的方向,因為你山不可能一條傾斜的直線,最陡峭的方向是固定的,而山是曲線,在不同點處,最陡峭的方向是不一樣的,所以你在走一回以后就需要從新尋找當前位置的最陡峭方向。我們把這個走一會所走的距離稱作步長。
這樣梯度下降的公式就出來了:
Θ0表示在沒有走之前的位置,最開始的話就是山頂的位置,α是步長,?J(Θ)是梯度、即行走方向,-α?J(Θ)表示沿著負梯度方向走了多遠,Θ1表示從起始位置沿著?J(Θ)方向走了α遠以后到達的位置。
利用梯度下降求解最優化問題:
將待求解最優化問題可以轉化為下面函數:
求函數梯度,即對分別求函數的偏導數,結果如下:
初始化起點:
初始化學習率:
進行多次迭代求解:
4.1批量梯度下降(BGD)
最小化所有訓練樣本的損失函數,使得最終求解的是全局的最優解,即求解的參數是使得風險函數最小,但是對于大規模樣本問題效率低下。
4.2隨機梯度下降(SGD)
隨機選擇部門樣本來最小化損失函數,得到的極值是局部最優解,適用于大規模訓練樣本情況。
牛頓法:
牛頓法利用泰勒公式的原理,關于泰勒公式再給大家推薦一個有趣的視頻:https://www.bilibili.com/video/av14431402?from=search&seid=12076814235087445644,原理很清楚,彈幕也有趣。
1.由來
并不是所有的方程都有求根公式,或者求根公式很復雜,導致求解困難。牛頓法就是為了解決這些問題而生的。利用牛頓法,可以迭代求解,讓上面的問題迎刃而解。牛頓法的原理是利用泰勒公式,在x0處展開,且展開到一階,即f(x) = f(x0)+f'(x0)(x-x0)
牛頓法的具體解決方式就是找到與原方程無限類似的函數,這樣新函數的解就可以近似代替原函數的解。
具體的逼近原理就是讓兩個函數p(x)和f(x)在x0處的函數值相等(y值相等),一階導數相等(斜率方向相等),二階導數相等(斜率大小相等),…,n階導數相等,這樣函數p(x)就在點x0處無限接近了函數f(x)。
那么p(x)的函數應該是什么樣子的呢?p(x)函數應該是從f(x)到f(x) n階導數的一個集合,那么該怎么把這些拼湊起來呢?這里需要用到冪函數,主要是因為冪函數有如下特性:
這個特性就是冪函數的指數級對應的階數導數不為0,其他階導數全為0。那么函數p(x)就可以寫成下式:
比如x的平方的二階導數不為0,其他階導數全為0.
函數p(x)在x0的值為a0,就是f(x0),函數p(x)在x0處的一階導為a1,函數p(x)在x0處的二階導為a2,…函數p(x)在x0處的n階導為an。
式中Rn(x)是函數f(x)在任意點x與x0處的誤差。這樣就得出了函數f(x)的泰勒公式,即與f(x)無限接近的p(x)函數。
2.利用牛頓法求解最優化問題思路:
已知函數待求解最優化問題可以轉化為求函數f(x)的極值,求f(x)的極值可以轉化為求f(x)的導數 φ′(x)=0的解。即:
求解得:
于是,隨機選擇一個初始點x0,然后即可利用下式進行迭代求解:
通過不停迭代k值來求取f(x)的極小點。
上面討論的是二維情況,二階泰勒展開式變為:
其中▽f為f的梯度向量(對于多元函數來說,一階導數就是偏導),▽2f為f的海森矩陣,其定義如下:
注意,▽f和▽2f中的元素均為關于X的函數,以下簡記為g和H.特別是若f的混合偏導數可交換次序,則海森矩陣為對稱矩陣。而▽f(Xk)和▽2f(Xk)則表示將X取為xk后得到的實值向量和矩陣,以下分別將其簡記為gk和Hk。同樣的,由于是求極小點,極值必要條件 要求它為φ(X)的駐點,即:
通過在上式中兩邊作用一個梯度算子,得到:
此時若矩陣Hk非奇異,可解得:
若給定初始值X0,則可同樣構造出迭代格式:
其中下式為海森矩陣的逆矩陣,每次迭代時都需要計算一遍:
這就是牛頓迭代法,其中迭代方向為:
稱為牛頓方向。
引用自:https://blog.csdn.net/lilong117194/article/details/78111779
梯度下降法 vs 牛頓法
從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之后,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全局思想。)
根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。
紅色為牛頓法,綠色為梯度下降引用自:https://www.cnblogs.com/shixiangwan/p/7532830.html
參考文章:
https://www.jianshu.com/p/c7e642877b0e
https://www.cnblogs.com/shixiangwan/p/7532830.html
https://blog.csdn.net/lilong117194/article/details/78111779
總結
以上是生活随笔為你收集整理的机器学习优化算法(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构—树与二叉树
- 下一篇: 我又送书了