幾種常見的引數更新方式
x += - learning_rate * dx
# momentum update
v = mu * v - learning_rate * dx # integrate velocity
x += v # integrate position
v_prev = v # back this up
v = mu * v - learning_rate * dx # velocity update stays the same
x += -mu * v_prev + (1 + mu) * v # position update changes form
推理比較麻煩,需要檢視詳細記錄。
通常,我們在每一次更新引數時,對於所有的引數使用相同的學習率。而adagrad演算法的思想是:每一次更新引數時(一次迭代),不同的引數使用不同的學習率。adagrad 的公式為:
g t=
gt−1
+gt2
θt+1
=θt−
αgt+
ε∗gt
g_t = g_+g_t^2\\ \theta_=\theta_t-\frac+\varepsilon}*g_t
gt=gt
−1+
gt2
θt+1
=θt
−gt
+ε
α∗g
t
# assume the gradient dx and parameter vector x
cache += dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)
由於是累積梯度的平方,到後面g
tg_t
gt累積的比較大,會導致學習率 αgt
+ε
\frac}
gt+ε
α→0,導致梯度消失。
改進了adagrad的缺點。不會讓學習率降為零。
rmsprop使用指數加權平均(指數衰減平均)只保留過去給定視窗大小的梯度,使其能夠在找到凸碗狀結構後快速收斂。
cache = decay_rate * cache + (1 - decay_rate) * dx**2
x += - learning_rate * dx / (np.sqrt(cache) + eps)
rmsprop with momentum
下面是一般形式
m = beta1*m + (1-beta1)*dx
v = beta2*v + (1-beta2)*(dx**2)
x += - learning_rate * m / (np.sqrt(v) + eps)
由於剛開始m值不準確,需要校正,於是使用下面的式子。
# t is your iteration counter going from 1 to infinity
m = beta1*m + (1-beta1)*dx
mt = m / (1-beta1**t)
v = beta2*v + (1-beta2)*(dx**2)
vt = v / (1-beta2**t)
x += - learning_rate * mt / (np.sqrt(vt) + eps)
引數學習 深度學習超引數調整
1 batchsize 每批資料量的大小。dl通常用sgd的優化演算法進行訓練,也就是一次 1 個iteration 一起訓練batchsize個樣本,計算它們的平均損失函式值,來更新引數。2 iteration 1個iteration即迭代一次,也就是用batchsize個樣本訓練一次。3 epo...
深度學習資源鏈結 更新中
神經網路入門 caffe快速入門 cnn的反向傳播 caffe原始碼學習筆記 cnn入門基礎 感知域說的很清楚 caffe使用基礎 星空下的巫師 c 版本 caffe cnn visual connet cnn的視覺化 cnn softmax公式推導 cnn人臉檢測 matconvet cs231 ...
深度學習環境安裝(持續更新)
設定指定的安裝目錄,一般不要選擇預設路徑 在 advance options 選項在 add anaconda to my path environment variable 打鉤 2 配置環境變數 在 系統變數 的path中新增以下3條 注 建立虛擬環境 刪除虛擬環境的操作在第2節描述,環境配置只...