news 2026/3/9 19:02:03

把微积分讲成深度学习的“方向盘”:导数、偏导、梯度与链式法则一篇打通(D2L 2.4 学习笔记)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
把微积分讲成深度学习的“方向盘”:导数、偏导、梯度与链式法则一篇打通(D2L 2.4 学习笔记)

📺B站视频讲解(Bilibili):博主个人介绍

📘《Yocto项目实战教程》京东购买链接:Yocto项目实战教程

📘加博主微信,进技术交流群jerrydev


把微积分讲成深度学习的“方向盘”:导数、偏导、梯度与链式法则一篇打通(D2L 2.4 学习笔记)

目标:用新手也能跟上的方式,把本章出现的核心概念一次讲清楚:

  • 你到底在求什么?(变化率 / 斜率 / 方向)
  • 关键符号怎么读?(f′、dy/dx、∂、∇、nabla)
  • 深度学习里它们怎么用?(损失函数、优化、反向传播的“数学底座”)

阅读建议:先把「工具箱地图」看完,再逐节看例子,最后用「记忆卡片」做复习。


1. 为什么深度学习离不开微积分?

微积分有两条主线:

  • 积分:从“把很多小块加起来”得到面积/总量(历史上用逼近法逼近圆面积就是经典出发点)。
  • 微分:研究“变化的速度”和“如何把事情做得更好”。

在深度学习里,你每天都在做一件事:

  • 定义一个模型,给它一个损失函数(loss function,衡量“模型有多糟糕”)。
  • 通过训练让损失变小:这本质就是一个**优化(optimization)**问题。

而优化的核心动作只有一个:

沿着让损失下降最快的方向,走一小步。

这个“下降最快的方向”怎么来的?——靠导数/偏导/梯度

所以,这一章可以把它当成:

深度学习的“方向盘与油门”:

  • 导数 / 梯度告诉你方向(往哪走会下降)。
  • 学习率(后面章节)决定你每次走多远。

2. 本章的最小工具箱地图(先建立全局)

你只需要抓住四个关键词:

  1. 导数(Derivative):单变量函数的变化率。
  2. 偏导数(Partial derivative):多变量函数里,只看某一个变量的变化率。
  3. 梯度(Gradient):把所有偏导数拼成一个向量——它直接给出“最陡方向”。
  4. 链式法则(Chain rule):处理复合函数的求导规则——神经网络的结构几乎全是复合。

如果把函数看作一个“系统”,那么:

  • 导数:系统对一个输入旋钮的敏感度
  • 偏导:系统对某一个输入旋钮的敏感度(其他旋钮先固定)
  • 梯度:系统对所有输入旋钮的敏感度集合
  • 链式法则:系统由多个模块串起来时,敏感度如何“沿着模块链条传递”

后面你会发现:

反向传播 = 链式法则 + 计算图的有序传播。


3. 2.4.1 导数与微分:从“割线”走向“切线”

3.1 变化率:为什么会有“导数”?

先从直觉开始。

假设你有一个函数 (y=f(x))。你想知道:

  • (x) 增加一点点时,(y) 会变化多少?

如果我们只看两个点:(x) 和 (x+h),那么“平均变化率”(割线斜率)是:

[
\frac{f(x+h)-f(x)}{h}
]

当 (h) 越来越小,这个“平均变化率”就越来越接近某个极限——这就是瞬时变化率

3.2 导数的定义(你要背下来的第一条公式)

在点 (a) 处的导数定义为:

[
f’(a)=\lim_{h\to 0}\frac{f(a+h)-f(a)}{h}
]

这句话可以翻译成:

让 (x) 往右挪一个很小的 (h),看输出变化除以输入变化;当 (h) 逼近 0 时,得到极限。

3.3 导数的“读法”和“符号大全”

同一个导数,经常会看到很多写法。你至少要认得它们:

  • (f’(x)):读作“f prime of x”(f 的撇,或“f 在 x 的导数”)
  • (y’):读作“y prime”
  • (\frac{dy}{dx}):读作“d y d x”(也常被中文口语读成“dy 比 dx”)
  • (\frac{df}{dx}):读作“d f d x”
  • (\frac{d}{dx} f(x)):读作“对 x 求导的算子作用在 f(x) 上”
  • (Df(x))、(D_x f(x)):读作“D f”“D sub x f”(更偏线性代数/算子风格)

记忆技巧:

  • 看到prime(撇):多半是导数。
  • 看到d/dx:明确“对谁求导”。
  • 看到D:把导数当作“一个操作”。

