(標題不能再中二了)本文僅對一些常見的優化方法進行直觀介紹和簡單的比較,各類優化方法的詳細內容及公式只好去認真啃論文了,在此我就不贅述了。react
此處的SGD指mini-batch gradient descent,關於batch gradient descent, stochastic gradient descent, 以及 mini-batch gradient descent的具體區別就不細說了。如今的SGD通常都指mini-batch gradient descent。算法
SGD就是每一次迭代計算mini-batch的梯度,而後對參數進行更新,是最多見的優化方法了。即:網絡
其中,是學習率,是梯度 SGD徹底依賴於當前batch的梯度,因此可理解爲容許當前batch的梯度多大程度影響參數更新app
缺點:(正由於有這些缺點才讓這麼多大神發展出了後續的各類算法)ide
momentum是模擬物理裏動量的概念,積累以前的動量來替代真正的梯度。公式以下:學習
其中,是動量因子大數據
特色:優化
nesterov項在梯度更新時作一個校訂,避免前進太快,同時提升靈敏度。 將上一節中的公式展開可得:ui
能夠看出,並無直接改變當前梯度,因此Nesterov的改進就是讓以前的動量直接影響當前的動量。即:this
因此,加上nesterov項後,梯度在大的跳躍後,進行計算對當前梯度進行校訂。以下圖:
momentum首先計算一個梯度(短的藍色向量),而後在加速更新梯度的方向進行一個大的跳躍(長的藍色向量),nesterov項首先在以前加速的梯度方向進行一個大的跳躍(棕色向量),計算梯度而後進行校訂(綠色梯向量)
其實,momentum項和nesterov項都是爲了使梯度更新更加靈活,對不一樣狀況有針對性。可是,人工設置一些學習率總仍是有些生硬,接下來介紹幾種自適應學習率的方法
Adagrad實際上是對學習率進行了一個約束。即:
此處,對從1到進行一個遞推造成一個約束項regularizer,,用來保證分母非0
特色:
Adadelta是對Adagrad的擴展,最初方案依然是對學習率進行自適應約束,可是進行了計算上的簡化。 Adagrad會累加以前全部的梯度平方,而Adadelta只累加固定大小的項,而且也不直接存儲這些項,僅僅是近似計算對應的平均值。即:
在此處Adadelta其實仍是依賴於全局學習率的,可是做者作了必定處理,通過近似牛頓迭代法以後:
其中,表明求指望。
此時,能夠看出Adadelta已經不用依賴於全局學習率了。
特色:
RMSprop能夠算做Adadelta的一個特例:
當時,就變爲了求梯度平方和的平均數。
若是再求根的話,就變成了RMS(均方根):
此時,這個RMS就能夠做爲學習率的一個約束:
特色:
Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每一個參數的學習率。Adam的優勢主要在於通過偏置校訂後,每一次迭代學習率都有個肯定範圍,使得參數比較平穩。公式以下:
其中,,分別是對梯度的一階矩估計和二階矩估計,能夠看做對指望,的估計;,是對,的校訂,這樣能夠近似爲對指望的無偏估計。 能夠看出,直接對梯度的矩估計對內存沒有額外的要求,並且能夠根據梯度進行動態調整,而對學習率造成一個動態約束,並且有明確的範圍。
特色:
Adamax是Adam的一種變體,此方法對學習率的上限提供了一個更簡單的範圍。公式上的變化以下:
能夠看出,Adamax學習率的邊界範圍更簡單
Nadam相似於帶有Nesterov動量項的Adam。公式以下:
能夠看出,Nadam對學習率有了更強的約束,同時對梯度的更新也有更直接的影響。通常而言,在想使用帶動量的RMSprop,或者Adam的地方,大多可使用Nadam取得更好的效果。
損失平面等高線
在鞍點處的比較
一、各類優化方法
梯度降低方法爲何可以達到最優勢
sgd:震動可以跳出局部最小(還有一種模擬退火方法)
batch sgd :速度要慢
monument :
Momentum is a method that helps accelerate SGD in the relevant direction and dampens oscillations
The momentum term increases for dimensions whose gradients point in the same directions and reduces updates for dimensions whose gradients change directions. As a result, we gain faster convergence and reduced oscillation
若是梯度方向相同就會increase,不一樣就會decrease,加快收斂,同時可以抑制震盪
adagrad:
It adapts the learning rate to the parameters, performing larger updates for infrequent and smaller updates for frequent parameters. For this reason, it is well-suited for dealing with sparse data
對罕見的參數更新快(學習率大),不罕見的參數更新慢(學習率小),很是適合稀疏數據
One of Adagrad's main benefits is that it eliminates the need to manually tune the learning rate. Most implementations use a default value of 0.01 and leave it at that.
優勢是:不須要手工去調整學習率
Adagrad's main weakness is its accumulation of the squared gradients in the denominator: Since every added term is positive, the accumulated sum keeps growing during training. This in turn causes the learning rate to shrink and eventually become infinitesimally small, at which point the algorithm is no longer able to acquire additional knowledge. The following algorithms aim to resolve this flaw.
缺點是:分母上面的梯度均方的累加,致使學習率縮小,變得無限小
adadelta:
Adadelta is an extension of Adagrad that seeks to reduce its aggressive, monotonically decreasing learning rate. Instead of accumulating all past squared gradients, Adadelta restricts the window of accumulated past gradients to some fixed size
限制過去梯度的累加值在一個固定的大小
adam:
既可以自動調整學習率像adagrad,又結合了monument的優勢