引言
初次接触梯度时,常会看到这样一句话:“梯度指向函数值增加最快的方向”。导数明明有正有负,为什么梯度就一定指向 增加 最快的方向,而不是减小最快的方向?下面我们从定义出发,结合一维与二维的例子,把梯度的直观含义彻底理清。
梯度的数学定义
定义
设多元函数 f(x1,x2,…,xn) 在点 x 处可微,则它在该点的梯度记作 ∇f(x),是一个由所有一阶偏导数组成的向量:
∇f(x)=(∂x1∂f∂x2∂f⋯∂xn∂f)
该向量包含了函数在该点沿每个坐标轴方向的变化率。
虽然梯度由各坐标轴方向的变化率组成,但它本身作为一个向量,具有更深刻的几何意义:
梯度向量 ∇f(x) 指向函数值增加最快的方向,其长度就是沿该方向的变化率(最大的方向导数)。
于是,梯度可以自然地分解为「方向」与「变化率大小」的乘积。
设 ∇f(x)=0,梯度向量的模长(长度)为:
∥∇f(x)∥=(∂x1∂f)2+(∂x2∂f)2+⋯+(∂xn∂f)2=0
此时:
-
方向(增长最快的单位方向向量)
将梯度向量除以它的模长,得到指向最速上升方向的单位向量:
umax=∥∇f(x)∥∇f(x)=(∂x1∂f)2+(∂x2∂f)2+⋯+(∂xn∂f)21(∂x1∂f∂x2∂f⋯∂xn∂f)
-
变化率(沿该方向的方向导数,即最大的变化率)
这个最大变化率恰好就是梯度的模长:
最大变化率=∥∇f(x)∥
因此,梯度向量可以简洁地写成“变化率 × 方向”的形式:
∇f(x)=∥∇f(x)∥umax
当 ∇f(x)=0 时,函数在该点沿任意方向的方向导数均为 0,此时没有唯一的最速上升方向,上述分解不适用。
一维函数例证
一维情形下,梯度退化为普通的导数。以 f(x)=x2 为例(图1):

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


在一维中,导数的符号本身就指示了「使函数值增加的方向」。因此,沿着导数所指的方向移动,函数值总是增加的——这正是“梯度指向函数值增加最快的方向”在一维的体现。
二维函数例证
再来看一个二维函数 f(x,y)=x2+y2,其图像为抛物面(图4)。

梯度为:
∇f=(∂x∂f, ∂y∂f)=(2x, 2y)
点 (2,2) 处
- 梯度:∇f(2,2)=(4,4)
- 方向(单位向量):42+42(4,4)=(21, 21)
- 变化率:∥∇f∥=42+42=42
也就是说,在 (2,2) 处沿着 (21,21) 方向(即右上方)移动,函数值增长最快(图5)。

点 (−2,2) 处
- 梯度:∇f(−2,2)=(−4,4)
- 方向(单位向量):(−4)2+42(−4,4)=(−21, 21)
- 变化率:∥∇f∥=42
在 (−2,2) 处沿着 (−21,21) 方向(即左上方)移动,函数值增长最快(图6)。

这些例子直观验证了:无论在哪个点,梯度向量始终指向函数值 增加 最快的方向。
总结与梯度下降的联系
理解了“梯度指向函数值增加最快的方向”之后,在神经网络训练中的梯度下降就变得很自然:我们希望损失函数越来越小,自然就要朝梯度的 反方向 更新参数。
具体来说,假如损失函数为 L,参数为 p,则更新规则通常写作:
p.data = p.data - learning_rate * p.grad
或者
p.data += -learning_rate * p.grad
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)