机器学习之梯度下降

作者: HeartGo | 来源:发表于2017-02-18 20:52 被阅读170次

    梯度下降法是求解无约束最优化问题的一种常用的方法,方法实现简单。
    梯度下降背后的思想是:开始时我们随机选择一个参数的组合(θ0,θ1,...,θn),计算代价函数,然后我们寻找下一个能让代价函数值下降最多的参数组合。我们持续这么做直到到一个局部最小值(local minimum)。

    Paste_Image.png

    例如

    1.目标函数

    Paste_Image.png

    2.代价函数

    Paste_Image.png

    问题:如何选取

    Paste_Image.png

    使得代价函数

    Paste_Image.png

    最小

    思路如下:

    (1)先确定向下一步的步伐大小α,我们称为Learning rate;

    (2)任意给定一个初始值θ0,θ1,...θi;

    (3)确定一个向下的方向,并向下走预先规定的步伐,并更新初始值;

    Paste_Image.png

    (4)当下降的高度小于某个定义的值,则停止下降;此时的θ0,θ1,...θi即为我们学习后得到的目标函数的θ0,θ1,...θi。

    学习速率的影响

    在使用梯度下降的时候,α的选取会影响算法的使用,α的值应该选取合适的值,不能过小,过小,学习效率比较慢,过大可能无法得到目标函数。

    α的选取有如下几种方法

    1.Adagrad

    Paste_Image.png

    其中,α为初始的学习速率,α^t为t次迭代后的学习速率。

    2.或者给一固定值

    α一般取0到1之间

    代码如下:

    x = [(1, 0., 3), (1, 1., 3), (1, 2., 3), (1, 3., 2), (1, 4., 4)]
    # y[i] 样本点对应的输出
    y = [95.364, 97.217205, 75.195834, 60.105519, 49.342380]
     
    # 迭代阀值,当两次迭代损失函数之差小于该阀值时停止迭代
    epsilon = 0.0001
     
    # 学习率
    alpha = 0.01
    diff = [0, 0]
    max_itor = 1000
    error1 = 0
    error0 = 0
    cnt = 0
    m = len(x)
     
     
    # 初始化参数
    theta0 = 0
    theta1 = 0
    theta2 = 0
     
    while True:
        cnt += 1
     
        # 参数迭代计算
        for i in range(m):
            # 拟合函数为 y = theta0 * x[0] + theta1 * x[1] +theta2 * x[2]
            # 计算残差
            diff[0] = (theta0 + theta1 * x[i][1] + theta2 * x[i][2]) - y[i]
     
            # 梯度 = diff[0] * x[i][j]
            theta0 -= alpha * diff[0] * x[i][0]
            theta1 -= alpha * diff[0] * x[i][1]
            theta2 -= alpha * diff[0] * x[i][2]
     
        # 计算损失函数
        error1 = 0
        for lp in range(len(x)):
            error1 += (y[lp]-(theta0 + theta1 * x[lp][1] + theta2 * x[lp][2]))**2/2
     
        if abs(error1-error0) < epsilon:
            break
        else:
            error0 = error1
     
        print  (theta0, theta1, theta2, error1)
    print  (theta0, theta1, theta2)
    print  (cnt)
    

    相关文章

      网友评论

        本文标题:机器学习之梯度下降

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