常用優(yōu)化器算法歸納介紹

優(yōu)化器是神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中,進(jìn)行梯度下降以尋找最優(yōu)解的優(yōu)化方法。不同方法通過不同方式(如附加動(dòng)量項(xiàng),學(xué)習(xí)率自適應(yīng)變化等)側(cè)重于解決不同的問題,但最終大都是為了加快訓(xùn)練速度。

這里就介紹幾種常見的優(yōu)化器,包括其原理、數(shù)學(xué)公式、核心思想及其性能;

這些優(yōu)化器可分為三大類:

  • 基本梯度下降法,包括標(biāo)準(zhǔn)梯度下降法(GD, Gradient Descent),隨機(jī)梯度下降法(SGD, Stochastic Gradient Descent)、批量梯度下降法(BGD, Batch Gradient Descent)、(MBGD,Mini-Batch Gradient Descent);
  • 動(dòng)量?jī)?yōu)化法,包括標(biāo)準(zhǔn)動(dòng)量?jī)?yōu)化方法(MomentumOptimizer)、牛頓加速梯度動(dòng)量?jī)?yōu)化方法(NAG, Nesterov accelerated gradient)等;
  • 自適應(yīng)學(xué)習(xí)率優(yōu)化算法,包括AdaGrad算法, Adadelta算法,RMSProp算法,Adam算法等;

1. 基本梯度下降法

核心思想:即針對(duì)每次輸入的訓(xùn)練數(shù)據(jù),計(jì)算輸出預(yù)測(cè)與真值的Loss的梯度;

1.1 標(biāo)準(zhǔn)梯度下降法(GD,Gradient Descent)

W_{t+1}=W_{t}-\eta_{t} \Delta J\left(W_{t}\right)

  • 其中 \scriptstyle W_t 表示當(dāng)前時(shí)刻網(wǎng)絡(luò)中的變量(包括權(quán)重weights、偏置biases和卷積核等),即參與梯度下降的變量;\scriptstyle W_{t+1}表示更新后的變量;
  • \scriptstyle \eta_t 表示學(xué)習(xí)率;
  • \scriptstyle J是損失函數(shù)(即所有樣本\scriptstyle X的預(yù)測(cè)值與真實(shí)值的Loss),則 \scriptstyle ΔJ(W_t) 表示損失函數(shù) \scriptstyle J 對(duì) \scriptstyle W_t 中的變量的偏導(dǎo);

從表達(dá)式來(lái)看,網(wǎng)絡(luò)中參數(shù)的更新,是不斷向著最小化Loss函數(shù)的方向移動(dòng)的:


優(yōu)點(diǎn):
簡(jiǎn)單易懂,即對(duì)于相應(yīng)的最優(yōu)解(這里認(rèn)為是Loss的最小函數(shù)),每次變量更新都是沿著局部梯度下降最快的方向,從而最小化損失函數(shù)。

缺點(diǎn):

  1. 如上圖所示,局部梯度下降最大的方向,并非一定是最優(yōu)解的方向,并且每次訓(xùn)練都要遍歷所有樣本,導(dǎo)致訓(xùn)練速度較慢;
  2. 容易陷入局部最優(yōu)點(diǎn),即落入鞍點(diǎn);此時(shí)每次計(jì)算時(shí),梯度都為0或者是一個(gè)很小的數(shù),導(dǎo)致被困在局部最優(yōu)點(diǎn),而不能到達(dá)全局最優(yōu)點(diǎn);
  3. 注意有的文章認(rèn)為,由于輸入變量的維度一般較高,很少存在或者說很少能夠陷入每一維都是局部最優(yōu)點(diǎn)構(gòu)成的鞍點(diǎn),因此這里存疑;
在這里插入圖片描述

1.2 批量梯度下降法(BGD, Batch Gradient Descent)

W_{t+1}=W_{t}-\eta_{t} \sum_{i=1}^{n} \Delta J_{i}\left(W_{t}, X^{(i)}, Y^{(i)}\right)

  • \scriptstyle X^{(i)},Y^{(i)} 是一個(gè)mini-batch 的輸入數(shù)據(jù)和真實(shí)標(biāo)簽;
  • \scriptstyle ΔJ(W_t) 是這個(gè) mini-batch 的數(shù)據(jù)的Loss;

