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

2021/10/2 17:40:28

本文主要是介绍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修正指数移动均值

 

 

 

 

 

 

 

 



这篇关于sgd Momentum Vanilla SGD RMSprop adam等优化算法在寻找函数最值的应用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程