机器学习——梯度下降算法
文章目錄
- 梯度下降算法
- 概念
- 前提條件
- 目標函數
- 訓練集
- 訓練步驟
- 代碼表示
- 梯度下降的算法調優
- 總結
梯度下降算法
最優化算法在機器學習中是一種求解最合適的權重參數的算法,梯度下降算法就是其中的一種。
概念
梯度下降算法是一個最優化的算法,它是沿梯度下降的方向求解極小值。
前提條件
目標函數
使用梯度下降算法的第一個前提條件就是目標函數,即告訴梯度下降要求哪個函數的解,例如在線性回歸方程中求解最小二乘法的公式:
這個公式在線性回歸中的最終目的,就是求偏導取駐點最后得到θ的一個極小值。而在這里則是利用梯度下降算法去求得最小值。
訓練集
這個目標函數和線性回歸方程相比在分母處多了一個m。這個m是一個總的數據量,意味著是求多個數據之后的平均值。
第二個前提條件就是數據集,有了目標函數,還必須有數據支撐。只有有了大量的數據,機器才能夠真正的掌握規律。
最終的目的就是求得使這個目標函數最小(或局部最小)的參數θ。
訓練步驟
上圖是一個梯度下降的模型。想要理解這個模型,可以假想一個人站在山的任意一點,想要以最快的速度下山。求解的步驟如下所示:
學習率的選擇可以通過下圖來說明:
假設從左邊最高點開始,如果學習率剛剛合適,例如圖中紅線,就能順利找到最低點;如學習率調整的太小,比如藍色的線就會走的太慢,雖然也可以順利找出最低點,但實際情況中可能等不及出結果;如果學習率稍大,可能會在上面震蕩永遠到達不了最低點;若是選取的非常大,比如黃色的線可能直接無法收斂,update參數時可能會發現損失函數越更新越大。
還有一點值得注意,學習率并不是一成不變的,可能剛開始時候大一些,后邊不斷調小。
數據集的輸入一般有三種:批量梯度下降(每調整一小步,帶入所有的數據,這樣的訓練應該是最精確的,但是往往速度奇慢無比)、隨機梯度下降(每次隨機獲取數據集中的一個值,速度很快但是不夠精確)、小批量隨機梯度下降(前兩者的中間產物,速度相對較快結果也相對精確)。
代碼表示
梯度下降的算法用偽碼表示為:
repeat until convergence{θj := θj - α * δ/δθj * J(θ0, θ1) }(simultaneously update j =0 and j = 1)temp0 = θ0 - α * δ/δθ0 * J(θ0) temp1 = θ1 - α * δ/δθ1 * J(θ1)θ0 := temp0 θ1 := temp1α代表了學習率,θj表示為有多個特征,這里是對每一個特征求偏導求出分別對應的參數。多個特征需要分別各自訓練。
以上就是整個梯度下降算法的基本知識。
梯度下降的算法調優
在前文描述的算法中,步長的實際取值取決于數據樣本,可以多取一些分別運行比較迭代效果。
初始值不同,獲得的最小值也有可能不同,當然如果損失函數是凸函數,則一定是最優解。由于有局部最優解的風險,需要多次不同初始值運行算法,使關鍵損失函數取最小值、選擇損失函數去最小值的初值。
由于樣本不同特征的取值范圍不一樣,可能導致迭代速度很慢,為了減少特征取值的影響,可以對特征數據歸一化求出期望和標準差,然后轉化成期望和標準差的比值,可以加快迭代速度。
總結
梯度下降法的含義是通過當前的梯度方向尋找新的迭代點,并從當前點移動到新的迭代點繼續尋找新的迭代點,直到找到最優解。在其算法過程中,只需要求解損失函數的一階導數,計算成本很小。相比于最小二乘法,梯度下降需要選擇步長,而最小二乘法不需要。同時,最小二乘法是計算解析解,如果樣本量不算很大,且存在解析解,最小二乘法才會占有優勢。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的机器学习——梯度下降算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习——线性回归数学推导
- 下一篇: 机器学习——逻辑回归算法