梯度下降法介紹

2022-06-20 11:51:10 字數 1594 閱讀 4654

它們都是為了正確地調節權重向量,通過為每個權重計算乙個梯度,從而更新權值,使目標函式盡可能最小化。其差別在於樣本的使用方式不同。

全梯度下降演算法(fg)

計算訓練集所有樣本誤差,對其求和再取平均值作為目標函式。

權重向量沿其梯度相反的方向移動,從而使當前目標函式減少得最多。

因為在執行每次更新時,我們需要在整個資料集上計算所有的梯度,所以批梯度下降法的速度會很慢,同時,批梯度下降法無法處理超出記憶體容量限制的資料集。

其是在整個訓練資料集上計算損失函式關於引數θ的梯度:

2.隨機梯度下降演算法(sg)

由於fg每迭代更新一次權重都需要計算所有樣本誤差,而實際問題中經常有上億的訓練樣本,故效率偏低,且容易陷入區域性最優解,因此提出了隨機梯度下降演算法。

其每輪計算的目標函式不再是全體樣本誤差,而僅是單個樣本誤差,即每次只代入計算乙個樣本目標函式的梯度來更新權重,再取下乙個樣本重複此過程,直到損失函式值停止下降或損失函式值小於某個可以容忍的閾值。

此過程簡單,高效,通常可以較好地避免更新迭代收斂到區域性最優解。其迭代形式為

每次只使用乙個樣本迭代,若遇上雜訊則容易陷入區域性最優解。

其中,x(i)表示一條訓練樣本的特徵值,y(i)表示一條訓練樣本的標籤值

但是由於,sg每次只使用乙個樣本迭代,若遇上雜訊則容易陷入區域性最優解。

小批量梯度下降演算法(mini-bantch)

小批量梯度下降演算法是fg和sg的折中方案,在一定程度上兼顧了以上兩種方法的優點。

每次從訓練樣本集上隨機抽取乙個小樣本集,在抽出來的小樣本集上採用fg迭代更新權重。

被抽出的小樣本集所含樣本點的個數稱為batch_size,通常設定為2的冪次方,更有利於gpu加速處理。

特別的,若batch_size=1,則變成了sg;若batch_size=n,則變成了fg.其迭代形式為

隨機平均梯度下降演算法(sag)

在sg方法中,雖然避開了運算成本大的問題,但對於大資料訓練而言,sg效果常不盡如人意,因為每一輪梯度更新都完全與上一輪的資料和梯度無關。

隨機平均梯度演算法克服了這個問題,在記憶體中為每乙個樣本都維護乙個舊的梯度,隨機選擇第i個樣本來更新此樣本的梯度,其他樣本的梯度保持不變,然後求得所有梯度的平均值,進而更新了引數。

如此,每一輪更新僅需計算乙個樣本的梯度,計算成本等同於sg,但收斂速度快得多。

梯度下降優化演算法(拓展)

以下這些演算法主要用於深度學習優化

nesterov加速梯度下降法

adagrad

adadelta

rmsprop

adam

梯度下降法和隨機梯度下降法

批量梯度下降法 batch gradient descent 在更新引數時使用所有的樣本來進行更新 隨機梯度下降法 stochastic gradient descent 求梯度時沒有用所有的m個樣本的資料,而是僅僅選取乙個樣本j來求梯度。小批量梯度下降法 mini batch gradient d...

梯度下降法

梯度下降法 是乙個一階 最優化演算法 通常也稱為 最速下降法 我之前也沒有關注過這類演算法。最近,聽史丹福大學的機器學習課程時,碰到了用梯度下降演算法求解線性回歸問題,於是看了看這類演算法的思想。今天只寫了一些入門級的知識。我們知道,函式的曲線如下 程式設計實現 c code cpp view pl...

梯度下降法

回歸 regression 梯度下降 gradient descent 發表於332 天前 技術,科研 被圍觀 1152 次 前言 這個系列主要想能夠用數學去描述機器學習,想要學好機器學習,首先得去理解其中的數學意義,不一定要到能夠輕鬆自如的推導中間的公式,不過至少得認識這些 式子吧,不然看一些相關...