準備知識(可選擇跳過)
momentum
參數初始化:m:momentum 係數;lr:learning rate 學習率;權重w
計算梯度和更新數度:g(t);v(t) = m*v(t-1)+lr*g(t)
更新參數:w(t) = w(t-1) - v(t)
備註:優點是學習速度快。避免sgd算法梯度更新幅度擺動大的問題。缺點是依賴全局的學習率。
adagrade和RMSprop
adagrade適應性梯度算法(adagrade、adadelta、RMSprop都是梯度自適應算法)
參數初始化:防止分母爲0的很小的數(m);學習率lr;權重w
計算梯度:g(t)
計算累計梯度平方和:G(t) = G(t-1) + g(t)*g(t)
更新參數:w(t) = w(t-1) - lr*g(t)/sqrt(G(t)+m)
備註:累計梯度平方和,使得學習速度具有自適應性。出現頻率高的特徵學習率較小,出現頻率低的學習率較大。缺點是累計梯度平方和最後容易過大,導致訓練提前結束
RMSprop是adagrade的變體:採用歷史累計梯度平方和當前梯度平方的加權平均
參數初始化:防止分母爲0的很小的數(m);學習率lr;權重w;加權係數p;
梯度計算:g(t)
累計梯度:G(t) = (1-p)*G(t-1) +p*g(t)*g(t)
權重更新:w(t) = w(t-1) - lr*g(t)/sqrt(G(t)+m)
備註:善於處理非平穩目標
adam(adaptive moment estimation 自適應矩估計)
G(t) = beta2*G(t-1) + (1-beta2) * g(t)
初始化參數:學習率lr;beta1;beta2;權重w;防止分母爲0的很小的數(e)
計算梯度:g(t)
計算有偏的一階矩估計:m(t) = beta1*m(t-1) +(1-beta1)*g(t)(敲黑板,看看這是不是和momentum一樣)
計算有偏的二階矩估計:G(t) = beta2*G(t-1) +(1-beta2)*g(t)*g(t)(敲黑板,看看這是不是和RMSprop一樣)
一階矩的無偏估計:m'(t) = m(t)/(1-beta1)
二階矩的無偏估計:G'(t) = G(t)/(1-beta2)
參數更新:w(t) =w(t-1) - lr*m'(t)/sqrt(G'(t)+)
備註:結合了Adagrad善於處理稀疏梯度和RMSprop善於處理非平穩目標的優點
參考鏈接:
https://zhuanlan.zhihu.com/p/22252270
https://www.zhihu.com/question/325651810