關於梯度下降的簡要概述

2021-06-21 02:09:47 字數 927 閱讀 5399

這裡寫的是最小二乘的線性回歸方法,用梯度下降來調整引數。

首先我們看一些符號:

m:          樣本數量

n:           引數個數

xi:          第i個樣本的特徵(feature)向量

xji:         第i個樣本的第j個特徵

y:           樣本真實值,是乙個向量

θ:           引數向量(或者你直接理解成陣列可能比較好理解,程式中以alpha命名)

α:           步長(學習率,程式中以alpha命名)

hθ(xi):  回歸函式,計算當前引數為θ的情況下,第i個樣例的估計值

其中任何乙個樣本的x0 都為1

代價模型(這裡採用最小二乘法):

梯度下降調整引數:

思想:將j(θ)對於所有的θi求偏導數,讓對應的θi沿著切線方向靠近j(θ)的區域性最小值。(因此,如果你改變了代價模型,只需要對應改變這裡的更新函式即可)

其中α是步長,或者稱為學習率

注意這裡的所有θ要同時更新,假如有θ0和θ1,如果更新了θ0再用上面的公式來更新θ1,前面的θ0的改變會造成hθ (xi)的值發生改變。

前面都是些基本知識,程式設計實現也不難,但是有些同學反映迭代速度很慢,可能是由於演算法沒有優化吧。

可能這些同學是直接按照公式去用迴圈求解的,那樣就會造成,對於每個θi的更新,你都需要去計算一次每乙個樣例的估計值hθ (xi)的值,但是其實在這一輪更新裡面,更新結束前,這個估計值是不會改變的,也不能改變,所以我們可以用乙個陣列來儲存這些估計值,而在更新θi的時候直接去陣列裡面獲取對應的估計值就好了。

比如陣列為:

double *hvalue =new double[n];

這裡的n是你的樣例個數。

那麼,上面的更新θi的公式就變成了:

這樣子程式應該就會變快不少了。

關於梯度下降

關於何為梯度下降 批量梯度下降 bgd 用所有資料計算梯度 隨機梯度下降 sgd 用單個資料計算梯度 小批量梯度下降 mbgd 用小部分資料計算梯度 動量梯度下降 momentum 通過結合之前的梯度動量來計算當前的梯度動量,其計算公式的實質為為前n個梯度向量的平均。常用公式如圖,其中 指代平均前1...

關於梯度下降

什麼是梯度下降 簡單地來說,多元函式的導數 derivative 就是梯度 gradient 分別對每個變數進行微分,然後用逗號分割開,梯度是用括號包括起來,說明梯度其實乙個向量,我們說損失函式l的梯度為 我們知道導數就是變化率。梯度是向量,和引數維度一樣。總結梯度下降這一目前機器學習 深度學習解決...

隨機梯度下降與梯度下降的區別?

如果你還不了解梯度下降請參考 知乎 ai醬 梯度下降是個啥?假設你已經懂了梯度下降的原理與公式。接下來我會舉個例子來講隨機梯度下降與梯度下降的區別。假如損失 誤差 函式對引數w的導數是x w x la bel x wx label x wx l abel 然後我們需要更新的引數是w ww,學習率是 ...