深度學習引數更新

2021-09-23 01:43:04 字數 1765 閱讀 3728

幾種常見的引數更新方式

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節描述,環境配置只...