3.4 常用求导规则(背核心,不背废话)

下面这几条就是本章“单变量求导”的工具箱:

  1. 常数导数为 0

[
\frac{d}{dx}C=0
]

  1. 幂函数(幂律)

[
\frac{d}{dx}x^n = n x^{n-1}
]

  1. 指数函数

[
\frac{d}{dx}ex=ex
]

  1. 对数函数

[
\frac{d}{dx}\ln x=\frac{1}{x}
]

  1. 线性性质(常数倍 & 加法)

[
\frac{d}{dx}[C f(x)] = C f’(x)
]

[
\frac{d}{dx}[f(x)+g(x)] = f’(x)+g’(x)
]

  1. 乘法法则

[
\frac{d}{dx}[f(x)g(x)] = f(x)g’(x) + g(x)f’(x)
]

  1. 除法法则

[
\frac{d}{dx}\left[\frac{f(x)}{g(x)}\right]=\frac{g(x)f’(x)-f(x)g’(x)}{[g(x)]^2}
]

记忆技巧:

  • 乘法:“前不动导后 + 后不动导前”
  • 除法:“下乘上导 - 上乘下导 / 下平方”(上、下指分子/分母)。

3.5 一个贯穿示例:(f(x)=3x^2-4x)

先求导:

[
f’(x)= 3\cdot 2x - 4 = 6x-4
]

在 (x=1) 处:

[
f’(1)=6\cdot1-4=2
]

用数值逼近理解“极限”

你可以用差商:((f(1+h)-f(1))/h),让 (h) 一直缩小,看它趋近于 2。

importnumpyasnpdeff(x):return3*x**2-4*xdefnumerical_lim(f,x,h):return(f(x+h)-f(x))/h h=0.1for_inrange(5):print(h,numerical_lim(f,1.0,h))h*=0.1

你会看到:(h) 从 0.1 缩小到 0.00001 时,数值会越来越接近 2。

这件事的意义:

  • 导数不是“玄学符号”,它是“把变化率压到极限”得到的量。

3.6 导数的几何意义:切线斜率与局部线性

导数在点 (a) 的另一个解释:

它是曲线在该点的切线斜率。

更实用的是“局部线性近似”:

[
f(x) \approx f(a) + f’(a)(x-a)
]

这句话非常重要,因为它解释了为什么很多优化算法可以靠“线性近似”一步步逼近最优。


4. 2.4.2 偏导数:多变量函数怎么“只对一个变量求导”?

深度学习里常见的函数不是 (y=f(x)),而是:

[
y=f(x_1, x_2, \dots, x_n)
]

比如损失 (L) 可能同时依赖成千上万个参数。

4.1 偏导数的核心思想

偏导就是:

“只让 (x_i) 变一下,其他变量先当常数。”

定义(你要认得的第二条公式):

[
\frac{\partial y}{\partial x_i}=
\lim_{h\to 0}\frac{f(x_1,\dots,x_i+h,\dots,x_n)-f(x_1,\dots,x_i,\dots,x_n)}{h}
]

4.2 偏导数的符号与读法

  • (\frac{\partial y}{\partial x_i}):读作“partial y partial x i”(偏 y 偏 x_i)
  • (\frac{\partial f}{\partial x_i}):读作“partial f partial x i”
  • (f_{x_i}) 或 (f_i):读作“f sub x_i”或 “f sub i”(简写)
  • (D_i f)、(D_{x_i}f):算子写法

记忆技巧:

  • 看到(\partial)(弯弯的 d):就是偏导。

很多新手混淆 d 与 ∂:

  • d通常用于单变量/全微分语境。
  • 明确告诉你“多变量,只对其中一个变量求”。

4.3 一个例子:(f(x_1,x_2)=3x_12+5e{x_2})

对 (x_1) 的偏导:

[
\frac{\partial f}{\partial x_1}=6x_1
]

对 (x_2) 的偏导:

[
\frac{\partial f}{\partial x_2}=5e^{x_2}
]

注意观察:

  • 求 (\partial/\partial x_1) 时,(x_2) 被当作常数。
  • 求 (\partial/\partial x_2) 时,(x_1) 被当作常数。

5. 2.4.3 梯度:把“所有偏导”拼成一个向量

偏导告诉你“某个方向”的变化率,但在优化里你想要的是:

所有方向里,往哪走下降最快?

这需要一个向量——梯度

5.1 梯度的定义(第三条必须熟悉的公式)

