前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习概念:梯度下降

机器学习概念:梯度下降

作者头像
YingJoy_
发布2018-04-04 11:12:06
1.4K2
发布2018-04-04 11:12:06
举报
文章被收录于专栏:应兆康的专栏应兆康的专栏

0. 前言

机器学习中大部分都是优化问题,大多数的优化问题都可以使用梯度下降/上升法处理,所以,搞清楚梯度算法就非常重要

学习梯度,需要一定的数学知识:导数(Derivative)、偏导数(Partial derivative)和方向导数(Directional derivative)。

1. 导数

一张图看懂,导数与微分:

2. 偏导数

3. 方向导数

4. 梯度

梯度的定义如下:

梯度的存在,为了回答一个问题:

函数在变量空间的某一点处,沿着哪一个方向有着最大的变化率

梯度的文字定义如下:

函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,它的模为方向导数的最大值。

注意

  • 梯度是一个向量,有方向有大小
  • 梯度的方向是最大方向导数的方向
  • 梯度的值的最大方向导数的值

梯度即函数在某一点最大的方向导数,函数沿梯度方向,函数的变化率最大。

5. 梯度下降法

既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化目标函数的时候,自然是沿着负梯度方向去减小函数值,来达到我们的优化目标

如何沿着负梯度方向减小函数值呢?因为梯度是偏导数的集合,如下:

由于梯度和偏导数均为向量,由向量的运算法则可知,我们在每个变量轴上减小对应的变量值即可,梯度下降算法可描述为:

Repeat { ​ $x_0:=x_0-\alpha\frac{\partial f}{\partial x_0}$ ​ $\cdots$ ​ $x_j:=x_j-\alpha\frac{\partial f}{\partial x_j}$ ​ $\cdots$ ​ $x_n:=x_n-\alpha\frac{\partial f}{\partial xn}$ ​ $\cdots$ }

由这个可以很清楚的了解梯度下降的过程,类似人在高山上,如何快速下山

  1. 寻找下降速度最快的方向
  2. 向下走
  3. 循环步骤1和步骤2, 直到到达最小值(山底)

在这里,我们还需要了解几个概念:

6. 梯度下降算法详细

梯度下降算法可以有代数法和矩阵法(也称向量法)

相比于代数法,矩阵法更加简洁,这里就不介绍代数法了,感兴趣的读者可以阅读:

[梯度下降(Gradient Descent)小结]

梯度下降算法的矩阵法

这里需要一定的矩阵 求导 知识

首先我们需要确定优化模型的假设函数和损失函数,对于线性回归来说:

假设函数:

损失函数:

算法过程:

8. 梯度下降法和其他无约束优化算法的比较

 在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。

梯度下降法和最小二乘法相比,梯度下降法需要选择步长,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是计算解析解。如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。

梯度下降法和牛顿法/拟牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。但是每次迭代的时间比梯度下降法长。

本周学校准备一次贝叶斯的报告,比较忙,所以这里没有进行Python实践(待补)

之前的文章Logistic 回归算法及Python实现里面有梯度上升算法的实现

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 前言
  • 1. 导数
  • 2. 偏导数
  • 3. 方向导数
  • 4. 梯度
  • 5. 梯度下降法
    • 6. 梯度下降算法详细
      • 8. 梯度下降法和其他无约束优化算法的比较
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档