从 0 开始机器学习 - 手把手用 Python 实现梯度下降法!

机器学习课程也上了一段时间了,今天就带大家从 0 开始手把手用 Python 实现第一个机器学习算法:单变量梯度下降(Gradient Descent)!

我们从一个小例子开始一步步学习这个经典的算法。

一、如何最快下山?

在学习算法之前先来看一个日常生活的例子:下山。想象一下你出去旅游爬山,爬到山顶后已经傍晚了,很快太阳就会落山,所以你必须想办法尽快下山,然后去吃海底捞。

那最快的下山方法是什么呢?没错就是缩成一个球,然后从最陡的方向直接滚下去,可是我们是人不是球,不能直接滚下去,但是可以借鉴这种方式,改变一下策略。

要想最快下山,其实只需要循环执行以下 3 步骤:

  1. 环顾周围找到最陡的一段路
  2. 在最陡的一段路上走一段距离
  3. 重复以上步骤直到山底

假设你拥有找到目前所在位置最陡路线的能力,那么你只需要重复以上步骤就能以最短时间,最短路程下到山底去吃海底捞啦!

这就是梯度下降法的现实例子,下面来正式学习下梯度下降法的基本思想。

二、梯度下降法基本思想

数学上的梯度下降法步骤跟下山的例子一模一样,只不过换成了数学公式具体表达出来而已,这里用个函数图像来形象解释下:

把这个函数图像想象成一座山,此刻你正在山顶,并且要寻找最快的下山路线,那么按照上面讲的下山 3 步骤,你要做的就是找最陡的下山方向,然后走一段路,再找最陡的下山方向,再走一段路,以此类推,最后就得到上面的这条下山路线。

2.1 算法解决什么问题?

我们为了尽快下山,用了梯度下山法;那么对应到数学曲线上,对一个函数应用梯度下降法,就是为了最快地求出函数的全局最小值或者局部最小值;再对应到机器学习问题上,梯度下降法就是为了尽快求出模型代价函数最小值,进而得到模型参数;

所以梯度下降法要解决的问题就是:以最快速度求函数最小值。

2.2 如何用数学公式表达?

先来用公式表达出下山的步骤:

下 一 个 位 置 = 当 前 位 置 − 带 方 向 的 下 山 距 离 下一个位置 = 当前位置 - 带方向的下山距离 =

与下山公式一样,一行公式即可写出梯度下降法公式:

θ j = θ j − α ∂ ∂ θ j J ( θ ) {\theta_{j}}={\theta_{j}}-\alpha \frac{\partial }{\partial {\theta_{j}}}J\left(\theta \right) θj=θjαθjJ(θ)

我们来对照下山的例子,详细解释这个公式:

  • 等式左边的 θ j \theta_j θj 是下一时刻我在山顶的位置:下一函数值
  • 等式右边的 θ j \theta_j θj 是当前时刻我在山顶的位置:当前函数值
  • 学习率 α \alpha α :算法迭代步长
  • − ∂ ∂ θ j J ( θ ) -\frac{\partial }{\partial {\theta_j}}J(\theta) θjJ(θ) 是最快的下山方向:当前时刻函数值下降最快的方向
  • − α ∂ ∂ θ j J ( θ ) -\alpha\frac{\partial }{\partial {\theta_j}}J(\theta) αθjJ(θ) 是当前时刻的打算迈出的距离:算法当前迭代下降的距离
  • J ( θ ) J(\theta) J(θ) 可以理解为你要下的那座山:算法执行的函数

这里的 α \alpha α 在算法中叫做学习率,虽然从名字上不好理解,不过它的作用就是控制算法每次迭代下降的步长,也就是每次下山打算迈开多大步。

你可能疑惑的是下山方向为何加负号,其实在数学上,这个公式 − ∂ ∂ θ j J ( θ ) -\frac{\partial }{\partial {\theta_j}}J(\theta)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值