機器學習-梯度下降

根據採用的機器學習算法,明確算法模型以及損失模型之後,一個重要的問題就是調整模型參數,降低損失。
這就把機器學習的一部分問題轉換爲傳統的最優化問題。常用的方法包括:
- 批量梯度下降
- 隨機梯度下降
- 牛頓法
- Adam
- Adagrad
- …

大部分都還不清楚,就知道名字,後續隨着學習會不斷深入。今天主要考慮最簡單的梯度下降法。
梯度,從數學的角度解釋就是導數,或者更簡單的一種解釋,在二維座標系裏面就是斜率,可以認爲是在當前點上升或者下降最快的方向。推廣到高維空間,即是一個有向的向量方向。
這裏寫圖片描述
圖中所示的點所計算的切線,即是該點的梯度。
爲了更快地減少loss值,只要沿着梯度下降的方向前進,主要步伐足夠下,時間足夠長,肯定能走到一個局部極小的點。
這裏所說是一個局部極小的點,是因爲可能損失函數表現出來不一定只有一個極值,可能存在多個不同的局部極小值。這樣不同的初始點可能會導致下降到不同的極小值位置。

批量梯度下降

批量梯度下降,即是使用全部的數據計算損失函數的梯度。按照之前的定義,損失函數如下:
J(θ)=12i=1m(hθ(xi)yi)2
對於全部m條數據,根據不同的θ 參數得到不同的損失值
針對J(θ)θ 求導,得到
θjJ(θ)=θj12(hθ(x)y)2
θjJ(θ)=212(hθ(x)y)θj(hθ(x)y)
θjJ(θ)=(hθ(x)y)θj(i=0n)(θixiyi)
θjJ(θ)=(hθ(x)y)xj
通過計算梯度,可以得到全部數據在某個參數點上的導數,並根據這個導數前進
批量梯度的一個重要特點就是每次需要同步更新所有的θj
θj:=θj+α(yihθ(xi))xji
其中α 就是學習率,不同的學習率會導致收斂速度的變化。學習率過小會導致需要經過很多次迭代纔可以找到極小點;
學習率過大會導致損失函數值的震盪;
這裏寫圖片描述
這裏寫圖片描述
選擇一個合適的學習率很重要。當然也存在一些策略如step down等幫助用戶方便選擇。
關於梯度下降NG有個形象的比喻,就是一個人在山上某一個點想要到達山底,他環顧四周找到一個看起來下降最大的路徑前進一步,然後重複這一的過程,直到找到一塊平地。
這裏寫圖片描述
我覺得這裏有一點需要補充的,就是山的周圍還存在着戰爭迷霧,人的可視距離有限,只能在一個局部選擇當前位置的最快路徑進行選擇。通過不斷的迭代,人總能找到一個平坦的位置(極值點),迭代過程結束。
以上即是批量梯度下降的過程。從數學理解上比較容易理解,但是在真正的計算過程中,可能由於數據量過大,每次都需要將所有數據全部計算,得到當前梯度,效率會比較低。由此又出現了隨機梯度。

隨機梯度下降

Stochastic Gradient Descent
由於每次計算全部數據導致效率低下,隨機梯度算法解決了這樣一個問題。即每次不是計算全部的數據,而是隨機選擇一條或者若干條(10-1000)數據進行導數的計算。當數據量足夠大,隨機數據的選擇也能在一定程度上體現整體數據的發展方向。仍然拿人在山上的例子舉例,由於在三維空間裏面,只有2個可選維度,用戶每次隨機選擇橫向下降最快的方向或者縱向下降最快的方向。同樣在一定的迭代次數後也能達到尋找極值點的結果。也有人把選擇若干數據的方法叫做小批量梯度下降。

https://developers.google.cn/machine-learning/crash-course/reducing-loss/playground-exercise
這個鏈接裏面google提供了一個簡單的示例,演示了不同學習率下梯度下降導致loss函數變化的結果
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章