首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习之——梯度下降算法

机器学习之——梯度下降算法

作者头像
企鹅号小编
发布2018-01-11 10:41:40
9350
发布2018-01-11 10:41:40
举报
文章被收录于专栏:人工智能人工智能

机器学习算法大都遵从同样的套路:设定需要学习的参数,通过最优化算法来最小(大)化学习目标,从而得到一组最好的待学习参数。例如,线性回归z=ax+by中,参数就是a和b,目标就是z和真值之间的差的平方,通过最小化这一目标,可以得到最优的a和b。

因此,最优化算法在机器学习中扮演了重要角色,而梯度下降则是最为常用的一种最优化方法。

梯度下降算法图示

假定我们要找到使得函数J(θ)最小的θ,即计算下面问题

要怎么做呢?由导数的知识我们知道,一个函数的导数表示当自变量增大时,函数值是变大还是变小。导数大于零时,自变量增大,函数值增大;导数小于零时,自变量增大,函数值减小。

由此可以推出梯度下降的思想:给定初始θ值,计算函数J(θ)的导数,如果导数大于零,那么减小θ,如果导数小于零,那么增大θ,这样函数值就是向减小的方向变化。然后,将增大或减小后的θ值作为下一轮的初始θ值,再计算J(θ)的导数,以此类推,直到找到最小值。

思想简单,但具体实现时还是有一些坑的。

1、如果θ是多个变量,如何计算导数?可以使用偏导数,就是将其他变量视为常数,只对某个变量求导。

2、根据导数只知道要增大还是减小θ,但是要增大或减小多少呢?这就需要设定步长,而这个步长也称为“学习速率”。设定步长的方法多种多样,例如简单的固定为一个常数(通常是1.0),或者随着迭代不断减小学习速率,等等。深度学习里比较常用的Adam算法就是一种自动调整学习率的方法。

3、如何判断何时停止迭代?目前没有公认的最好的方法,通常通过监视训练集和验证集的误差,训练集或验证集的误差不再降低,即停止迭代。

为什么梯度下降使用的这么普遍呢?

一是这个方法实现简单;二是它适用性很广,唯一的要求是目标函数可导;三是它可以取得较好的效果;四是它可以很容易的实现在线化,即输入一个样本就学习一个样本,而不需要等到全部样本都收集到之后才能进行学习。

本文来自企鹅号 - 人工智能技术媒体

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

本文来自企鹅号 - 人工智能技术媒体

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档