敏捷在軟件開發過程當中是一個很是著名的術語,它背後的基本思想很簡單:快速構建一些東西,而後獲得一些反饋,根據反饋作出改變,重複此過程。目標是讓產品更貼合用,讓用戶作出反饋,以得到設計開發出的產品與優秀的產品兩者之間偏差最小,梯度降低算法背後的原理和這基本同樣。算法
梯度降低算法是一個迭代過程,它將得到函數的最小值。下面的公式將整個梯度降低算法彙總在一行中。網絡
可是這個公式是如何得出的呢?實際上很簡單,只須要具有一些高中的數學知識便可理解。本文將嘗試講解這個公式,並以線性迴歸模型爲例,構建此類公式。機器學習
Y=mX+b
,其中m
是斜率,b
是其在Y軸的截距。預測函數
給定一組已知的輸入及其相應的輸出,機器學習模型試圖對一組新的輸入作出一些預測。性能
兩個預測之間的差別即爲錯誤。學習
這涉及成本函數或損失函數的概念(cost function or loss function)。優化
成本函數/損失函數用來評估機器學習算法的性能。兩者的區別在於,損失函數計算單個訓練示例的錯誤,而成本函數是整個訓練集上錯誤的平均值。spa
成本函數基本上能告訴咱們模型在給定m和b的值時,其預測能「有多好」。設計
比方說,數據集中總共有N
個點,咱們想要最小化全部N
個數據點的偏差。所以,成本函數將是總平方偏差,即3d
爲何採起平方差而不是絕對差?由於平方差使得導出迴歸線更容易。實際上,爲了找到這條直線,咱們須要計算成本函數的一階導數,而計算絕對值的導數比平方值更難。
任何機器學習算法的目標都是最小化成本函數。
這是由於實際值和預測值之間的偏差對應着表示算法在學習方面的性能。因爲但願偏差值最小,所以儘可能使得那些m
和b
值可以產生儘量小的偏差。
仔細觀察上述的成本函數,其形式爲Y=X²
。在笛卡爾座標系中,這是一個拋物線方程,用圖形表示以下:
爲了最小化上面的函數,須要找到一個x
,函數在該點能產生小值Y
,即圖中的紅點。因爲這是一個二維圖像,所以很容易找到其最小值,可是在維度比較大的狀況下,狀況會更加複雜。對於種狀況,須要設計一種算法來定位最小值,該算法稱爲梯度降低算法(Gradient Descent)。
梯度降低是優化模型的方法中最流行的算法之一,也是迄今爲止優化神經網絡的最經常使用方法。它本質上是一種迭代優化算法,用於查找函數的最小值。
假設你是沿着下面的圖表走,目前位於曲線'綠'點處,而目標是到達最小值,即紅
點位置,但你是沒法看到該最低點。
可能採起的行動:
從本質上講,你應該知道兩件事來達到最小值,即走哪條和走多遠。
梯度降低算法經過使用導數幫助咱們有效地作出這些決策。導數是來源於積分,用於計算曲線特定點處的斜率。經過在該點處繪製圖形的切線來描述斜率。所以,若是可以計算出這條切線,可能就可以計算達到最小值的所需方向。
在下圖中,在綠點處繪製切線,若是向上移動,就將遠離最小值,反之亦然。此外,切線也能讓咱們感受到斜坡的陡峭程度。
藍點處的斜率比綠點處的斜率低,這意味着從藍點到綠點所需的步長要小得多。
如今將上述內容歸入數學公式中。在等式y=mX+b
中,m
和b
是其參數。在訓練過程當中,其值也會發生微小變化,用δ
表示這個小的變化。參數值將分別更新爲m = m-δm
和b = b-δb
。最終目標是找到m
和b
的值,以使得y=mx+b
的偏差最小,即最小化成本函數。
重寫成本函數:
想法是,經過計算函數的導數/斜率,就能夠找到函數的最小值。
達到最小值或最低值所採起的步長大小稱爲學習率。學習率能夠設置的比較大,但有可能會錯過最小值。而另外一方面,小的學習率將花費大量時間訓練以達到最低點。
下面的可視化給出了學習率的基本概念。在第三個圖中,以最小步數達到最小點,這代表該學習率是此問題的最佳學習率。
從上圖能夠看到,當學習率過低時,須要花費很長訓練時間才能收斂。而另外一方面,當學習率過高時,梯度降低未達到最小值,以下面所示:
機器學習在優化問題中使用導數。梯度降低等優化算法使用導數來決定是增長仍是減小權重,進而增長或減小目標函數。
若是可以計算出函數的導數,就能夠知道在哪一個方向上能到達最小化。
主要處理方法源自於微積分中的兩個基本概念:
舉個例子增強理解:
使用指數法則和鏈式發規,計算成本函數相對於m和c的變化方式。這涉及偏導數的概念,即若是存在兩個變量的函數,那麼爲了找到該函數對其中一個變量的偏導數,需將另外一個變量視爲常數。舉個例子增強理解:
如今將這些微積分法則的知識應用到原始方程中,並找到成本函數的導數,即m
和b
。修改爲本函數方程:
爲簡單起見,忽略求和符號。求和部分其實很重要,尤爲是隨機梯度降低(SGD)與批量梯度降低的概念。在批量梯度降低期間,咱們一次查看全部訓練樣例的錯誤,而在SGD中一次只查看其中的一個錯誤。這裏爲了簡單起見,假設一次只查看其中的一個錯誤:
如今計算偏差對m和b的梯度:
將值對等到成本函數中並將其乘以學習率:
其中這個等式中的係數項2是一個常數,求導時並不重要,這裏將其忽略。所以,最終,整篇文章歸結爲兩個簡單的方程式,它們表明了梯度降低的方程。
其中m¹
,b¹
是下一個位置的參數;m⁰
,b⁰
是當前位置的參數。
所以,爲了求解梯度,使用新的
m
和b
值迭代數據點並計算偏導數。這個新的梯度會告訴咱們當前位置的成本函數的斜率以及咱們應該更新參數的方向。另外更新參數的步長由學習率控制。
本文的重點是展現梯度降低的基本概念,並以線性迴歸爲例講解梯度降低算法。經過繪製最佳擬合線來衡量學生身高和體重之間的關係。可是,這裏爲了簡單起見,舉的例子是機器學習算法中較簡單的線性迴歸模型,讀者也能夠將其應用到其它機器學習方法中。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。