不同于標(biāo)準(zhǔn)梯度下降法(Gradient Descent)一次計(jì)算所有數(shù)據(jù)樣本的Loss并計(jì)算相應(yīng)的梯度,批量梯度下降法(BGD, Batch Gradient Descent)每次只取一個(gè)小批次的數(shù)據(jù)及其真實(shí)標(biāo)簽進(jìn)行訓(xùn)練,稱這個(gè)批次為mini-batch;

優(yōu)點(diǎn):

  1. 每次使用一個(gè)batch可以大大減小收斂所需要的迭代次數(shù),同時(shí)可以使收斂到的結(jié)果更加接近梯度下降的效果。
  2. 由于矩陣的并行計(jì)算,訓(xùn)練速度并不會(huì)比每次訓(xùn)練單個(gè)樣本慢;
  3. 加快模型收斂速度;

缺點(diǎn):
隨機(jī)梯度下降法的 batch size 選擇不當(dāng)可能導(dǎo)致模型難以收斂;由于這種方法是在一次更新中,就對(duì)整個(gè)數(shù)據(jù)集計(jì)算梯度,所以計(jì)算起來(lái)非常慢,遇到很大量的數(shù)據(jù)集也會(huì)非常棘手,而且不能投入新數(shù)據(jù)實(shí)時(shí)更新模型。

for i in range(nb_epochs):
      params_grad = evaluate_gradient(loss_function, data, params)
      params = params - learning_rate * params_grad

我們會(huì)事先定義一個(gè)迭代次數(shù) epoch,首先計(jì)算梯度向量 params_grad,然后沿著梯度的方向更新參數(shù) params,learning rate 決定了我們每一步邁多大。

Batch gradient descent 對(duì)于凸函數(shù)可以收斂到全局極小值,對(duì)于非凸函數(shù)可以收斂到局部極小值。

1.3 隨機(jī)梯度下降法(SGD,Stochastic Gradient Descent)

W_{t+1}=W_{t}-\eta_{t} g_{t}

  • \scriptstyle g_t 是單個(gè)樣本對(duì)權(quán)重等參數(shù)的偏導(dǎo);

和 BGD 的一次用所有數(shù)據(jù)計(jì)算梯度相比,SGD 每次更新時(shí)對(duì)每個(gè)樣本進(jìn)行梯度更新,對(duì)于很大的數(shù)據(jù)集來(lái)說,可能會(huì)有相似的樣本,這樣 BGD 在計(jì)算梯度時(shí)會(huì)出現(xiàn)冗余,而 SGD 一次只進(jìn)行一次更新,就沒有冗余,而且比較快,并且可以新增樣本。

即訓(xùn)練時(shí),每次只從一批訓(xùn)練樣本中隨機(jī)選取一個(gè)樣本進(jìn)行梯度下降;對(duì)隨機(jī)梯度下降來(lái)說,只需要一次關(guān)注一個(gè)訓(xùn)練樣本,一點(diǎn)點(diǎn)把參數(shù)朝著全局最小值的方向進(jìn)行修改了。

for i in range(nb_epochs):
    np.random.shuffle(data)
    for example in data:
        params_grad = evaluate_gradient(loss_function, example, params)
        params = params - learning_rate * params_grad

整體數(shù)據(jù)集是個(gè)循環(huán),其中對(duì)每個(gè)樣本進(jìn)行一次參數(shù)更新


缺點(diǎn):

梯度下降速度比較慢,而且每次梯度更新時(shí)往往只專注與局部最優(yōu)點(diǎn),而不會(huì)恰好指向全局最優(yōu)點(diǎn);

單樣本梯度更新時(shí)會(huì)引入許多噪聲(跟訓(xùn)練目標(biāo)無(wú)關(guān)的特征也會(huì)被歸為該樣本分類的特征);

SGD 因?yàn)楦卤容^頻繁,會(huì)造成 cost function 有嚴(yán)重的震蕩。

BGD 可以收斂到局部極小值,當(dāng)然 SGD 的震蕩可能會(huì)跳到更好的局部極小值處。

當(dāng)我們稍微減小 learning rate,SGD 和 BGD 的收斂性是一樣的。

優(yōu)點(diǎn):

當(dāng)處理大量數(shù)據(jù)時(shí),比如SSD或者faster-rcnn等目標(biāo)檢測(cè)模型,每個(gè)樣本都有大量候選框參與訓(xùn)練,這時(shí)使用隨機(jī)梯度下降法能夠加快梯度的計(jì)算。

