编程语言
首页 > 编程语言> > sgd Momentum Vanilla SGD RMSprop adam等优化算法在寻找函数最值的应用

sgd Momentum Vanilla SGD RMSprop adam等优化算法在寻找函数最值的应用

作者:互联网

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修正指数移动均值

 

 

 

 

 

 

 

 

标签:alpha1,cur,track,RMSprop,sgd,alpha,shuaijian,grad,SGD
来源: https://blog.csdn.net/tcuuuqladvvmm454/article/details/120587448