梯度下降法理论与实践
声明:下文中代码实现以上的图片来自2014stanford机器学习视频
理论基础
现在比如有两个参数的损失函数
我们的目的是使之最小也就是得到能够使J函数最小的,,公示表示为:
我们画出当取不同值时J的变化图是这样的
颜色越深代表J值越大。
我们比如随便取一个点(,各等于某值时),此点如图所示:
此时比如我们站在此点上,想要快速到达谷底(也就是使J函数达到极小值)。此时我们放眼望去,环望四周,很自然的向此时坡最陡的方向的下方迈上一步,接着在继续重复我们的过程,直到四周都比当下高 (此时)为止,就是走到谷底(J函数达到极小值),完成目标。
我们来看看我们的路线
这时会不会有人问为什么会是极小值。
这时我们重新找一个点
跟上面的过程一样,我们再走一遍
你瞅瞅,是不是到达另一个谷底。所以说,这种方法找的是局部的最小值,也就是全局的极小值。这种方法就是梯度下降算法。
此时介绍梯度下降算法,简单起见,我们从一个变量开始,比如此时我们的损失函数J()是
随机给取一个值,此点如上图所示。对此点求导:
此时的导数值为正数,我们要向它的相反方向走一步,到达如图所示点
此时的公式表达为:
为learning rate 即学习率,这里表示用来控制步伐的大小,取值范围 (0-1] (一般取值1,0.1,0.01,0.001... 也或者0.3,0.03,0.003...根据情况而定)。
不断的重复上面公式的过程,直到等于0或者特别小(多小,根据实际情况设定)停止。
我们再考虑随机点在左边的情况。比如取点如图所示:
此时的J在点的导数为负数。
此时我们应该向右走,则此时的表达式为
更新后
跟上面的过程一样,直到更新到导数为0或特别小为止。
由此可见,无论导数正负,表达式一样。所以我们规定梯度下降算法的更新过程就是
此时我们具体谈谈:
取值过小,则会有这样的情况:
到达极小值的速度特别慢。
而取值过大,则还会有这种情况:
永远找不到极小值。
所以如果你想在上做优化,可以这样
在坡度大的时候取大值小的时候取小值。(根据实验情况而定)
现在我们再回归到我们的函数中来。
我们对它进行优化的表达式为:
(这里是偏导)
这里有个误区,正确的更新过程是这样的:
等更新完再赋值。
下面的做法是错误的:
更新完的在temp1的更新过程中被调用,此时已经不是之前的了。切记。
代码实践
这是个拟合直线的代码实现。
我们要将数据统一收缩到 [-1 - 1] 之间。
X = ( X - average(X) ) / X.max
Y = ( Y - average(Y) ) / Y.max
为什么要这么做呢?
因为如果不做缩小处理,在矩阵运算时,非常有可能出现无穷大或者无穷小,导致无法计算。
缩小处理可以很容易画出模拟线条。
缩小处理在计算机中处理速度更快。
我们看看图:
这里我设置a = 0.01是为了下面的模拟直线除数不为0设置的。一般情况下,初始化 a = b = 0。(这里a, b就是上面的)
下面进行矩阵化:
上面图片的y1 - y4是预测值
下面代码的Y是真实值
预测值函数
拟合线段形成过程
更新过程
最终的线段是
更多精彩内容,请关注 深度学习自然语言处理 公众号,就是下方啦!跟随小博主,每天进步一丢丢!哈哈!
梯度下降法理论与实践相关推荐
- 机器学习入门(09)— 偏导数、梯度概念、梯度下降法理论和实现
1. 偏导数概念 对于式 4-6 而言 式(4.6)有两个变量,求导数时有必要区分对哪个变量求导数,即对 x0 和 x1 两个变量中的哪一个求导数.另外,我们把这里讨论的有多个变量的函数的导数称为偏导 ...
- 四旋翼姿态解算——梯度下降法理论推导
转载请注明出处:http://blog.csdn.net/hongbin_xu 或 http://hongbin96.com/ 文章链接:http://blog.csdn.net/hongbin_xu ...
- 机器学习-算法背后的理论与优化(part7)--随机梯度下降法概述
学习笔记,仅供参考,有错必究 随机梯度下降法概述 机器学习场景 算法模型和损失函数 一个有监督学习算法或模型实质上是在拟合一个预测函数侧或者称为假设函数,其形式固定但参数 w ∈ R d w \in ...
- python迭代算法_Python实现简单的梯度下降法
Python 实现简单的梯度下降法 机器学习算法常常可以归结为求解一个最优化问题,而梯度下降法就是求解最优化问题的一个方法. 梯度下降法(gradient descent)或最速下降法(steepes ...
- 手算梯度下降法,详解神经网络迭代训练过程
神经网络本质上是一个计算流程,在前端接收输入信号后,经过一层层复杂的运算,在最末端输出结果.然后将计算结果和正确结果相比较,得到误差,再根据误差通过相应计算方法改进网络内部的相关参数,使得网络下次再接 ...
- 梯度下降法的神经网络容易收敛到局部最优,为什么应用广泛?
文 | Summer Clover@知乎 本文已获作者授权,禁止二次转载 这是Deep Learning Theory里很基本也很核心的一个问题. 在这个问题上,初学者容易被入门教学误导,非此研究方向 ...
- 通俗易懂讲解梯度下降法!
Datawhale干货 作者:知乎King James,伦敦国王大学 知乎 | https://zhuanlan.zhihu.com/p/335191534 前言:入门机器学习必须了解梯度下降法,虽然 ...
- 优化:梯度下降法、牛顿法、共轭梯度法
1.基本概念 1.1 方向导数 1.2 梯度的概念 如果考虑z=f(x,y)描绘的是一座在点(x,y)的高度为f(x,y)的山.那么,某一点的梯度方向是在该点坡度最陡的方向,而梯度的大小告诉我们坡度到 ...
- 2.4 梯度下降法-深度学习-Stanford吴恩达教授
←上一篇 ↓↑ 下一篇→ 2.3 Logistic 回归损失函数 回到目录 2.5 导数 梯度下降法 (Gradient Descent) 梯度下降法可以做什么? 在你测试集上,通过最小化代价函数(成 ...
- 吴恩达机器学习笔记:(三)梯度下降法
梯度下降法 知识点: 偏导数.微积分.局部最优解 概念介绍 梯度下降法目的是为了"下降",下降的方法是按照"梯度".比如你在一座山上,当前你只能迈出一步,如何走 ...
最新文章
- 不能跳过的《程序员的职业素养》(The Clean Coder)中的一个章节
- Thinking in C++ Notes 名字控制
- vs2008编译中文变量名的lua解释器环境
- 【数据库】数据库单表对比
- 魔兽 如何屏蔽F1键弹出帮助菜单
- java限制发送短信次数_使用java发送短信验证码码,出现流量限制怎么办?急急急...
- vue 入门环境搭建
- 中国石油大学(华东)计算机科学与技术,2017年中国石油大学(华东)函授本科计算机科学与技术专业...
- 解决ifconfig没有网卡问题
- PHP 和 AJAX MySQL 数据库实例
- Matter.js 2D 物理引擎试玩报告
- 【实验室顾问】俞扬教授 (CCF-IEEE CS青年科学家奖获得者)
- mongodb与mysql相比的优缺点
- 解决一例:“无法删除文件,无法读源文件或磁盘”
- 5个最佳的3D游戏开发工具
- HFSS求解类型和求解设置
- matlab中二维插值中cubic方法的实现原理(个人见解)
- 路由器wan口ip地址_如何在没有浏览器的情况下查找外部或WAN IP地址?
- 一个十人开发团队的人员安排
- 使用opengl实现爆炸特效
热门文章
- 解决在极光推送的时候会出现一个 JPush提示:缺少统计代码
- IOS推送通知的实现步骤
- Codeforces Good Bye 2015 D. New Year and Ancient Prophecy 后缀数组 树状数组 dp
- MyEclipse 代码自动提示功能失效 提示No Default Proposals 或 no completions available 的解决方法 转...
- 数据保密-第三代透明加密技术
- Node.js 应该用在什么地方
- dpkg:处理 xxx (--configure)时出错解决办法,也可用于卸载软件出错的情况
- AutoMapper不用任何配置就可以从dynamic(动态)对象映射或映射到dynamic对象。
- 在Linux上配置xampp后远程访问域名报错
- asp.net mvc在Model中控制日期格式