python sklearn 梯度下降法_(四)梯度下降法及其python实现
梯度
梯度,什么是梯度?梯度的本意是一個向量,表示某一函數在該點處的方向導數沿著該方向取得最大值,即函數在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)。
在微積分里面,對多元函數的參數求
偏導數,把求得的各個參數的偏導數以向量的形式寫出來,就是梯度。比如函數 , 分別對 求偏導數,求得的梯度向量就是 ,簡稱 或者 。前面說到,梯度的方向就是函數值增加最快的方向。也就意味著,沿著梯度向量的方向,更加容易找到函數的最大值。反過來呢,沿著梯度向量相反的方向,函數值減少最快,也就是更加容易找到函數的最小值。
梯度下降
首先來看看梯度下降的一個直觀的解釋:比如我們在一座大山上的某處位置,由于我們不知道怎么下山,于是決定走一步算一步,也就是在每走到一個位置的時候,求解當前位置的梯度,沿著梯度的負方向,也就是當前最陡峭的位置向下走一步,然后繼續求解當前位置梯度,向這一步所在位置沿著最陡峭最易下山的位置走一步。這樣一步步的走下去,一直走到覺得我們已經到了山腳。當然這樣走下去,有可能我們不能走到山腳,而是到了某一個局部的山峰低處。
所以說,梯度下降不一定能夠找到全局的最優解,有可能是一個局部最優解。當然,如果損失函數是凸函數,梯度下降法得到的解就一定是全局最優解。
批梯度下降BGD
批梯度下降(Batch Gradient Descent)是指每次迭代要利用全部數據計算批梯度。這樣一來每迭代一步,都要用到訓練集所有的數據,如果數據量很大,那么可想而知這種方法的迭代速度會很慢。所以,這就引入了另外一種方法,隨機梯度下降。
隨機梯度下降SGD
隨機梯度下降(Stochastic Gradient Descent)每次迭代只用到了一個樣本,在樣本量很大的情況下,常見的情況是只用到了其中一部分樣本數據即可迭代到最優解。因此隨機梯度下降比批量梯度下降在計算量上會大大減少。SGD有一個缺點是,其噪音較BGD要多,使得SGD并不是每次迭代都向著整體最優化方向。而且SGD因為每次都是使用一個樣本進行迭代,因此最終求得的最優解往往不是全局最優解,而只是局部最優解。但是大的整體的方向是向全局最優解的,最終的結果往往是在全局最優解附近。
以多元線性回歸為例
線性函數:
損失函數:
梯度:
更新規則:BGD:
SGD:
實例
python解題代碼
import結果
GD and SGD loss左下角放大bgd_w: [[2.8636951][4.5708055]] bgd predict_y: [[12.00530624 28.58141804 18.88928127 20.59639168]] bgd_time: 0.114399 s sgd_w: [[2.8795059][4.519753 ]] sgd predict_y: [[11.91901183 28.35777664 18.91728234 20.55752945]] sgd_time: 0.06166 s根據loss圖像我們可以看到,BGD的loss是一直下降的,而SGD的loss雖然整體是下降的,但是中途有升有降。之所以不像網上的那么明顯,應該是因為樣本量太小。
在時間上,迭代1000次BGD花費0.114s,而SGD只花費了0.062s。
后記
如有問題,歡迎交流批評指正。
參考文獻
梯度(數學名詞)_百度百科?baike.baidu.com梯度下降(Gradient Descent)小結?www.cnblogs.comhttps://blog.csdn.net/pengjian444/article/details/71075544?blog.csdn.net總結
以上是生活随笔為你收集整理的python sklearn 梯度下降法_(四)梯度下降法及其python实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何对计算属性进行修改_「计算摄影」计算
- 下一篇: python制作计算机程序_用 Pyth