今天我们就来介绍用来优化代价函数的梯度下降算法(gradient descent algorithm)。

1 原理

那梯度下降究竟为何方神圣?我来用最通俗的语言来介绍下:

假设你站在华山之巅,你现在想以最快速度下山,那你肯定是找一条最陡峭的路走。你环顾四周,找到了一条路线,恩,这个方向是最陡的。于是你就出发了,走了一会发现,这个方向不是最陡的路了。你就停下来,换了个最陡的方向,继续往下走。重复这个步骤,你最终到达了山脚下。

那么,你从山顶到山脚的整个下山的过程,就是梯度下降。

为了在线性回归中应用梯度下降,我们先来回顾下线性回归模型的代价函数,它长这个样子:

其中,f(x)为

注意,我们变量的上标是指样本数量,从1到m;下标指特征数量,从0到n。

我们的目标是

即在J(w)取最小值时,所对应的w值。这时,梯度下降法就上场了,用公式表示为:

其中,“:=”为赋值的含义;α为学习速率,又叫步长,可以理解为我们下山时每走一步的距离;α右边的是J(w)对w求的偏导(偏导就是对w向量中的每个元素分别求导)。

这个公式的含义就是,先初始确定一个w的值,然后用(1)式计算新的w值,反复迭代。我们不断更新参数w的值,直到J(w)取得最小值时,停止迭代。

我们先把(1)式中J(w)对w的偏导求出来,会容易理解些:

将(2)式代入(1)式,可得

这就是线性回归中的梯度下降算法。最后,我手画一张图来把梯度下降的原理大概表示下:

如上图,我们先确定一个w,然后按步长α一步一步减小w的值。最后当w取某一值时,J(w)取得最小值,任务就完成了。

说到这里,可能大家就有疑问了,梯度下降的公式(1)到底是怎么来的呢?别急,我们马上就来推导。

2 推导

首先,我们需要泰勒近似定理的一阶展开式:

上边那个倒三角符号表示梯度,就是对w求偏导的意思。从上式不难看出:

也就是说:

上式说明了什么呢?注意到w和▽J(w)均为向量,也就是说,参数w变化的方向与梯度方向之间的夹角大于90°。我们希望J(w)每次迭代的变化量越大越好,那什么时候达到最大呢,就是参数w的变化量与梯度方向正好相反的时候,也就是二者的夹角达到180°的时候。我们用公式来说明下:

也就是说,两个向量的点积等于它们的模相乘,再乘以两个向量的夹角α。不难看出,当cosα=-1时,也就是α为180°时,两个向量的点积取到负值最大。

因为两个向量方向相反,故我们可推出:

其中α右边的为单位向量,可将梯度的模与阿尔法合并,简化为:

移项,可得:

这就是我们的梯度下降公式(1),大功告成。最后我们放一张动图来看下梯度下降的效果(图片来自于网络):

下篇我会介绍有关模型拟合数据时产生的不利情况,以及如何避免这种情况发生,敬请期待。

更多干货内容,欢迎关注今日头条账号“人人都会机器学习”;你也可以搜索知识星球“自学机器学习”,里面也有精彩内容;还可以关注公众号:“数据实干家”,为你献上数据大餐。

