本文參考 https://www.cnblogs.com/pinard/p/5970503.html 的文章,轉(zhuǎn)載需注明原作者蝶涩。
這一節(jié)我們?yōu)樘荻认陆捣ń议_神秘的面紗饥漫。
在求解機器學習算法的模型參數(shù)皆撩,即無約束優(yōu)化問題時捍壤,梯度下降法(Gradient Descent)是最常用的方法之一。另外常用的是最小二乘法栈妆。
1. 梯度
首先我們來認識一下什么叫做梯度胁编。
在微積分中,對多元函數(shù)的參數(shù)求偏導數(shù)鳞尔,把求得的各個參數(shù)的偏導數(shù)以向量的形式寫出來嬉橙,就是梯度。如f(x,y)寥假,其梯度向量就是(?f/?x, ?f/?y)T市框,簡稱grad f(x,y)。
梯度向量的幾何意義糕韧,就是代表了函數(shù)變化最快的方向枫振。這里可以這樣理解喻圃,一個函數(shù)在某一個方向上的方向向量為 grad*cos?,于是梯度就代表了其變化最快的方向粪滤。
即沿著梯度向量的方向斧拍,就是函數(shù)增加最快的方向,更容易找到函數(shù)的最大值杖小。這是整個梯度下降法的基本思想肆汹。
2. 梯度下降與梯度上升
在機器學習中,我們需要對損失函數(shù)求最小化予权,這時候我們通過梯度下降法來一步步迭代求解昂勉。同樣的,做一個變化可以反過來求解損失函數(shù) -f(θ) 的最大值扫腺,這時候就轉(zhuǎn)化為了梯度上升法岗照。
簡單來說,就是上山和下山的關系笆环。
3. 梯度下降法詳解
3.1 梯度下降的直觀理解
這里的一個直觀解釋攒至,就是理解成為下山問題。
我們在一座大山的某個位置咧织,這個時候不知道下山的路線,只能“走一步算一步”籍救,每一步都按照當前最陡的方向下山习绢,即梯度負方向;然后在下一個點繼續(xù)計算當前梯度調(diào)整方向蝙昙,繼續(xù)走下一步闪萄,直到我們覺得已經(jīng)走下了山。
當然這樣的方法奇颠,有可能使得我們沒有走下山败去,而是走到了某個山谷處。這就是局部最優(yōu)解和全局最優(yōu)解之間的關系烈拒。
3.2 梯度下降的相關概念
在詳細了解之前圆裕,我們需要了解一些概念。
- 步長(Learning Rate):步長即為我們通常理解的步長荆几。其決定了沿著梯度負方向與移動的長度吓妆。對應上面下山的例子就是每一步走多少。
- 特征(Feature):指的是樣本的輸入吨铸,即屬性行拢。
- 假設函數(shù)(Hypothesis Function):監(jiān)督學習中,用于擬合輸入樣本而假設的擬合函數(shù)诞吱。比如在線性模型中舟奠,假設函數(shù)就是輸入屬性的線性組合函數(shù)竭缝。例如:f(x)=w_1x_1+w_2x_2+...+
-
損失函數(shù)(Loss Function):線性模型中的損失函數(shù):
3.3 梯度下降的詳細計算
詳細計算有兩種表示:代數(shù)法和矩陣法。代數(shù)法更加容易理解沼瘫,但是在單屬性樣本時更加實用抬纸;遇到多屬性樣本時候,矩陣法更加實用而且好計算晕鹊。
3.3.1 梯度下降法的代數(shù)描述
-
先決條件:確定待優(yōu)化模型的假設函數(shù)和損失函數(shù)松却。
拿線性回歸為例子,假設函數(shù)為(θi是參數(shù)模型):
增加一個特征 x_0=1,則有:
對應上面的假設函數(shù)溅话,損失函數(shù)為(這里的2m就是求一下平均而已):
-
參數(shù)初始化:主要是初始化模型參數(shù)θi晓锻,算法終止距離ε ,步長α飞几。
在沒有任何先驗知識的情況下砚哆,我們可以把θi初始化為0,將步長初始化為1屑墨,然后在調(diào)優(yōu)的時候再優(yōu)化躁锁。 - 算法過程:
這里是對于損失函數(shù)求最值,所以是針對損失函數(shù)來做梯度下降
(1) 確定損失函數(shù)的梯度 卵史,即對θi求偏導:
(2) 用步長乘以損失函數(shù)的梯度战转,就是當前位置下降的距離,對應于下山例子中的一步以躯。
(3) 考察停止條件槐秧。對于所有的參數(shù)θi,是否梯度下降的距離都小于 算法終止距離ε忧设,滿足則停止迭代刁标。反之進入下一步
(4) 更新所有的 θi,然后轉(zhuǎn)到第一步址晕。
需要注意的是:當前點的梯度是由所有樣本決定的膀懈。至于樣本的選擇,下面會介紹到谨垃。
3.3.2 矩陣描述
只是把上面的換成了矩陣表示启搂。其中涉及矩陣運算。具體見原帖中推導刘陶。
3.4 梯度下降的算法調(diào)優(yōu)
使用梯度下降法時狐血,需要進行調(diào)優(yōu)。
1. 步長選擇易核。
前面的計算中匈织,我們默認取步長為1,但是實際上步長的選取和實際樣本取值有關。我們需要多取幾個步長缀匕,運行梯度下降纳决,如果損失函數(shù)在減小就說明這個步長是有效的。
步長太大導致可能錯過最優(yōu)解乡小,太小收斂太慢阔加。
2. 參數(shù)的初始值選擇
由于可能陷入局部最優(yōu)解,之前也說過满钟,一個可行的做法就是多試集中初始值胜榔。就好像剛剛下山問題中,從不同的地方開始下山湃番。
3. 歸一化
不同特征的取值量綱不同夭织,導致迭代速度慢,我們可以對特征取值進行歸一化吠撮。對于每個特征x尊惰,求出他的期望 和 標準差,轉(zhuǎn)化為:
這樣特征的新的期望為0泥兰,新的方差為1弄屡,迭代次數(shù)可以大大加快。
4. 梯度下降法大家族(BGD鞋诗,SGD膀捷,MBGD)
這里需要注意的是,所有梯度下降法的基本思想和步驟都是一樣的削彬,不同之處在于不同形式的GD如何選取樣本全庸。
4.1 批量梯度下降法(Batch Gradient Descent)
批量梯度下降法,是梯度下降法中最常用的形式吃警。具體做法就是在更新參數(shù)時 使用所有的樣本來進行更新糕篇。
4.2 隨機梯度下降法(Stochastic Gradient Descent)
隨機梯度下降法啄育,在求梯度時沒有用所有m個樣本數(shù)據(jù)酌心,而是選取了一個樣本 j 來求梯度,對應的更新公式:
這里可以看出挑豌,隨機梯度下降法SGD和BGD是兩個極端安券,一個選擇了一個樣本,另外一個選擇了所有的樣本氓英。各自的優(yōu)缺點都很突出侯勉,從訓練速度和訓練精度上面可以很好的區(qū)分。
那么有沒有一種比較折中的辦法呢铝阐?有
4.3 小批量梯度下降法(Mini-batch Gradient Descent)
對于m個樣本址貌,我們采用x個子樣本來迭代,1<x<m。一般可以取x=10练对,需要根據(jù)具體的樣本數(shù)量來調(diào)整取得樣本數(shù)量遍蟋,對應的更新公式:
5. 梯度下降法和其他無約束優(yōu)化算法的比較
機器學習中的無約束優(yōu)化算法,有梯度下降法螟凭、最小二乘法虚青、牛頓法、擬牛頓法螺男。
梯度下降法和最小二乘法相比棒厘,梯度下降法需要選擇步長,而最小二乘法不需要下隧。梯度下降法是計算迭代解奢人,最小二乘法是計算解析解。如果樣本量不大而且存在解析解汪拥,最小二乘法是更加具有優(yōu)勢的达传,計算速度快。但是如果樣本量很大迫筑,用最小二乘法需要計算一個超級大的逆矩陣宪赶,這時候就很慢,很難求解脯燃。
梯度下降法和牛頓法/擬牛頓法相比搂妻,兩者都是迭代求解,不過梯度下降法是梯度求解辕棚,而牛頓法/擬牛頓法是用二階的海森矩陣的逆矩陣或偽逆矩陣求解欲主。相對而言,使用牛頓法/擬牛頓法收斂更快逝嚎。但是每次迭代的時間比梯度下降法長扁瓢。
牛頓法不懂