SGD
w=w−lr∗∂ww = w - lr*\partial ww=w−lr∗∂w 其中
lrlrlr是学习速率
∂w=∂loss∂w\partial w = \frac{\partial loss}{\partial w}∂w=∂w∂loss
sgd_momentum
v=mu∗v−lr∗∂wv=mu*v-lr*\partial wv=mu∗v−lr∗∂w
w=w+vw = w + vw=w+v
其中mu∈[0,1]mu \in [0,1]mu∈[0,1]是momentum,一般mu=0.9mu=0.9mu=0.9, vvv是中间变量,令www更新更加平缓
后续改进的思路是不同参数自适应的采用不同的学习速率,比如利用对于前一次变化较大的参数降低起学习速率,保持学习的平滑
rmsprop
cache=decay∗cache+(1−decay)∗(∂w)2cache = decay * cache + (1-decay) * (\partial w)^2cache=decay∗cache+(1−decay)∗(∂w)2
w=w−lr∗∂wcache+ϵw = w - lr * \frac{\partial w}{\sqrt{cache}+\epsilon}w=w−lr∗cache+ϵ∂w
其中
decay∈[0,1]decay \in [0,1]decay∈[0,1] 一般取值0.99
cachecachecache记录∂w\partial w∂w幅度平方值,幅度变化大的参数降低学习速率,令www更新平缓。
随着训练进度,cachecachecache的值逐渐变大,导致实际lrlrlr逐渐降低,学习速率越来越慢,这是一个缺陷。
adam
m=β1∗m+(1−β1)∗∂wm=\beta_1 * m + (1-\beta_1) * \partial wm=β1∗m+(1−β1)∗∂w
mt=m1−β1tm_t = \frac{m}{1-\beta_1^t}mt=1−β1tm
v=β2∗v+(1−β2)∗(∂w)2v=\beta_2*v + (1-\beta_2)*(\partial w)^2v=β2∗v+(1−β2)∗(∂w)2
vt=v1−β2tv_t = \frac{v}{1-\beta_2^t}vt=1−β2tv
w=w−lr∗mtvt+ϵw = w - lr * \frac{m_t}{\sqrt{v_t}+\epsilon}w=w−lr∗vt+ϵmt
其中
ttt是训练进度,比如更新次数,或epoch
β1∈[0,1]\beta_1 \in [0,1]β1∈[0,1] 一般取值0.9
β2∈[0,1]\beta_2 \in [0,1]β2∈[0,1] 一般取值0.999
mmm和vvv分别是平滑后的∂w\partial w∂w和(∂w)2(\partial w)^2(∂w)2
mtm_tmt和vtv_tvt避免训练启动阶段训练速度太慢(因为mmm和vvv初始化都是0,训练最开始的一段时间二者都接近0)