梯度与梯度下降法

  • 1 前言
  • 2 导数
  • 3 导数与偏导数
  • 4 导数与方向导数
  • 5导数与梯度
  • 6 导数与向量
  • 7 梯度下降法
  • 8 梯度下降法与机器学习
  • 9 梯度下降法的缺点
  • 10 补充:向量函数求导的问题
    • 10.1对标量求导
  • 10.2对向量求导

1 前言

 机器学习中的大部分问题都是优化的问题,而绝大部分问题都可以使用梯度下降法处理,那么搞懂什么是梯度,什么是梯度下降法就非常重要了,这是基础中的基础,也是必须掌握的概念.

2 导数

一张图读懂导数与微分

导数定义如下:

反映的是函数y=f(x)在某一点沿着x轴的正方向的变化率/变化趋势.直观地看,也就是在x轴上某一点处,如果f(x)>0,说明f(x)的函数值在x点沿着x轴(方向)正方向是趋于增加的,相应的f(x)<0,说明函数f(x)的值在x点沿着x轴(方向)正反向趋于减少.

3 导数与偏导数

偏导数的定义如下:

导数与偏导数的本质一致,都是当自变量的变化量趋于0时,函数值的变化量与自变量比值的极限,直观地说,偏导数也就是函数在某个点沿着坐标轴(xi方向)正方向的变化率(如上面公式是沿着xj轴(方向)的变化率).同时如果一个函数有多个自变量(xi)时,某个点是有多个方向所对应的偏导数的.

4 导数与方向导数

方向导数的定义如下:

在前面导数与偏导数的定义中,均是沿着坐标轴正方向讨论函数的变化率,那么当我们讨论函数沿任意方向的变化率时,也就引出了方向导数的定义,即某一点在某个趋近方向上的导数值.
通俗的解释:
 我们不仅要知道函数在坐标轴正方向上的变化率(即偏导数),而且还需要知道设法求得函数在其他特定方向上的变化率,而方向导数就是函数在其他特定方向上的变化率.
 特定方向:方向导数中画黑线的就是一个方向,上图定义的就是函数某点在l方向的方向导数.而

就是这个点沿着l方向,分别在x0轴,x1轴…xn轴方向的增量.

5导数与梯度

梯度的定义如下:

梯度的提出只为回答一个问题:
函数在变量空间的某一点处,沿着哪一方向有最大的变化率?
梯度的定义如下:
 函数在某一点的梯度是这样一个向量,它的方向与其取得最大方向导数的方向一致,而它的模为这个点方向导数的最大值.
这里注意三个点:
 梯度是一个向量,即有方向有大小
 梯度的方向是最大方向导数的方向
 梯度的值是最大方向导数的值
知道了函数在这个点的梯度,就相当于知道函数在这个点方向导数最大值的方向,沿着这个方向的负方向最大化的减小函数.梯度下降法就是用的这个原理.

6 导数与向量

提问:导数,偏导数,方向导数是向量么?
向量的定义是有方向,有大小的量
从前面的定义可以这样看出,偏导数与方向导数描述是函数在某一点沿着某个方向的变化率,也就是具有方向和大小的.因此从这个角度来理解,我们可以把偏导数与方向导数看成一个向量,向量的方向就是变化率的方向,向量的模,就是变化率的大小
沿着这一思路来理解梯度:
梯度即函数在某一点最大的方向导数,函数沿着梯度方向函数有最大的变化率

7 梯度下降法

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

同时梯度与偏导数都是向量,那么参考向量运算法则,我们在每个变量轴上减小对应变量值即可,梯度下降法可以描述如下:

对这里的理解:
此时函数f(x)在某一点处确定它的梯度,此时函数如果沿着梯度方向的负方向下降,学习步长为α(通常为0.1或0.01),函数值的下降是最快的.而右边α与各轴偏导数的乘积可以看做f(x)沿着梯度负方向下降时,对应各轴的增量(增量导致x0…xn的变化必然会导致损失函数取值的减小).当下降到另一点时,需要重新计算当前点的梯度与再次迭代此函数值的变化,所以需要一个repeat的过程.从而找到函数f(x)的最小值.
取函数在某一点的负梯度方向来降低函数值:如图所示

8 梯度下降法与机器学习

 上文提到的函数就可以理解为机器学习中的损失函数/目标函数.自变量x1,x2…xn就可以理解为损失函数中需要优化的参数,通过不断的优化参数(更新x1,x2…xn),找到损失函数最小的那个点.
 自变量xi有时候与特征相对应,有时候与别的对应,具体要看损失函数是怎么定义的.

9 梯度下降法的缺点

1 靠近极小值时收敛速度减慢
2 直线搜索时可能会产生一些问题
3 可能会”之字形”地下降

10 补充:向量函数求导的问题

首先,向量求导只是矩阵求导的一个特例而已.

10.1对标量求导

1.向量对标量求导,结果是个向量
事实上就是向量的每一个元素对标量求导,举个例子对于y(x)=(y1,…,yn),其中x是个标量:

2.矩阵对标量求导,结果是个矩阵
事实上也就是矩阵的每一个元素对标量求导.对于矩阵Y(x)=(yij):

10.2对向量求导

1.标量对向量求导,结果是向量
事实上这就是所谓的Gradient,即对于一般标量函数f(x),其中x=(x1,…,xn):
,有时候也记为▽f
以上的向量同时指代行向量与列向量
2.向量对向量求导,结果是矩阵
行向量对列向量求导:

列向量对行向量求导:

行向量对行向量求导:

所以结果向量中的每一个元素都是一个向量对标签求导
列向量对列向量求导:

相当于结果向量中的每一个元素都是一个梯度.
3.矩阵对向量求导,结果是个三维object,先来个gradient,然后其中每个元素都是个matrix.

梯度与梯度下降法详解相关推荐

  1. 批量梯度下降python实现_python实现梯度下降算法的实例详解

    python版本选择 这里选的python版本是2.7,因为我之前用python3试了几次,发现在画3d图的时候会报错,所以改用了2.7. 数据集选择 数据集我选了一个包含两个变量,三个参数的数据集, ...

  2. 梯度下降 Gradient Descent 详解、梯度消失和爆炸

    1.什么是梯度 在微积分中,对多元函数的参数求∂偏导,把求得的各个参数的偏导数以向量形式写出来即为梯度. 例如对于函数f(x,y),分别对x,y求偏导,求得的梯度向量就是 (∂f/∂x, ∂f/∂y) ...

  3. 逻辑回归梯度下降法详解

    引言 逻辑回归常用于预测疾病发生的概率,例如因变量是是否恶性肿瘤,自变量是肿瘤的大小.位置.硬度.患者性别.年龄.职业等等(很多文章里举了这个例子,但现代医学发达,可以通过病理检查,即获取标本放到显微 ...

  4. 随机梯度下降与动量详解

    1. SGD图示 红色表示SGD的收敛路径,棕色表示梯度下降的收敛路径.普通的GD算法就是计算出每一时刻最陡的下降趋势(梯度),SGD在随机挑选某一分量的梯度方向进行收敛,详细解释可继续往下看. 2. ...

  5. 深度学习归一化算法详解(BN,LN,IN,GN)

    目录 一.Batch Normalization(BN) 1.1为什么提出BN? 1.2BN的基本原理和公式 1.3BN在神经网络中的实现 1.4BN的优点和缺点 二.LN,IN,GN的原理和适用范围 ...

  6. 详解梯度下降法的三种形式BGD、SGD以及MBGD

    在应用机器学习算法时,我们通常采用梯度下降法来对采用的算法进行训练.其实,常用的梯度下降法还具体包含有三种不同的形式,它们也各自有着不同的优缺点. 下面我们以线性回归算法来对三种梯度下降法进行比较. ...

  7. python实现线性回归之梯度下降法,梯度下降详解

    线性回归的有关概念已在笔者相关文章中进行介绍.本篇内容将介绍梯度下降(BGD)相关内容. 1.梯度下降 梯度下降常用于机器学习中求解符合最小损失函数的模型的参数值,梯度下降也是BP神经网络的核心,本文 ...

  8. pytorch自动求梯度—详解

    构建深度学习模型的基本流程就是:搭建计算图,求得损失函数,然后计算损失函数对模型参数的导数,再利用梯度下降法等方法来更新参数.搭建计算图的过程,称为"正向传播",这个是需要我们自己 ...

  9. 3. 梯度提升决策树(GBDT)详解

    一.提升树 以决策树为基函数的提升方法称为提升树.其中,分类问题采用二叉分类树,回归问题采用二叉回归树.sklearn中的提升树采用的是CART树.模型可以表示为决策树的加法模型: 其中,表示决策树, ...

最新文章

  1. 一个菜鸟程序猿--再谈六月坚持英语学习
  2. 使用VSCode连接到IBM Cloud区块链网络
  3. spring-boot 速成(8) 集成druid+mybatis
  4. spring可用于数据层吗_Spring XD用于数据提取
  5. ip受限 linux_从linux源码看epoll及epoll实战揭秘
  6. JVM快速调优手册v1.0
  7. java苹果沙盒验证参数问题_php – iOS7 – 收据未在沙盒验证 – 错误21002(java.lang.IllegalArgumentException)...
  8. mysql之jdbc连接数据库和sql注入的问题
  9. 计算机控制系统电阻加热课设,计算机控制系统课程设计资料.doc
  10. 图书馆管理系统的开发
  11. 人工智能 一种现代方法 第9章 一阶逻辑的推理
  12. handsome主题添加服务器信息,Typecho handsome主题一言接口修改,使用自己的一言服务...
  13. Linux运维工程师发展
  14. 宝莱坞机器人 西瓜_《宝莱坞机器人之恋》电影完整版免费在线观看_2010西瓜影音 - 辛集电影院...
  15. 创业圈的钱都去哪儿了?AI算法正帮Facebook成为大赢家
  16. Python自定义一个异常类【注释详细】
  17. oracle leg,[LEG引擎]英雄合击数据库
  18. 微软对联服务器关闭了吗,不只对联,现在微软还能自动生成绝句
  19. 《20年后,你靠什么生存(孙继滨)》讲座观后感 转
  20. Android中android:digits限制无效原因

热门文章

  1. ·MySQL数据库管理(SQL操作命令,解决忘记密码,设置用户权限)
  2. python pip安装失败vtk_安装最新的VTK库验证安装出错该怎么解决
  3. python mysql library popular_python之mysql入门详解(四)
  4. 在python中定义类时、运算符重载_python自定义类运算符重载
  5. python中parse是什么_python中的configparse学习笔记
  6. python如何让图片镜像翻转_98后常春藤学霸林之秋,一作拿下CVPR最佳论文提名,首次挑战图片翻转不变性假设...
  7. 防止mysql拷贝_转载:mysql复制优化
  8. c语言程序设保安值班,保安值班系统
  9. java面试题二十九 多线程数据共享问题
  10. C实现二叉树的先序遍历,中序遍历,后序遍历