机器学习故事汇-梯度下降

原创 2017年09月01日 10:19:12

机器学习故事汇-梯度下降

【咱们的目标】系列算法讲解旨在用最简单易懂的故事情节帮助大家掌握晦涩无趣的机器学习,适合对数学很头疼的同学们,小板凳走起!

今天咱们的故事继续上一次线性回归来说,还不熟悉的小伙伴机票在这!机票直达-线性回归

这里写图片描述
当时咱们怎么唠的,是不是很多情况下要求解的目标没办法直接求呀!那该怎么办呢?咱们来用机器学习中最常用的套路-优化求解,也就是一步一步朝着最优解的方向前进!

这里写图片描述
首先给出目标函数(还记得线性回归中的目标函数吗?)也就是我们要达到的目标是使得目标函数最小(最小对应着梯度下降问题,也就是下山,那么最大也就是梯度上升,求极大值)可以把我们的优化目标看成一座山,山是由我们两个参数组成的,从上图可以看出在山中有一个山谷的最低点,这个最低点所对应的参数就是我们要求解的值!

那该怎么求解呢?下山要一步一步来,第一步要找到合适的下山方向,也就是参数所对应的梯度方向(偏导)因为我们要沿着最快的方向去下山,所以梯度的方向是最合适的(多个参数的时候需要各自求其偏导)。找到方向之后我们就该实际的去走啦,那一次走多大呢?经验表明一次走那么一小小小小步是比较合适的,因为如果步伐太大容易偏离全局最优解只得到局部最优解。方向与步长都搞定了,接下来按着我们设计好的路线更新参数就可以啦!

这里写图片描述
下山的方式也有很多种,我们来对比一下。
批量梯度下降:如上式需要综合考虑所有养那本,这就太慢了,但是效果还是蛮好的。
随机梯度下降:观察发现,每一次进行参数更新,只选择了一个样本,这样速度极快,但是代价就是一旦样本有瑕疵,会对结果产生很大的干扰!所以随机梯度下降会产生很大的浮动。
小批量梯度下降:这个就友好多了,综合了上面两位的优缺点,在迭代的时候选择一批(32,64,128比较常见)个样本来平均计算梯度的更新方向,这个就是现在应用最广的梯度下降方法啦!一个字,实用!

这里写图片描述

接下来我们再来研究一下步长(学习率)对结果产生的影响,从图中可以看到很多条线并且它们之间有着明显的差异,为啥模型不收敛!效果不好!没达标!罪魁祸首就是学习率了,它对我们结果会产生非常大的影响,一般情况下我们都是用较小的学习率,较多的迭代次数来满足它!

这里写图片描述
这张图是一个在真实数据集下使用逻辑回归进行迭代的目标函数变化情况,可以看到当我们使用梯度下降的时候目标函数最终达到了一个收敛状态,现在已经最好了吗?我们可以再增大些迭代次数再看看!

这里写图片描述
继续增大迭代次数,发现目标函数又发生了变化,所以要让模型更完美,需要更多轮次的训练!我们再来对比下不同的梯度下降策略!

这里写图片描述
这张图看起来有点乱呀,没有达到熟练状态,损失函数值还在乱蹦跶,这个就是随机梯度下降的结果,可以看出来这样的模型是不好的,只用一个样本来更新参数是不够的!所以现在我们很少使用随机梯度下降来解决实际问题。(那真的没办法用它了吗?也可以代价就是用极小的学习率配上极大的迭代次数,那为啥不用小批量的呢?)

这里写图片描述
最后的这张图就是收尾图啦,首先观察只用了4000次迭代就比之前的效果要好很多!这里做了如下两个工作。
(1):对数据进行了标准化,让数据各个特征均值为0方差为(数据预处理的常规套路)
(2):使用了小批量梯度下降进行迭代(保证了收敛性同时也加快了速度)
两个简单的操作就使得我们的模型效果快速达到了收敛状态,请记住这俩套路,你会一直沿用下去的!

更多精彩内容在这里啦!

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

RecyclerView实现悬浮吸顶

使用RecyclerView实现悬浮吸顶效果

第四十六篇:MAC下使用 Node.js 实现一个 WebServer 服务器

引序: Node.js 采用一系列“非阻塞”库来支持事件循环的方式。Node.js是一个服务器端 JavaScript 解释器 , 也就是说 Node.js 是一个支持 JavaScript 语法编写...

异步新书书讯-8月特刊

8月异步新书,大咖书集中出版,《深度学习》中文版领衔经典著作不断,异步小编整理了13本新书目录: 深度学习 奔跑吧 Linux内核 爱上Android Android Gradle权威指南 机器学习W...

XAMPP各个版本配置

XAMPP这集成环境也很不错 如果你的PHP代码有加密部分,而Zend Guard 5.2加密的代码不能用5.3解密, 只有下载最后一个PHP5.2版本的xampp 1.7.1,并改动...

PHPWAMP自启异常,服务器重启后Apache等服务不会自动重启的原因分析

PHPWAMP是我开发的一款集成了VC的纯绿色集成环境,支持自定义设置php版本、多版本同时运行、强制修改任何环境数据库密码、一键去除域名非80端口、强制卸载任意环境、强制解除环境阻碍、自动定期任务系...
  • Lccee
  • Lccee
  • 2017-02-16 11:28
  • 364727

夕拾朝花——我的2016

夕拾朝花——我的2016走在北航的林间小道上,两边稀稀落落侥幸残留几片枯叶在冷风中瑟瑟抖动,北京 的冬日就是这样,异显凄凉。我常想在纷扰中寻出一点闲静来,然而委实不容易。趁着圣诞的间隙,从快节奏的生活...
  • yzzst
  • yzzst
  • 2016-12-24 23:53
  • 13384

Xamarin android如何调用百度地图入门示例(一)

Xamarin android如何调用百度地图api 进行定位的显示 新建项目 Binging Labrary(android) 下载百度地图 --Android定位SDK Binging L...

xamarin android异步更新UI线程

UI线程简单了解 一些从事web开发的同学,可能对UI线程没有这个概念,没办法,毕竟“UI线程”这个概念只存在一些客户端(window客户端软件、app等)。其实android在子线程中更新UI线程,...

程序员的八重境界

看到一篇有趣的文章The Eight Levels of Programmers。以前似乎看过不少这种程序员的多少个级别、境界,但这篇语言很风趣,而且分类比较细化,让人觉得挺合情合理、无法反驳的。绝大...
  • dc_726
  • dc_726
  • 2017-08-31 04:58
  • 26197

RabbitMQ教程之php-amqplib(四)订阅、发布

Publish/Subscribe using php-amqplib 在上一节中我们创建了一个工作队列。在工作队列背后的假设是每个任务都交付给一个工作进程处理。在这一节中,我们会做一些完全不同的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)