梯度下降算法

作者: 飘涯 | 来源:发表于2018-02-23 11:00 被阅读76次
    • 最优化算法的一种,解决无约束优化问题,用递归来逼近最小偏差的模型。
      关于梯度的概念可参见以前的文章:
      从方向导数到梯度
    • 梯度下降法迭代公式为:


      image.png

    x为需要求解的 值,s为梯度负方向,α为步长又叫学习率
    缺点:靠近极小值的时候收敛速度比较慢;可能会”之字形”的下降;不太 适合处理比较复杂的非线性函数问题。

    • 实例:
      用梯度下降的迭代算法,来逼近函数y=x**2的最值
      代码如下:
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    def f(x):
        return x**2
    def h(x):
        return 2*x
    X=[]
    Y=[]
    
    x=2
    step=0.8
    f_change=f(x)
    f_current=f(x)
    X.append(x)
    Y.append(f_current)
    while f_change>np.e**-10:
        x=x-step*h(x)
        tmp=f(x)
        f_change=np.abs(f_current-tmp)
        f_current=tmp
        X.append(x)
        Y.append(f_current)
    print(X)
    print(Y)
    print(x,f_current)
    fig = plt.figure()
    a=np.arange(-2.15,2.15,0.05)
    b=a**2
    plt.plot(a,b)
    plt.plot(X,Y,"ro--")
    plt.show()
    

    运行结果如下:


    image.png
    • 假如目标函数有未知参数的情况,步骤如下:


      image.png
    • 如何选择梯度下降的步长和初始值
      不同的步长得表现:


      image.png
      image.png
    • 学习率的选择:学习率过大,表示每次迭代更新的时候变化比较大,有可能会跳过 最优解;学习率过小,表示每次迭代更新的时候变化比较小,就会导致迭代速度过 慢,很长时间都不能结
    • 算法初始参数值的选择:初始值不同,最终获得的最小值也有可能不同,因为梯度 下降法求解的是局部最优解,所以一般情况下,选择多次不同初始值运行算法,并 最终返回损失函数最小情况下的结果值

    相关文章

      网友评论

        本文标题:梯度下降算法

        本文链接:https://www.haomeiwen.com/subject/dnntxftx.html