梯度下降(Gradient Descent)算法是機器學習中使用非常廣泛的優化算法。當前流行的機器學習庫或者深度學習庫都會包括梯度下降算法的不同變種實現。
本文主要以線性回歸算法損失函數求極小值來說明如何使用梯度下降算法并給出python實現。若有不正確的地方,希望讀者能指出。
梯度下降
梯度下降原理:將函數比作一座山,我們站在某個山坡上,往四周看,從哪個方向向下走一小步,能夠下降的最快。
在線性回歸算法中,損失函數為
在求極小值時,在數據量很小的時候,可以使用矩陣求逆的方式求最優的θ值。但當數據量和特征值非常大,例如幾萬甚至上億時,使用矩陣求逆根本就不現實。而梯度下降法就是很好的一個選擇了。
使用梯度下降算法的步驟:
1)對θ賦初始值,這個值可以是隨機的,也可以讓θ是一個全零的向量。
2)改變θ的值,使得目標損失函數J(θ)按梯度下降的方向進行減少。
其中為學習率或步長,需要人為指定,若過大會導致震蕩即不收斂,若過小收斂速度會很慢。
3)當下降的高度小于某個定義的值,則停止下降。
另外,對上面線性回歸算法損失函數求梯度,結果如下:
在實際應用的過程中,梯度下降算法有三類,它們不同之處在于每次學習(更新模型參數)使用的樣本個數,每次更新使用不同的樣本會導致每次學習的準確性和學習時間不同。下面將分別介紹原理及python實現。
批量梯度下降(Batch gradient descent)
每次使用全量的訓練集樣本來更新模型參數,即給定一個步長,然后對所有的樣本的梯度的和進行迭代:
梯度下降算法最終得到的是局部極小值。而線性回歸的損失函數為凸函數,有且只有一個局部最小,則這個局部最小一定是全局最小。所以線性回歸中使用批量梯度下降算法,一定可以找到一個全局最優解。
優點:全局最優解;易于并行實現;總體迭代次數不多
缺點:當樣本數目很多時,訓練過程會很慢,每次迭代需要耗費大量的時間。
隨機梯度下降(Stochastic gradient descent)
隨機梯度下降算法每次從訓練集中隨機選擇一個樣本來進行迭代,即:
新聞熱點
疑難解答