设 (f:\mathbb{R}^n\to\mathbb{R}),输入 (\mathbf{x}=[x_1,\dots,x_n]^\top),输出是一个标量。

梯度定义为:

[
\nabla_{\mathbf{x}} f(\mathbf{x})=
\Big[\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\dots,\frac{\partial f}{\partial x_n}\Big]^\top
]

5.2 梯度符号怎么读?

  • (\nabla):读作“nabla”(也有人读“del”,但深度学习里常用 nabla)
  • (\nabla f):读作“nabla f”或 “f 的梯度”
  • (\nabla_{\mathbf{x}} f):读作 “对 x 的梯度”

记忆技巧:

  • (\nabla) 像一个“倒三角”,可以记成“方向箭头的集合”。

5.3 梯度的意义:最陡上升与最陡下降

一个非常关键的事实:

  • 梯度方向是函数上升最快的方向。
  • 负梯度方向是函数下降最快的方向。

所以你会在优化里反复看到更新:

[
\mathbf{x} \leftarrow \mathbf{x} - \eta \nabla f(\mathbf{x})
]

其中 (\eta) 是学习率(步长)。

5.4 你在深度学习里会常见的梯度结果

下面三条在推导里经常出现(先认识即可):

  1. 二次型

[
\nabla_{\mathbf{x}}, \mathbf{x}^\top\mathbf{A}\mathbf{x} = (\mathbf{A}+\mathbf{A}^\top)\mathbf{x}
]

特别地,如果 (\mathbf{A}) 是对称矩阵((\mathbf{A}=\mathbf{A}^\top)),那就变成 (2\mathbf{A}\mathbf{x})。

  1. 向量二范数平方

[
\nabla_{\mathbf{x}}|\mathbf{x}|^2 = 2\mathbf{x}
]

  1. 矩阵的 Frobenius 范数平方

[
\nabla_{\mathbf{X}}|\mathbf{X}|_F^2 = 2\mathbf{X}
]

5.5 一个最小 PyTorch 体验:梯度不是“算出来”,是“传出来”

下面这段代码让你感受:框架会帮你自动算梯度(下一节 2.5 会系统讲自动微分)。

importtorch x=torch.tensor([1.0,2.0,3.0],requires_grad=True)# f(x) = ||x||^2 = x1^2 + x2^2 + x3^2f=(x*x).sum()f.backward()# 触发反向传播print(x.grad)# 期望是 2x

输出会是 ([2,4,6]),对应 (2\mathbf{x})。


6. 2.4.4 链式法则:复合函数的“梯度传递公式”

你在神经网络里看到的结构大多是:

[
\text{输入} \rightarrow \text{线性变换} \rightarrow \text{激活函数} \rightarrow \text{再线性} \rightarrow \dots \rightarrow \text{损失}
]

这是一串复合函数。只靠“幂律、加法法则”会很痛苦。

链式法则就是解决方案。

6.1 单变量链式法则(第四条必须熟悉的公式)

若 (y=f(u)),(u=g(x)),则:

[
\frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx}
]

直觉:

  • x 变一点点 → u 变多少 → y 再跟着变多少。

记忆技巧(非常好用):

  • “上游梯度 × 局部梯度”

6.2 多变量链式法则(深度学习更常用)

假设:

  • (y) 依赖 (u_1,\dots,u_m)
  • 每个 (u_j) 又依赖 (x_1,\dots,x_n)

那么对任意 (x_i):

[
\frac{\partial y}{\partial x_i}
=\sum_{j=1}^{m}\frac{\partial y}{\partial u_j}\frac{\partial u_j}{\partial x_i}
]

这就是反向传播里“把梯度从后往前累加”的数学原因。

6.3 一个新手必练的链式法则例子

令:

  • (u = 3x^2-4x)
  • (y = u^2)

求 (dy/dx)。

步骤:

  1. (dy/du = 2u)
  2. (du/dx = 6x-4)

所以:

[
\frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx}=2u(6x-4)=2(3x^2-4x)(6x-4)
]

这就是“模块串联,梯度相乘”。

6.4 一个更贴近深度学习的“多变量”链式例子

令:

  • (u_1 = x_1^2 + x_2)
  • (u_2 = e^{x_2})
  • (y = u_1\cdot u_2)

你要算 (\partial y/\partial x_1) 与 (\partial y/\partial x_2)。

