首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >机器学习笔记,原来梯度下降这么简单

机器学习笔记,原来梯度下降这么简单

作者头像
TechFlow-承志
发布2022-08-26 18:25:36
发布2022-08-26 18:25:36
6960
举报
文章被收录于专栏:TechFlowTechFlow

作者 | 梁唐

大家好,我是梁唐。

之前我们聊了线性回归的公式推导,最后关于参数求解的地方卖了个关子。想要针对函数求极值处的参数值,其实我们有很多方法可以用,除了简单粗暴的公式推导之外,还有牛顿法、拟牛顿法、梯度下降法等许多方法。今天我们来聊聊其中比较简单的梯度下降法。

梯度下降法可以说是机器学习和深度学习当中最重要的方法,甚至可以说是没有之一。尤其是在深度学习当中,几乎清一色所有的神经网络都是使用梯度下降法来训练的。

想要理解梯度下降算法, 首先要理解梯度这个概念,究竟什么是梯度呢?

梯度的定义

我们先来看看维基百科当中的定义:梯度(gradient)是一种关于多元导数的概括。平常的一元(单变量)函数的导数是标量值函数,而多元函数的梯度是向量值函数。多元可微函数{\displaystyle f} 在点{\displaystyle P} 上的梯度,是以{\displaystyle f}{\displaystyle P} 上的偏导数为分量的向量。

这句话很精炼,但是不一定容易理解,我们一点一点来看。

我们之前高中学过导数,但是高中时候计算的求导往往针对的是一元函数。也就是说只有一个变量x,求导的结果是一个具体的值,它是一个标量。

而多元函数在某个点求导的结果是一个向量,比如n元函数,它当中包含了n个变量。那么在某一点求导得到的结果就有n个数,我们可以把这n个数看成是一个向量。这个向量每个分量是对应的变量在该点的偏导数,这个偏导数组成的向量,就是这个函数在该点的梯度。

那么,根据上面的定义,我们可以明确两点,首先梯度是一个向量,它既有方向,也有大小。其次梯度这个向量中的每一个数是对应变量的偏导数。

梯度的解释

维基百科当中还列举了两个关于梯度的例子,帮助我们更好的理解。

第一个例子是最经典的山坡模型,假设我们当下站在一个凹凸不平的山坡上,我们想要以最快的速度下山,那么我们应该该从什么方向出发呢?很简单,我们应该计算一下脚下点的梯度,由于向量的方向可正可负,要下山自然要沿着梯度下降的方向下山。梯度的方向告诉我们下山最快的方向,梯度的大小代表这点的坡度。

第二个例子是房间温度模型,假设我们对房间建立坐标系,那么房间里的每一个点都可以表示成

{\displaystyle (x,y,z)}

,该点的温度是

\phi(x,y,z)

。如果假设房间的温度不随时间变化,那么房间里每个点的梯度表示温度变热最快的方向,梯度的大小代表温度变化的速率。

通过这两个例子,应该很容易理解梯度的方向和大小这两个概念。

公式

梯度下降法

理解了梯度的概念之后,再来看梯度下降法其实就是一张图的事。请看下面这张图。

这里的黑色的曲线表示我们损失函数的函数曲线,我们要做的,就是找到这个最佳的参数x,使得损失函数的值最小。损失函数的值达到最小,也就说明了模型的效果达到了极限,这也就是我们预期的。

我们一开始的时候显然是不知道最佳的x是多少的(废话,知道了还求啥),所以我们假设一开始的时候在一个随机的位置。

假设是图中的x_1 的位置。接着我们对x_1 求梯度。我们之前说了,梯度下降的方向就是该点最陡峭的方向,梯度的大小就是它的陡峭程度。有了梯度之后,就很简单了,我们要做的就是朝着梯度下降,也就是最陡峭的方向向前走一小步。

我们假设,x_1 处的梯度是s_1 ,那么我们将x_1 的值朝着梯度的方向前进一小步。我们通过一个参数\eta 来控制,这里的\eta 称作学习率,它控制的是我们每次迭代的时候超梯度方向前进的距离大小。

\begin{aligned} x_2 &= x_1 + \eta \cdot s_1 \\ x_3 &= x_2 + \eta \cdot s_2 \\ \vdots \\ x_n &= x_{n-1} + \eta \cdot s_{n-1} \end{aligned}

我们通过不停地迭代,来优化参数。理论上来说,这样的迭代是没有穷尽的,我们需要手动终止迭代。什么时候可以停止呢?我们可以判断每一次迭代的梯度,当梯度已经小到逼近于0的时候,就说明模型的训练已经收敛了,这个时候可以停止训练了。

很明显学习率\eta 的选择会影响模型的收敛速度,因为如果学习率很小,那么每次迭代参数的值变化就很小,如果学习率比较大,那么参数值的变化也就比较剧烈,自然需要的迭代次数也就越少。

那么问题来了,学习率应该怎么选呢,是不是越大越好呢?

由于篇幅原因,对于这个问题,我们放在下篇文章当中讨论。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coder梁 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 梯度的定义
  • 梯度的解释
  • 公式
  • 梯度下降法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档