1. 程式人生 > >深度學習總結二:優化器

深度學習總結二:優化器

對應程式碼

梯度下降

附梯度下降w變化曲線用於對比 在這裡插入圖片描述

momentum

動量法,原理在於一個方向的速度可以積累,而且越積累越大;通過不同訓練樣本求得梯度時,在最優的方向的梯度,始終都會增大最優方向上的速度。因此,可以減少許多震盪。 對用程式碼:

self.w_update = self.gamma * self.w_update + (1 - self.gamma) * w_grad

在這裡插入圖片描述 對比梯度下降,在20處就已經處於穩定。

Ada

假設存在w1和w2,且兩者更新速度不一致。如下圖: 在這裡插入圖片描述 這樣Ada就出現了。 它的原理:使得每一個引數更新都會有自己與眾不同的學習率。 對應程式碼:

self.s +=
np.power(w_grad, 2) w = w - self.learning_rate * (w_grad / np.sqrt(self.s))

在這裡插入圖片描述 Ada解決出現的擬合速度不一致問題。缺點:因為梯度要除以距離,長時間優化時距離越大,梯度就越來越小,效率低迷。

RMSProp

RMSProp原理:測試初期因為加了s_correct所以擬合速度會加快,用動量的流平均思想,到了一定時間,總的里程開始不變,解決Ada後期效率低迷問題。 對應程式碼:

self.s = self.beta * self.s + (1 - self.beta) * (w_grad**2)
s_correct = self.
s/(1 - self.beta ** (i+1)) w = w - self.learning_rate * w_grad / np.sqrt(s_correct)

在這裡插入圖片描述

Adam

集合前面幾個演算法的優點 對應程式碼:

self.v = self.gamma * self.v + (1 - self.gamma) * w_grad
v_correct = self.v / (1 - self.gamma ** (i+1))
self.s = self.beta * self.s + (1 - self.beta) * (w_grad**2)
s_correct = self.s/(1 - self.
beta ** (i+1)) w = w - self.learning_rate * (v_correct/np.sqrt(self.s))

在這裡插入圖片描述