先算局部偏导:

  • (\partial y/\partial u_1 = u_2)

  • (\partial y/\partial u_2 = u_1)

  • (\partial u_1/\partial x_1 = 2x_1)

  • (\partial u_1/\partial x_2 = 1)

  • (\partial u_2/\partial x_2 = e^{x_2}=u_2)

  • (\partial u_2/\partial x_1 = 0)

然后套多变量链式:

[
\frac{\partial y}{\partial x_1}=\frac{\partial y}{\partial u_1}\frac{\partial u_1}{\partial x_1}+\frac{\partial y}{\partial u_2}\frac{\partial u_2}{\partial x_1}=u_2\cdot 2x_1 + u_1\cdot 0=2x_1 e^{x_2}
]

[
\frac{\partial y}{\partial x_2}=\frac{\partial y}{\partial u_1}\frac{\partial u_1}{\partial x_2}+\frac{\partial y}{\partial u_2}\frac{\partial u_2}{\partial x_2}=u_2\cdot 1 + u_1\cdot u_2 = e{x_2}(1+x_12+x_2)
]

你会发现:

  • (x_2) 会通过两条路径影响 y(影响 u1,也影响 u2),所以要“相加”。
  • (x_1) 只通过 u1 影响 y,所以路径更简单。

这就是计算图里“多条路径的梯度要相加”的根源。


7. 小结:你现在应该能一口气说清楚什么?

学完这一章,你至少要能做到:

  • 看到导数定义,知道它是“极限下的变化率”。
  • 看到偏导符号 (\partial),知道“只对一个变量求导”。
  • 看到梯度 (\nabla),知道它是“所有偏导组成的向量”,并能说出“负梯度下降最快”。
  • 看到链式法则,知道它是“复合函数的梯度传递规则”,并理解它支撑了反向传播。

8. 本章练习:给你一份“可直接对照”的解题版

提示:以下解答是根据题意进行推导与讲解,重点是训练你把“公式→操作流程”串起来。

练习 1:画 (y=x^3-\frac{1}{x}) 以及 (x=1) 处切线

  1. 先求导:

[
y’ = 3x^2 + \frac{1}{x^2}
]

  1. 在 (x=1) 处:
  • (y(1)=1-1=0)
  • (y’(1)=3+1=4)
  1. 切线公式:

[
y \approx y(1) + y’(1)(x-1)= 0 + 4(x-1)=4x-4
]

  1. 画图(Python):
importnumpyasnpimportmatplotlib.pyplotasplt x=np.linspace(0.2,2.5,400)y=x**3-1/x t=np.linspace(0.2,2.5,400)line=4*t-4plt.plot(x,y,label='y = x^3 - 1/x')plt.plot(t,line,label='tangent at x=1')plt.scatter([1],[0])plt.legend()plt.grid(True)plt.show()

练习 2:(f(\mathbf{x})=3x_12+5e{x_2}) 的梯度

df/dx1:(6x_1)

df/dx2:(5e^{x_2})

所以:

[
\nabla f = [6x_1,\ 5e{x_2}]\top
]

练习 3:(f(\mathbf{x})=|\mathbf{x}|_2) 的梯度

设 (\mathbf{x}\neq 0)。

[
|\mathbf{x}|_2 = \sqrt{x_12+\cdots+x_n2}
]

对每个分量:

[
\frac{\partial}{\partial x_i}|\mathbf{x}|_2 = \frac{x_i}{|\mathbf{x}|_2}
]

所以:

[
\nabla |\mathbf{x}|_2 = \frac{\mathbf{x}}{|\mathbf{x}|_2}
]

注意:在 (\mathbf{x}=0) 处不可导(严格意义上梯度不存在),这在优化里会引出“次梯度”等概念(后面优化章节会遇到类似思想)。

练习 4:写出 (u=f(x,y,z)),且 (x=x(a,b))、(y=y(a,b))、(z=z(a,b)) 的链式法则

目标:(u) 最终是 (a,b) 的函数。

对 (a):

[
\frac{\partial u}{\partial a}
=\frac{\partial u}{\partial x}\frac{\partial x}{\partial a}
+\frac{\partial u}{\partial y}\frac{\partial y}{\partial a}
+\frac{\partial u}{\partial z}\frac{\partial z}{\partial a}
]

对 (b):

[
\frac{\partial u}{\partial b}
=\frac{\partial u}{\partial x}\frac{\partial x}{\partial b}
+\frac{\partial u}{\partial y}\frac{\partial y}{\partial b}
+\frac{\partial u}{\partial z}\frac{\partial z}{\partial b}
]

