机器学习--梯度下降算法

  1. 梯度下降算法

    什么是梯度

    梯度:梯度的本意是一个向量,由函数对每个参数的偏导组成,表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向变化最快,变化率最大。

    梯度下降算法原理

    算法思想:梯度下降是一种非常通用的优化算法,能够为大范围的问题找到最优解。梯度下降的中心思想就是迭代地调整参数从而使损失函数最小化。假设你迷失在山上的迷雾中,你能感觉到的只有你脚下路面的坡度。快速到达山脚的一个策略就是沿着最陡的方向下坡。这就是梯度下降的做法:通过测量参数向量 θ 相关的损失函数的局部梯度,并不断沿着降低梯度的方向调整,直到梯度降为 0 ,达到最小值。

    梯度下降公式如下:

    对应到每个权重公式为:

    其中 η 为学习率,是 0 到 1 之间的值,是个超参数,需要我们自己来确定大小。

    算法原理:

    在传统机器学习中,损失函数通常为凸函数,假设此时只有一个参数,则损失函数对参数的梯度即损失函数对参数的导数。如果刚开始参数初始在最优解的左边,

    很明显,这个时候损失函数对参数的导数是小于 0 的,而学习率是一个 0 到 1 之间的数,此时按照公式更新参数,初始的参数减去一个小于 0 的数是变大,也就是在坐标轴上往右走,即朝着最优解的方向走。同样的,如果参数初始在最优解的右边,

    此时按照公式更新,参数将会朝左走,即最优解的方向。所以,不管刚开始参数初始在何位置,按着梯度下降公式不断更新,参数都会朝着最优解的方向走。

    梯度下降算法流程
    1. 随机初始参数;
    2. 确定学习率;
    3. 求出损失函数对参数梯度;
    4. 按照公式更新参数;
    5. 重复 3 、 4 直到满足终止条件(如:损失函数或参数更新变化值小于某个阈值,或者训练次数达到设定阈值)。

    编程要求

    根据提示,使用 Python 实现梯度下降算法,并损失函数最小值时对应的参数thetatheta会返回给外部代码,由外部代码来判断theta是否正确。

    测试说明

    损失函数为:loss=2*( heta-3)loss=2(θ3)

    最优参数为:3.0

    你的答案跟最优参数的误差低于0.0001才能通关。

  2. import numpy as np

  3. import warnings
    warnings.filterwarnings("ignore")
  4. def : gradient_descent(initial_theta,eta=0.05,n_iters=1000,epslion=1e-8):
  5.     #   请在此添加实现代码   #
  6.     #********** Begin *********#
  7.     theta = initial_theta
  8.     i_iter = 0
  9.     while i_iter < n_iters:
  10.         gradient = 2*(theta-3)
  11.         last_theta = theta
  12.         theta = theta - eta*gradient
  13.         if(abs(theta-last_theta)<epslion):
  14.             break
  15.         i_iter +=1
  16.     return theta
  17.     #********** End **********#
原文地址:https://www.cnblogs.com/xueshadouhui/p/12625156.html