10個梯度下降優化演算法

2021-09-25 12:59:31 字數 1175 閱讀 7155

梯度下降是一種尋找函式極小值的優化方法,在深度學習模型中常常用來在反向傳播過程中更新神經網路的權值。

梯度下降法優化器對梯度部分使用的是指數移動平均值(ema),對學習率部分使用均方根(rms)。

為什麼要對梯度取指數移動平均?

我們需要使用一些數值來更新權重。我們唯一有的數值呢就是當前梯度,所以讓我們利用它來更新權重。

但僅取當前梯度值是不夠好的。我們希望我們的更新是(對模型來說,是)「更好的指導」。讓我們考慮(每次更新中)包括之前的梯度值。

將當前梯度值和過去梯度資訊的結合起來一種方法是,我們可以對過去和現在的所有梯度進行簡單的平均。但這意味著每個梯度的權重是相等的。這樣做是反直覺的,因為在空間上,如果我們正在接近最小值,那麼最近的梯度值可能會提供更有效的資訊。

因此,最安全的方法是採用指數移動平均法,其中最近的梯度值的權重(重要性)比前面的值高。

為什麼要把學習速率除以梯度的均方根呢?

這個目的是為了調整學習的速率。調整為了適應什麼?答案是梯度。我們需要確保的是,當梯度較大時,我們希望更新適當縮小(否則,乙個巨大的值將減去當前的權重!)

為了到達這種效果,讓我們學習率α除以當前梯度得到乙個調整學習速率。

請記住,學習率成分必須始終是正的(因為學習率成分,當乘以梯度成分,後者應該有相同的符號)。為了確保它總是正的,我們可以取它的絕對值或者它的平方。當我們取當前梯度的平方,可以再取平方根"取消"這個平方。

但是就像動量的思路一樣,僅僅採用當前的梯度值是不夠好的。我們希望我們的訓練中的(每次)更新update都能更好的指導(模型)。因此,我們也需要使用之前的梯度值。正如上面所討論的,我們取過去梯度的指數移動平均值(『mean

square』) ,然後取其平方根(『root』) ,也就是』均方根』(rms)。除了 adagrad

(採用累積的平方梯度之和)之外,本文中所有的優化器都會對學習速率部分進行優化。

梯度下降及優化演算法

全量梯度下降法bgd batch gradient descent 隨機梯度下降法sgd stochastic gradient descent 小批量梯度下降法 mini batch gradient descent momentum梯度下降法 nag梯度下降法 兩者的關係可以這樣理解 隨機梯度下...

最優化演算法 梯度下降

梯度下降演算法,參考edwin 最優化導論 8.2章節,演算法採用go語言實現。此處演算法仍然存在疑惑,主要是獲取梯度下降時如何確定步長,即使採用割線法獲取最優步長,那麼割線法的初始值又如何確定?下面程式中雖然採用了牛頓法獲取極值,但非常依賴初始取值範圍!filename grad.go autho...

梯度下降演算法 梯度下降演算法為何叫梯度下降?

首先,我們知道乙個演算法的名字可以很好地去解釋乙個演算法,那麼梯度下降演算法是什麼呢?很明顯的,就是用梯度這個工具來解決問題的一種演算法。解決什麼問題呢?如何在乙個函式曲面的某一點,找到乙個函式值變化最大的方向。比如 我們站在山上的某一點,我們想要以最快的速度上山,但是我們的步子大小是一定的,那麼最...