版权声明:https://blog.csdn.net/z0n1l2 https://blog.csdn.net/z0n1l2/article/details/85869342
SGD
w=w−lr∗∂w 其中
lr是学习速率
∂w=∂w∂loss
sgd_momentum
v=mu∗v−lr∗∂w
w=w+v
其中
mu∈[0,1]是momentum,一般
mu=0.9,
v是中间变量,令
w更新更加平缓
后续改进的思路是不同参数自适应的采用不同的学习速率,比如利用对于前一次变化较大的参数降低起学习速率,保持学习的平滑
rmsprop
cache=decay∗cache+(1−decay)∗(∂w)2
w=w−lr∗cache
+ϵ∂w
其中
decay∈[0,1] 一般取值0.99
cache记录
∂w幅度平方值,幅度变化大的参数降低学习速率,令
w更新平缓。
随着训练进度,
cache的值逐渐变大,导致实际
lr逐渐降低,学习速率越来越慢,这是一个缺陷。
adam
m=β1∗m+(1−β1)∗∂w
mt=1−β1tm
v=β2∗v+(1−β2)∗(∂w)2
vt=1−β2tv
w=w−lr∗vt
+ϵmt
其中
t是训练进度,比如更新次数,或epoch
β1∈[0,1] 一般取值0.9
β2∈[0,1] 一般取值0.999
m和
v分别是平滑后的
∂w和
(∂w)2
mt和
vt避免训练启动阶段训练速度太慢(因为
m和
v初始化都是0,训练最开始的一段时间二者都接近0)