zoukankan      html  css  js  c++  java
  • 机器学习--梯度下降算法

    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 **********#
  • 相关阅读:
    linux 防火墙相关
    .net安装windows服务和生产webservice
    linq小实例
    C# DataTable 总结
    document对象
    结对-四则运算-开发过程
    课后作业-阅读任务-阅读笔记-1
    课后作业-阅读任务-阅读提问-2
    课后作业-阅读任务-阅读提问-3
    团对-象棋游戏-开发环境搭建过程
  • 原文地址:https://www.cnblogs.com/xueshadouhui/p/12625156.html
Copyright © 2011-2022 走看看