这就是“多条路径影响同一个输出 → 梯度相加”的标准形式。


9. 记忆卡片:把这一章变成“随手能背的公式组”

9.1 四件套(最小闭环)

  • 导数定义:(f’(a)=\lim_{h\to 0}\frac{f(a+h)-f(a)}{h})

  • 偏导定义:(\frac{\partial y}{\partial x_i}=\lim_{h\to 0}\frac{f(\dots,x_i+h,\dots)-f(\dots,x_i,\dots)}{h})

  • 梯度定义:(\nabla f=[\partial f/\partial x_1,\dots,\partial f/\partial x_n]^\top)

  • 链式法则:

    • 单变量:(dy/dx=(dy/du)(du/dx))
    • 多变量:(\partial y/\partial x_i=\sum_j (\partial y/\partial u_j)(\partial u_j/\partial x_i))

9.2 常用求导规则(单变量)

  • (dC/dx=0)
  • (d(x^n)/dx = n x^{n-1})
  • (d(e^x)/dx = e^x)
  • (d(\ln x)/dx = 1/x)
  • (d(Cf)/dx = C f’)
  • (d(f+g)/dx = f’+g’)
  • (d(fg)/dx = f g’ + g f’)
  • (d(f/g)/dx = (g f’ - f g’)/g^2)

9.3 一句“深度学习翻译”

  • 梯度:损失对参数的敏感度向量。
  • 负梯度:损失下降最快方向。
  • 链式法则:梯度在网络层之间传播的规则。

10. 前瞻:下一章“自动微分”你会学到什么?

当网络很深、函数很复杂时,手推梯度会非常痛苦。下一章你会看到:

  • 框架把函数拆成很多“基本算子”(加、乘、exp、matmul…)
  • 给每个算子准备“局部梯度”
  • 用链式法则在计算图上把梯度从输出一路传回输入(反向传播)

所以你现在学的这一章,等价于在给自动微分“打地基”:

你不需要每次都手算,但你必须看得懂梯度到底在表达什么。


结语:本章你最该获得的能力

如果你只记住一句话:

导数/偏导/梯度负责告诉你“怎么变会变好”,链式法则负责让你在“复杂结构”里仍然能算出这个方向。

当你真正把这句话消化掉,后面的优化算法、反向传播、自动微分,会顺很多。



📺B站视频讲解(Bilibili):博主个人介绍

📘《Yocto项目实战教程》京东购买链接:Yocto项目实战教程

📘加博主微信,进技术交流群jerrydev


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/10 3:32:48

Clawdbot镜像免配置启动:Qwen3-32B Web Chat平台ARM64平台兼容指南

Clawdbot镜像免配置启动:Qwen3-32B Web Chat平台ARM64平台兼容指南 1. 为什么你需要这个镜像——告别繁琐部署的AI对话体验 你是不是也遇到过这样的情况:想快速试用Qwen3-32B这样强大的大模型,却卡在环境搭建、CUDA版本匹配、Ollama配置、端…

作者头像 李华
网站建设 2026/3/9 15:31:37

OFA-VE在电商质检中的应用:自动验证商品图与描述一致性

OFA-VE在电商质检中的应用:自动验证商品图与描述一致性 1. 电商质检的痛点:图文不一致正在悄悄吃掉你的转化率 你有没有遇到过这样的情况:用户下单后投诉“图片和实物完全不一样”,客服每天要处理几十起因商品图与文字描述不符引…

作者头像 李华
网站建设 2026/3/8 21:36:59

零基础玩转Qwen2.5-VL:5分钟部署视觉多模态AI服务

零基础玩转Qwen2.5-VL:5分钟部署视觉多模态AI服务 1. 这不是另一个“看图说话”模型,而是能真正理解你屏幕的AI助手 你有没有试过把一张商品截图发给AI,让它告诉你价格、规格、甚至帮你比价?或者上传一张会议白板照片&#xff0…

作者头像 李华
网站建设 2026/3/8 6:45:29

GTE-Pro开源语义引擎实操:自定义停用词、分词器与领域词典注入

GTE-Pro开源语义引擎实操:自定义停用词、分词器与领域词典注入 1. 什么是GTE-Pro:企业级语义智能引擎 GTE-Pro不是又一个“能跑起来的模型”,而是一套真正能嵌入业务流程的语义理解底座。它脱胎于阿里达摩院在MTEB中文榜单长期稳居第一的GT…

作者头像 李华