深度学习中多层全连接网络的梯度下降法及其变式
生活随笔
收集整理的這篇文章主要介紹了
深度学习中多层全连接网络的梯度下降法及其变式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
深度學習中多層全連接網絡的梯度下降法及其變式
- 1 梯度下降法
- 2 梯度下降的變式
- 1.SGD
- 2.Momentum
- 3.Adagrad
- 4.RMSprop
- 5.Adam
- 6.小結
1 梯度下降法
-
梯度下降法的更新公式如下。
θi=θi?1?η?L(θi?1)\theta^i=\theta^{i-1}-\eta \nabla L(\theta^{i-1})θi=θi?1?η?L(θi?1) -
現在通過實際理論證明這樣更新參數能夠達到最優的效果。
-
希望求解下面這個方程。
θ?=argθminL(θ)\theta^*=arg_\theta min L(\theta)θ?=argθ?minL(θ)
- 也就是說,希望更新參數之后有下面的結果。
L(θ0)>L(θ1)>L(θ2)...L(\theta_0)>L(\theta_1)>L(\theta_2)...L(θ0?)>L(θ1?)>L(θ2?)...
- 泰勒級數(Taylor Series):對于任何一個無限可微函數h(x),在一個點x=x0附近,有以下泰勒級數:
- 當x足夠接近x0,有下面的近似:
- 對于多元泰勒級數,有以下公式:
- 同樣當x和y足夠接近x0和y0的時候,有以下近似:
2 梯度下降的變式
1.SGD
- 隨機梯度下降法是梯度下降法的一個小變形,就是每次使用一批(batch)數據進行梯度的計算,而不是計算全部數據的梯度,因為深度學習的數據量都特別大,所以每次都計算所有數據的梯度是不現實的,這樣會導致運算時間會特別長。
- 同時每次都計算全部的梯度還會失去一些隨機性.容易陷入局部誤差,所以使用隨機梯度下降法,可能每次都不是朝著真正最小的方向,但是這樣反而容易跳出局部極小點.
2.Momentum
- 第二種優化方法就是在隨機梯度下降的同時,增加動量(Momentum)。這來自于物理中的概念,可以想象損失函數是一個山谷,一個球從山谷滑下來,在一個平坦的地勢,球的滑動速度就會慢下來,可能會陷入一些鞍點或者局部極小值點。
- 這個時候給他增加動量,就可以讓他從高處滑落時的勢能轉換為平地的動能,相當于慣性增加了小球在平地滑動的速度,從而幫其跳出鞍點或者局部極小點。
- 動量的計算基于前面的梯度,也就是說參數更新不僅僅基于前面的梯度,也基于之前的梯度。
- 對于動量,還有一個變形即Nesterov。在更新參數的時候需要計算梯度,傳統的動量方法是計算當前位置的梯度,但是Nesterov的方法是計算經過動量更新之后的位置的梯度。
3.Adagrad
- 這是一種自適應學習率(adaptive)的方法,它的公式是:
- 學習率在不斷變小,且受每次計算出來的梯度影響,對于梯度比較大的參數,它的學習率就會變得相對更小,里面的根號特別重要,沒有這個根號算法表現非常差。
- 自適應學習率的缺點就是在某些情況下,一直遞減的學習率并不好,這樣會造成學習過早停止。
4.RMSprop
- 這是一個非常有效的自適應學習率的改進方法,公式如下。
- RMSprop不再會將前面所有的梯度平方求和,而是通過一個衰減率將其變小,使用了一種滑動平均的方式,越靠前面的梯度對自適應的學習率影響越小,這樣就能更加有效避免Adagrad學習率一直遞減太多的問題,能夠更快的收斂。
5.Adam
- 這是一種綜合型的學習方法,可以看成是RMSprop加動量(Momentum)的學習方法,達到比RMSprop更好的效果。
6.小結
- 以上介紹了多種基于梯度的更新方法,實際中可以使用Adam作為默認的優化算法,往往能夠達到比較好的效果,同時SGD+Momentum的方法也值得嘗試。
總結
以上是生活随笔為你收集整理的深度学习中多层全连接网络的梯度下降法及其变式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一篇文章入门深度学习框架PyTorch
- 下一篇: 深度学习入门之PyTorch学习笔记:多