什么是梯度如何理解梯度下降

举报
晋红轻 发表于 2026/04/29 22:40:22 2026/04/29
【摘要】 本文讨论了梯度是什么,如何理解梯度下降

引言

初次接触梯度时,常会看到这样一句话:“梯度指向函数值增加最快的方向”。导数明明有正有负,为什么梯度就一定指向 增加 最快的方向,而不是减小最快的方向?下面我们从定义出发,结合一维与二维的例子,把梯度的直观含义彻底理清。

梯度的数学定义

定义
设多元函数 f(x1,x2,,xn)f(x_1, x_2, \ldots, x_n) 在点 x\mathbf{x} 处可微,则它在该点的梯度记作 f(x)\nabla f(\mathbf{x}),是一个由所有一阶偏导数组成的向量:

f(x)=(fx1fx2fxn)\nabla f(\mathbf{x}) = \begin{pmatrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \cdots & \frac{\partial f}{\partial x_n} \end{pmatrix}

该向量包含了函数在该点沿每个坐标轴方向的变化率。

虽然梯度由各坐标轴方向的变化率组成,但它本身作为一个向量,具有更深刻的几何意义:
梯度向量 f(x)\nabla f(\mathbf{x}) 指向函数值增加最快的方向,其长度就是沿该方向的变化率(最大的方向导数)。

于是,梯度可以自然地分解为「方向」与「变化率大小」的乘积。
f(x)0\nabla f(\mathbf{x}) \neq \mathbf{0},梯度向量的模长(长度)为:

f(x)=(fx1)2+(fx2)2++(fxn)20\|\nabla f(\mathbf{x})\| = \sqrt{ \left(\frac{\partial f}{\partial x_1}\right)^2 + \left(\frac{\partial f}{\partial x_2}\right)^2 + \cdots + \left(\frac{\partial f}{\partial x_n}\right)^2 } \neq 0

此时:

  • 方向(增长最快的单位方向向量)
    将梯度向量除以它的模长,得到指向最速上升方向的单位向量:

    umax=f(x)f(x)=1(fx1)2+(fx2)2++(fxn)2(fx1fx2fxn)\mathbf{u}_{\text{max}} = \frac{\nabla f(\mathbf{x})}{\|\nabla f(\mathbf{x})\|} = \frac{1}{\sqrt{ \left(\frac{\partial f}{\partial x_1}\right)^2 + \left(\frac{\partial f}{\partial x_2}\right)^2 + \cdots + \left(\frac{\partial f}{\partial x_n}\right)^2 }} \begin{pmatrix} \frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \cdots & \frac{\partial f}{\partial x_n} \end{pmatrix}

  • 变化率(沿该方向的方向导数,即最大的变化率)
    这个最大变化率恰好就是梯度的模长:

    最大变化率=f(x)\text{最大变化率} = \|\nabla f(\mathbf{x})\|

因此,梯度向量可以简洁地写成“变化率 × 方向”的形式:

f(x)=f(x)  umax\nabla f(\mathbf{x}) = \|\nabla f(\mathbf{x})\| \; \mathbf{u}_{\text{max}}

f(x)=0\nabla f(\mathbf{x}) = \mathbf{0} 时,函数在该点沿任意方向的方向导数均为 00,此时没有唯一的最速上升方向,上述分解不适用。

一维函数例证

一维情形下,梯度退化为普通的导数。以 f(x)=x2f(x) = x^2 为例(图1):

  • x=2x=2 处,f(2)=4f'(2) = 4,导数为正,表示函数沿 xx 轴正方向(向右)上升(图2)。
  • x=2x=-2 处,f(2)=4f'(-2) = -4,导数为负,表示函数沿 xx 轴负方向(向左)上升(图3)。

在一维中,导数的符号本身就指示了「使函数值增加的方向」。因此,沿着导数所指的方向移动,函数值总是增加的——这正是“梯度指向函数值增加最快的方向”在一维的体现。

二维函数例证

再来看一个二维函数 f(x,y)=x2+y2f(x, y) = x^2 + y^2,其图像为抛物面(图4)。

梯度为:

f=(fx, fy)=(2x, 2y)\nabla f = \left( \frac{\partial f}{\partial x},\ \frac{\partial f}{\partial y} \right) = (2x,\ 2y)

(2,2)(2, 2)

  • 梯度:f(2,2)=(4,4)\nabla f(2, 2) = (4, 4)
  • 方向(单位向量):(4,4)42+42=(12, 12)\displaystyle \frac{(4, 4)}{\sqrt{4^2 + 4^2}} = \left( \frac{1}{\sqrt{2}},\ \frac{1}{\sqrt{2}} \right)
  • 变化率:f=42+42=42\|\nabla f\| = \sqrt{4^2 + 4^2} = 4\sqrt{2}

也就是说,在 (2,2)(2,2) 处沿着 (12,12)(\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}) 方向(即右上方)移动,函数值增长最快(图5)。

(2,2)(-2, 2)

  • 梯度:f(2,2)=(4,4)\nabla f(-2, 2) = (-4, 4)
  • 方向(单位向量):(4,4)(4)2+42=(12, 12)\displaystyle \frac{(-4, 4)}{\sqrt{(-4)^2 + 4^2}} = \left( -\frac{1}{\sqrt{2}},\ \frac{1}{\sqrt{2}} \right)
  • 变化率:f=42\|\nabla f\| = 4\sqrt{2}

(2,2)(-2,2) 处沿着 (12,12)(-\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}) 方向(即左上方)移动,函数值增长最快(图6)。

这些例子直观验证了:无论在哪个点,梯度向量始终指向函数值 增加 最快的方向。

总结与梯度下降的联系

理解了“梯度指向函数值增加最快的方向”之后,在神经网络训练中的梯度下降就变得很自然:我们希望损失函数越来越小,自然就要朝梯度的 反方向 更新参数。

具体来说,假如损失函数为 LL,参数为 pp,则更新规则通常写作:

p.data = p.data - learning_rate * p.grad

或者

p.data += -learning_rate * p.grad
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。