隨機(jī)梯度下降是通過每個(gè)樣本來(lái)迭代更新一次,如果樣本量很大的情況,那么可能只用其中部分的樣本,就已經(jīng)將\scriptstyle W迭代到最優(yōu)解了,對(duì)比上面的批量梯度下降,迭代一次需要用到十幾萬(wàn)訓(xùn)練樣本,一次迭代不可能最優(yōu),如果迭代10次的話就需要遍歷訓(xùn)練樣本10次。缺點(diǎn)是SGD的噪音較BGD要多,使得SGD并不是每次迭代都向著整體最優(yōu)化方向。所以雖然訓(xùn)練速度快,但是準(zhǔn)確度下降,并不是全局最優(yōu)。雖然包含一定的隨機(jī)性,但是從期望上來(lái)看,它是等于正確的導(dǎo)數(shù)的。

1.4 Mini-Batch Gradient Descent (MBGD)

梯度更新規(guī)則:

MBGD 每一次利用一小批樣本,即 n 個(gè)樣本進(jìn)行計(jì)算,這樣它可以降低參數(shù)更新時(shí)的方差,收斂更穩(wěn)定,另一方面可以充分地利用深度學(xué)習(xí)庫(kù)中高度優(yōu)化的矩陣操作來(lái)進(jìn)行更有效的梯度計(jì)算。

\theta=\theta-\eta \cdot \nabla_{\theta} J\left(\theta ; x^{(i: i+n)} ; y^{(i: i+n)}\right)

和 SGD 的區(qū)別是每一次循環(huán)不是作用于每個(gè)樣本,而是具有 n 個(gè)樣本的批次。

for i in range(nb_epochs):
    np.random.shuffle(data)
    for batch in get_batches(data, batch_size=50):
        params_grad = evaluate_gradient(loss_function, batch, params)
        params = params - learning_rate * params_grad

超參數(shù)設(shè)定值: n 一般取值在 50~256

缺點(diǎn):(兩大缺點(diǎn))

  • 不過 Mini-batch gradient descent 不能保證很好的收斂性,learning rate 如果選擇的太小,收斂速度會(huì)很慢,如果太大,loss function 就會(huì)在極小值處不停地震蕩甚至偏離。(有一種措施是先設(shè)定大一點(diǎn)的學(xué)習(xí)率,當(dāng)兩次迭代之間的變化低于某個(gè)閾值后,就減小 learning rate,不過這個(gè)閾值的設(shè)定需要提前寫好,這樣的話就不能夠適應(yīng)數(shù)據(jù)集的特點(diǎn)。)對(duì)于非凸函數(shù),還要避免陷于局部極小值處,或者鞍點(diǎn)處,因?yàn)榘包c(diǎn)周圍的error是一樣的,所有維度的梯度都接近于0,SGD 很容易被困在這里。(會(huì)在鞍點(diǎn)或者局部最小點(diǎn)震蕩跳動(dòng),因?yàn)樵诖它c(diǎn)處,如果是訓(xùn)練集全集帶入即BGD,則優(yōu)化會(huì)停止不動(dòng),如果是mini-batch或者SGD,每次找到的梯度都是不同的,就會(huì)發(fā)生震蕩,來(lái)回跳動(dòng)。)
  • SGD對(duì)所有參數(shù)更新時(shí)應(yīng)用同樣的 learning rate,如果我們的數(shù)據(jù)是稀疏的,我們更希望對(duì)出現(xiàn)頻率低的特征進(jìn)行大一點(diǎn)的更新。LR會(huì)隨著更新的次數(shù)逐漸變小。

鞍點(diǎn)就是:一個(gè)光滑函數(shù)的鞍點(diǎn)鄰域的曲線,曲面,或超曲面,都位于這點(diǎn)的切線的不同邊。例如這個(gè)二維圖形,像個(gè)馬鞍:在x-軸方向往上曲,在y-軸方向往下曲,鞍點(diǎn)就是(0,0)。

image.png

為了應(yīng)對(duì)上面的兩點(diǎn)挑戰(zhàn)就有了下面這些算法

2. 動(dòng)量?jī)?yōu)化法

2.1 Momentum算法

核心思想:

動(dòng)量?jī)?yōu)化方法是在梯度下降法的基礎(chǔ)上進(jìn)行的改變,具有加速梯度下降的作用;

