1\sgd
q=q-a*gt
a是学习率 gt是函数的梯度
也就是沿着梯度的反方向得到下降最快的,最快能找到函数的最值
2 Momentum
然后q=q-mt
3 RMSprop
4 Adam
Adam[6] 可以认为是 RMSprop 和 Momentum 的结合。和 RMSprop 对二阶动量使用指数移动平均类似,Adam 中对一阶动量也是用指数移动平均计算。
然后求解的过程为
将mt=mt/(1-b1)
vt=vt/(1-b2)
q=q-mt*a/(sqrt(vt+0.000000001))
5 Adam解耦权重衰减
def train_adam_jieou():
cur_x = 40
cur_y = 20
lr = 0.003
r_x, r_y = 0, 0 #伪代码中的r
v_x, v_y = 0, 0 #伪代码中的r
alpha = 0.9
alpha1 = 0.99
shuaijian=0.9999
eps = 1e-16
track_x = [cur_x]
track_y = [cur_y]
for i in range(10):
grad_x, grad_y = grad(cur_x, cur_y)
r_x = alpha * r_x + (1 - alpha) * (shuaijian*grad_x)
v_x = alpha1 * v_x + (1 - alpha1) * (shuaijian*grad_x * grad_x)
r_x =r_x /( 1-alpha )
v_x =v_x /( 1-alpha1 )
cur_x =cur_x -(r_x / (np.sqrt(v_x) + eps)) * lr-lr*shuaijian*cur_x
r_y = alpha * r_y + (1 - alpha) * (shuaijian*grad_y)
v_y = alpha1 * v_y + (1 - alpha1) * (shuaijian*grad_y * grad_y)
r_y =r_y /( 1-alpha )
v_y =v_y /( 1-alpha1 )
cur_y =cur_y- (r_y / (np.sqrt(v_y) + eps)) * lr-lr*shuaijian*cur_y
#r_y = alpha * r_y + (1 - alpha) * (grad_y * grad_y)
#cur_y -= (grad_y / (np.sqrt(r_y) + eps)) * lr
track_x.append(cur_x)
track_y.append(cur_y)
#print(track_x)
#print(track_y)
return track_x, track_y
6 adam修正指数移动均值