梯度下降算法动图_梯度下降算法原理及推导相关推荐

  1. 梯度下降算法动图_梯度下降算法原理及代码实现

    1 概述 梯度下降(Gradient Descent)在机器学习中是很常用的算法,它不仅被用在了线性回归上,还被广泛应用于机器学习的众多领域,它的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小 ...

  2. 梯度下降算法动图_一文读懂梯度下降算法

    这篇博文主要讲解下梯度与方向导数的关系.等值线图中梯度的表示,以及梯度的应用.因涉及太多高数的知识点,在此就不一一详述了,只是简单梳理下知识点,有所纰漏还望纠正指出,文末附有参考文献,借图. 一.方向 ...

  3. 梯度下降算法动图_一文看懂常用的梯度下降算法

    概述 梯度下降算法(Gradient Descent Optimization)是神经网络模型训练最常用的优化算法.对于深度学习模型,基本都是采用梯度下降算法来进行优化训练的.梯度下降算法背后的原理: ...

  4. 梯度的直观理解_梯度下降最直观的理解

    最近在学习机器学习,入门第一课就是「梯度下降」.看了不少教程都没有很好地理解,直到看到下面这篇文章,算是通俗易懂地理解了. 作者:六尺帐篷 链接:https://www.jianshu.com/p/c ...

  5. python 加载动图_在浏览器中使用TensorFlow.js和Python构建机器学习模型(附代码)...

    大数据文摘授权转载自数据派THU 作者:MOHD SANAD ZAKI RIZVI 本文主要介绍了: TensorFlow.js (deeplearn.js)使我们能够在浏览器中构建机器学习和深度学习 ...

  6. python梯度下降法实现线性回归_梯度下降法的python代码实现(多元线性回归)

    梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...

  7. python梯度提升回归树_梯度提升回归树(GBDT)

    梯度提升回归树(GBDT) 发布时间:2018-08-30 13:22, 浏览次数:1024 , 标签: GBDT 一.从Boosting思想开始 1.梯度提升回归树是一种从它的错误中进行学习的技术. ...

  8. 哪个相机可以拍gif动图_直接拍摄gif动图的手机app你见过吗

    今天也要不专业的为大家推荐一款相机应用--极相机. 响应快 极相机虽然体积小但是性能*, 反应奇快,拍摄照片和录制视频的速度甚至比系统相机还快,而且可以直接关闭拍摄声音,这也是推荐它很重要的一个原因. ...

  9. 加载gif动图_【知乎编辑技巧】GIF动图 的插入 2020.05

    GIF动图,相比视频,打开的成本会更低一些,能够展示有限的动画和过程 我研究了一下如何插入比较高画质的GIF @知一声 考虑在PC端价格视频转动图的功能吗~ 有个前提-- 除非GIF带来的阅读提升感受 ...

最新文章

  1. frame框架的显示隐藏操作 (转)
  2. pandas入门(1)
  3. 查询条件中含有加号_excel中最全的多条件查询方法都在这里了
  4. python中的递归函数是什么_讲解Python中的递归函数
  5. 算法 --- 顺序查找、二分查找的js实现
  6. 路由器下一跳地址怎么判断_网络基本功三:细说路由器
  7. 开放接口加密方案_27种开放式解决方案,适用于所有教育
  8. 6.Python学习笔记:[enumerate元素加序号;isdigit()像数字;len()计算长度]
  9. 数据结构笔记(八)-- 链式栈
  10. 二分--1043 - Triangle Partitioning
  11. windows10提权
  12. 【笔记】西门子1200PLC和V90伺服电机连接
  13. 京东自营,你TM太坑了。
  14. Redis入门总结(三):redis实现分布式锁的正确姿势
  15. 使用 Python 自动识别防疫二维码
  16. 如何给电脑重装系统--一点通
  17. Set集合及源码分析
  18. AngularJS博友的笔记教程
  19. xampp linux教程,xampp for linux
  20. android的环境搭建

热门文章

  1. Python--根据计算公式:BMI = 体重(kg) / 身高(m)^2判断身体状况
  2. #午安,努力#11.30
  3. 数学基础--高斯分布详解
  4. 如何使用常亮光源设定相机白平衡
  5. 适合大学生的笔记软件评测:云笔记.离线笔记、手写笔记、写作软件
  6. [RK3288][Android6.0] 设置中通过Sensor旋转显示画面小结
  7. 【工程化】icon图标的获取与使用
  8. Vulkan_骨骼动画的实现
  9. 协同办公系统解决方案
  10. 【NOI OJ】 2.6 动态规划-背包 4978 宠物小精灵之收服