其核心思想就是,使當(dāng)前訓(xùn)練數(shù)據(jù)的梯度受到之前訓(xùn)練數(shù)據(jù)的梯度的影響,其中之前的梯度乘上一個(gè)權(quán)重值λ(λ<1),就成為動(dòng)量項(xiàng)(注意這里把梯度看作了有方向的向量)。而且隨著迭代次數(shù)的增加,越往前的梯度對(duì)當(dāng)前梯度的影響就越小。

不使用動(dòng)量?jī)?yōu)化時(shí),每次訓(xùn)練的梯度下降方向,都是按照當(dāng)前批次訓(xùn)練數(shù)據(jù)計(jì)算的,可能并不能代表整個(gè)數(shù)據(jù)集,并且會(huì)有許多噪聲,下降曲線波動(dòng)較大:

添加動(dòng)量項(xiàng)之后,能夠有效減小波動(dòng),從而加快訓(xùn)練速度:

\left\{\begin{array}{l} v_{t}=\alpha v_{t-1}+\eta_{t} \Delta J\left(W_{t}, X^{\left(i_{s}\right)}, Y^{\left(i_{s}\right)}\right) \\ W_{t+1}=W_{t}-v_{t} \end{array}\right.

  • \scriptstyle v_t 的計(jì)算如圖,是上一次訓(xùn)值練的\scriptstyle v_{t-1} × 衰減率α + 學(xué)習(xí)率η × 損失函數(shù)的偏導(dǎo)
    其中 \scriptstyle v_t 是 t 時(shí)刻權(quán)重更新的值,即 \scriptstyle w_t+1 = W_t - v_t;衰減率\scriptstyle α通常取0.9;

當(dāng)我們將一個(gè)小球從山上滾下來(lái)時(shí),沒有阻力的話,它的動(dòng)量會(huì)越來(lái)越大,但是如果遇到了阻力,速度就會(huì)變小。
加入的這一項(xiàng),可以使得梯度方向不變的維度上速度變快,梯度方向有所改變的維度上的更新速度變慢,這樣就可以加快收斂并減小震蕩。

優(yōu)點(diǎn):

通過動(dòng)量更新,參數(shù)向量會(huì)在有持續(xù)梯度的方向上增加速度;
使梯度下降時(shí)的折返情況減輕,從而加快訓(xùn)練速度;

缺點(diǎn):

如果數(shù)據(jù)集分類復(fù)雜,會(huì)導(dǎo)致 \scriptstyle V_{t-1}\scriptstyle t時(shí)刻梯度 向量方向相差較大;在進(jìn)行向量求和時(shí),得到的 \scriptstyle V_t 會(huì)非常小,反而使訓(xùn)練速度大大下降甚至模型難以收斂。

這種情況相當(dāng)于小球從山上滾下來(lái)時(shí)是在盲目地沿著坡滾,如果它能具備一些先知,例如快要上坡時(shí),就知道需要減速了的話,適應(yīng)性會(huì)更好。

2.2 牛頓加速梯度動(dòng)量?jī)?yōu)化方法(NAG, Nesterov accelerated gradient)

\left\{\begin{array}{l} v_{t}=\alpha v_{t-1}+\eta_{t} \Delta J\left(W_{t}-\alpha v_{t-1}\right) \\ W_{t+1}=W_{t}-v_{t} \end{array}\right.

如圖,藍(lán)色的是Momentum梯度動(dòng)量?jī)?yōu)化法的下降方向,即如果多次梯度累計(jì)方向大致相同,會(huì)導(dǎo)致最終下降步幅過大;會(huì)先計(jì)算當(dāng)前的梯度,然后在更新后的累積梯度后會(huì)有一個(gè)大的跳躍。

NAG 會(huì)先在前一步的累積梯度上(brown vector)有一個(gè)大的跳躍,然后衡量一下梯度做一下修正(red vector),這種預(yù)期的更新可以避免我們走的太快。

NAG 可以使 RNN 在很多任務(wù)上有更好的表現(xiàn)。

目前為止,我們可以做到,在更新梯度時(shí)順應(yīng) loss function 的梯度來(lái)調(diào)整速度,并且對(duì) SGD 進(jìn)行加速。

3. 自適應(yīng)學(xué)習(xí)率優(yōu)化算法

核心思想:

自適應(yīng)學(xué)習(xí)率優(yōu)化算法針對(duì)于機(jī)器學(xué)習(xí)模型的學(xué)習(xí)率,采用不同的策略來(lái)調(diào)整訓(xùn)練過程中的學(xué)習(xí)率,從而大大提高訓(xùn)練速度。

3.1 Adagrad (Adaptive gradient algorithm)

