梯度降低是迭代法的一種,能夠用於求解最小二乘問題(線性和非線性均可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度降低(Gradient Descent)是最常採用的方法之一,另外一種經常使用的方法是最小二乘法。在求解損失函數的最小值時,能夠經過梯度降低法來一步步的迭代求解,獲得最小化的損失函數和模型參數值。反過來,若是咱們須要求解損失函數的最大值,這時就須要用梯度上升法來迭代了。在機器學習中,基於基本的梯度降低法發展了兩種梯度降低方法,分別爲隨機梯度降低法和批量梯度降低法。html
簡單地說,梯度降低就是沿着沿梯度降低的方向求解極小值時的自變量。算法
關於梯度的知識可參考《多變量微積分5——梯度與方向導數》機器學習
二元函數w(x,y) = (x – 10)2 + (y – 10)2,其梯度:函數
若是在w上選取一點(xn, yn),w沿着梯度降低方向,在x方向上的變化率:學習
自變量x沿着梯度降低方向的變化:優化
反覆迭代,在達到臨界點時,就可求得w在極小值時的x;同理可求得在極小值時的y。spa
問題是這樣作實在太慢,迭代過程及其耗時,因此人們在此基礎上設計出更加快速的處理辦法——捨棄精確值,求得可接受的近似值。.net
實際應用中,梯度降低法增長了「學習率」的概念:設計
上式中的α就是學習率,也稱爲「步長」。梯度降低算法每次迭代,都會受到學習速率α的影響。偏導指明瞭變化的方向,而學習率則指明變化的步伐,實際上每次迭代一下,就能夠更換一個新的α,只是爲了方便才用一個。htm
本節剩餘內容摘自 https://blog.csdn.net/chenguolinblog/article/details/52138510
若是α較小,則達到收斂所須要迭代的次數就會很是高;若是α較大,則每次迭代可能不會減少代價函數的結果,甚至會超過局部最小值致使沒法收斂。以下圖所示狀況:
根據經驗,能夠從如下幾個數值開始試驗α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …
α初始值位0.001, 不符合預期乘以3倍用0.003代替,不符合預期再用0.01替代,如此循環直至找到最合適的α,而後對於這些不一樣的 α 值,繪製 J(θ)隨迭代步數變化的曲線,而後選擇看上去使得 J(θ)快速降低的一個α值。觀察下圖,能夠發現這2種狀況下代價函數 J(θ)的迭代都不是正確的:
根據經驗,能夠從如下幾個數值開始試驗α的值,0.001 ,0.003, 0.01, 0.03, 0.1, 0.3, 1, …
α初始值位0.001, 不符合預期乘以3倍用0.003代替,不符合預期再用0.01替代,如此循環直至找到最合適的α,而後對於這些不一樣的 α 值,繪製 J(θ)隨迭代步數變化的曲線,而後選擇看上去使得 J(θ)快速降低的一個α值。觀察下圖,能夠發現這2種狀況下代價函數 J(θ)的迭代都不是正確的:
第一幅圖,曲線在上升,明顯J(θ)的值變得愈來愈大,說明應該選擇較小的α
第二幅圖,J(θ)的曲線,先降低,而後上升,接着又降低,而後又上升,如此往復。一般解決這個問題,仍是選取較小的α。
若是機器學習算法的假設函數(hypothesis function) hθ(x)以下:
hθ(x) 是線性迴歸模型,設x0= 1,θ是權重,每一個訓練樣本有n個特徵,即訓練樣本是n維數據。對於初始權重,可所有設爲一個常數。
對於給定的訓練集,目標是找到最佳的hθ(x)以擬合最多數據,此時損失函數J(θ),也就是機器學習策略函數達到最小。若是所有預測正確,則對於全部訓練數據都有hθ(x) – y =0
若是用平方和定義J(θ),則:
上式表示共有m訓練樣本,y表示實際結果,上標表示第i個訓練樣本,hθ(x(i)) - y(i) 表示在訓練集的第i個樣本中,預測結果與實際結果的差值。前面加上1/2是爲了在求導時使J(θ)簡化,在後續推導中能夠看到。
假設m = 1,即僅有一個訓練樣本,此時:
目標是使J(θ)達到最小,因爲x和y已知,此時的 θ 值即爲所求參數,根據梯度降低法:
當i = 1時,第一個權重:
根據鏈式求導法則計算偏導(可參考《多變量微積分》的相關章節):
推廣至m個訓練樣本,對於任意θ,梯度降低迭表明達式爲:
若是令θ是n維向量,可將上式化簡:
若是用矩陣表示,梯度降低能夠更加簡潔:
當梯度降低到必定數值後,每次迭代的變化很小,這時能夠設定一個閾值,只要變化小於該閾值,就中止迭代,而獲得的結果也近似於最優解。須要注意的是,在新一輪迭代時,由於θ已經獲得了更新,因此將使用新的hθ
以二元特徵爲例,下面是正確作法和錯誤作法的對比:
上面對於權重的推導過程就是批量梯度降低法,每一次迭代都要遍歷全部訓練樣本,不適用於訓練樣本數量極多的狀況,因而提出了隨機梯度降低。
優勢:全局最優解;易於並行實現;
缺點:當樣本數目不少時,訓練過程會很慢。
隨機梯度降低法,其實和批量梯度降低法原理相似,區別在與求梯度時沒有用全部的m個樣本的數據,而是每次僅僅選取第 i 個隨機樣原本求梯度:
i 不是定值,在每次迭代時都從新選取。隨機梯度降低法速度比批量梯度降低快了不少。隨機梯度降低的每次迭代,有可能變大或變小,但整體趨勢接近全局最優解,一般參數值會十分接近最小值。
優勢:訓練速度快;
缺點:準確度降低,並非全局最優;不易於並行實現。
小批量梯度降低法是批量梯度降低法和隨機梯度降低法的折衷,也就是對於m個樣本,咱們採用其中的k個來迭代,1<k<m。通常能夠取x=10,固然根據樣本的數據,能夠調整k的值:
優勢:兩種算法的折中;
缺點:兩種算法的折中。
若是樣本量比較小,採用批量梯度降低算法。若是樣本太大,或者在線算法,使用隨機梯度降低算法。在通常狀況下,採用小批量梯度降低算法。
梯度降低法和最小二乘法相比,梯度降低法須要選擇步長,而最小二乘法不須要。梯度降低法是迭代求解,最小二乘法是計算解析解。若是樣本量不算很大,且存在解析解,最小二乘法比起梯度降低法要有優點,計算速度很快。可是若是樣本量很大,用最小二乘法因爲須要求一個超級大的逆矩陣,這時就很難或者很慢才能求解解析解了,使用迭代的梯度降低法比較有優點。最小二乘法可參考《多變量微積分筆記2——最小二乘法》。
做者:我是8位的
出處:http://www.cnblogs.com/bigmonkey
本文以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,非商業用途!
掃描二維碼關注公衆號「我是8位的」