這個(gè)算法就可以對(duì)低頻的參數(shù)做較大的更新,對(duì)高頻的做較小的更新,也因此,對(duì)于稀疏的數(shù)據(jù)它的表現(xiàn)很好,很好地提高了 SGD 的魯棒性,例如識(shí)別 Youtube 視頻里面的貓,訓(xùn)練 GloVe word embeddings,因?yàn)樗鼈兌际切枰诘皖l的特征上有更大的更新。

梯度更新規(guī)則:

\theta_{t+1, i}=\theta_{t, i}-\frac{\eta}{\sqrt{G_{t, i i}+\epsilon}} \cdot g_{t, i}

其中 \scriptstyle g 為:\scriptstyle t 時(shí)刻參數(shù) \scriptstyle θ_i 的梯度
g_{t, i}=\nabla_{\theta} J\left(\theta_{i}\right)

如果是普通的 SGD, 那么\scriptstyle θ_i 在每一時(shí)刻的梯度更新公式為:
\theta_{t+1, i}=\theta_{t, i}-\eta \cdot g_{t, i}

但這里的 learning rate \scriptstyle η 也隨 \scriptstyle t\scriptstyle i 而變:
\theta_{t+1, i}=\theta_{t, i}-\frac{\eta}{\sqrt{G_{t, i i}+\epsilon}} \cdot g_{t, i}
其中 \scriptstyle G_t 是個(gè)對(duì)角矩陣, \scriptstyle (i,i) 元素就是 \scriptstyle t 時(shí)刻參數(shù) \scriptstyle θ_i 的梯度平方和。

Adagrad 的優(yōu)點(diǎn)是減少了學(xué)習(xí)率的手動(dòng)調(diào)節(jié)

式中,\scriptstyle i表示第\scriptstyle i個(gè)分類,\scriptstyle t表示第\scriptstyle t迭代同時(shí)也表示分類\scriptstyle i累計(jì)出現(xiàn)的次數(shù)。\scriptstyle η表示初始的學(xué)習(xí)率取值(一般為0.01)

AdaGrad的核心思想:縮放每個(gè)參數(shù)反比于其所有梯度歷史平均值總和的平方根。具有代價(jià)函數(shù)最大梯度的參數(shù)相應(yīng)地有較大的學(xué)習(xí)率,而具有小梯度的參數(shù)又較小的學(xué)習(xí)率。

缺點(diǎn):

它的缺點(diǎn)是分母會(huì)不斷積累,這樣學(xué)習(xí)率就會(huì)收縮并最終會(huì)變得非常小。

3.2 Adadelta

這個(gè)算法是對(duì) Adagrad 的改進(jìn),

和 Adagrad 相比,就是分母的 \scriptstyle G 換成了過去的梯度平方的衰減平均值,指數(shù)衰減平均值

\Delta \theta_{t}=-\frac{\eta}{\sqrt{E\left[g^{2}\right]_{t}+\epsilon}} g_{t}

這個(gè)分母相當(dāng)于梯度的均方根 root mean squared (RMS),在數(shù)據(jù)統(tǒng)計(jì)分析中,將所有值平方求和,求其均值,再開平方,就得到均方根值 ,所以可以用 RMS 簡(jiǎn)寫:

\Delta \theta_{t}=-\frac{\eta}{R M S[g]_{t}} g_{t}

其中 \scriptstyle E 的計(jì)算公式如下,\scriptstyle t 時(shí)刻的依賴于前一時(shí)刻的平均和當(dāng)前的梯度:

E\left[g^{2}\right]_{t}=\gamma E\left[g^{2}\right]_{t-1}+(1-\gamma) g_{t}^{2}

梯度更新規(guī)則:

此外,還將學(xué)習(xí)率 \scriptstyle η 換成了 RMS[Δθ],這樣的話,我們甚至都不需要提前設(shè)定學(xué)習(xí)率了:

\begin{array}{l} \Delta \theta_{t}=-\frac{R M S[\Delta \theta]_{t-1}}{R M S[g]_{t}} g_{t} \\ \theta_{t+1}=\theta_{t}+\Delta \theta_{t} \end{array}

超參數(shù)設(shè)定值: \scriptstyle \gamma 一般設(shè)定為 0.9

3.3 RMSprop

RMSprop 是 Geoff Hinton 提出的一種自適應(yīng)學(xué)習(xí)率方法。

RMSprop 和 Adadelta 都是為了解決 Adagrad 學(xué)習(xí)率急劇下降問題的,

梯度更新規(guī)則:

RMSprop 與 Adadelta 的第一種形式相同:(使用的是指數(shù)加權(quán)平均,旨在消除梯度下降中的擺動(dòng),與Momentum的效果一樣,某一維度的導(dǎo)數(shù)比較大,則指數(shù)加權(quán)平均就大,某一維度的導(dǎo)數(shù)比較小,則其指數(shù)加權(quán)平均就小,這樣就保證了各維度導(dǎo)數(shù)都在一個(gè)量級(jí),進(jìn)而減少了擺動(dòng)。允許使用一個(gè)更大的學(xué)習(xí)率η)

\begin{array}{l} E\left[g^{2}\right]_{t}=0.9 E\left[g^{2}\right]_{t-1}+0.1 g_{t}^{2} \\ \theta_{t+1}=\theta_{t}-\frac{\eta}{\sqrt{E\left[g^{2}\right]_{t}+\epsilon}} g_{t} \end{array}

超參數(shù)設(shè)定值:

Hinton 建議設(shè)定 \scriptstyle \gamma 為 0.9, 學(xué)習(xí)率 \scriptstyle η 為 0.001。

3.4 Adam:Adaptive Moment Estimation

這個(gè)算法是另一種計(jì)算每個(gè)參數(shù)的自適應(yīng)學(xué)習(xí)率的方法。相當(dāng)于 RMSprop + Momentum

除了像 Adadelta 和 RMSprop 一樣存儲(chǔ)了過去梯度的平方 vt 的指數(shù)衰減平均值 ,也像 momentum 一樣保持了過去梯度 mt 的指數(shù)衰減平均值:

\begin{array}{l} m_{t}=\beta_{1} m_{t-1}+\left(1-\beta_{1}\right) g_{t} \\ v_{t}=\beta_{2} v_{t-1}+\left(1-\beta_{2}\right) g_{t}^{2} \end{array}

如果 \scriptstyle m_t\scriptstyle v_t 被初始化為 0 向量,那它們就會(huì)向 0 偏置,所以做了偏差校正,通過計(jì)算偏差校正后的 \scriptstyle m_t\scriptstyle v_t 來(lái)抵消這些偏差:

\begin{array}{l} \hat{m}_{t}=\frac{m_{t}}{1-\beta_{1}^{t}} \\ \hat{v}_{t}=\frac{v_{t}}{1-\beta_{2}^{t}} \end{array}

梯度更新規(guī)則:

\theta_{t+1}=\theta_{t}-\frac{\eta}{\sqrt{\hat{v}_{t}}+\epsilon} \hat{m}_{t}

超參數(shù)設(shè)定值:
建議\scriptstyle β1 = 0.9,β2 = 0.999,? = 10e?8

4. 各種優(yōu)化器的可視化比較:

示例一

SGD optimization on saddle point

示例二

示例三

SGD optimization on loss surface contours

上面情況都可以看出,Adagrad, Adadelta, RMSprop 幾乎很快就找到了正確的方向并前進(jìn),收斂速度也相當(dāng)快,而其它方法要么很慢,要么走了很多彎路才找到。

由圖可知自適應(yīng)學(xué)習(xí)率方法即 Adagrad, Adadelta, RMSprop, Adam 在這種情景下會(huì)更合適而且收斂性更好。

5. 如何選擇優(yōu)化算法

如果數(shù)據(jù)是稀疏的,就用自適用方法,即 Adagrad, Adadelta, RMSprop, Adam。

RMSprop, Adadelta, Adam 在很多情況下的效果是相似的。

Adam 就是在 RMSprop 的基礎(chǔ)上加了 bias-correction 和 momentum,

隨著梯度變的稀疏,Adam 比 RMSprop 效果會(huì)好。

整體來(lái)講,Adam 是最好的選擇。

很多論文里都會(huì)用 SGD,沒有 momentum 等。SGD 雖然能達(dá)到極小值,但是比其它算法用的時(shí)間長(zhǎng),而且可能會(huì)被困在鞍點(diǎn)。

如果需要更快的收斂,或者是訓(xùn)練更深更復(fù)雜的神經(jīng)網(wǎng)絡(luò),需要用一種自適應(yīng)的算法。

參考

各種優(yōu)化器Optimizer原理:從SGD到AdamOptimizer

深度學(xué)習(xí)——優(yōu)化器算法Optimizer詳解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容