为什么要学高数?——你比想象中更需要它
打开任何一篇AI论文或教材,你会发现几乎每个公式都包含这些符号:导数(d/dx)、偏导(∂/∂x)、链式法则、矩阵乘法、对数(log)。
你可能会问:"我都忘了高中数学,能学AI吗?"答案是:完全可以。
好消息有三个:
- AI用到的高数不深——90%的公式只需要求导和链式法则。你不需要学微积分II、多重积分、微分方程。
- 你每天都在用导数的直觉——开车看速度(位置的变化率)、看理财收益率(钱的变化率)、感觉天气变冷(温度的变化率)。导数就是"变化率"。
- 学完这一章,之后的优化器、激活函数、损失函数、Transformer的公式你都能看懂。
把这章当做一个"公式翻译器"——不追求严谨证明,而是让你看到每个符号时知道它代表什么、为什么这么用。
导数是什么?——先从开车说起
导数的核心思想:函数在某一点的瞬时变化率。
🚗 开车类比:
- 你的车开了1小时,走了60公里。平均速度 = 60公里/小时。
- 但看仪表盘,速度在变化:红灯时0,加速到80,刹车时又慢下来。
- 导数就是仪表盘上的速度——不是平均速度,而是此时此刻的速度。
- 位置 s(t) 对时间 t 求导 = 速度 v(t)。速度 v(t) 对时间求导 = 加速度 a(t)。
数学定义(别怕,我们一步步拆):
f'(x) = lim(Δx→0) [f(x+Δx) - f(x)] / Δx
拆解这个公式:
- f(x):一个函数,比如 f(x) = x²。输入x,输出x²。
- f(x+Δx):给x加一个很小的变化Δx,看输出变成什么。比如x=3,Δx=0.001,那f(3.001)=9.006001。
- f(x+Δx) - f(x):输出变化了多少。9.006001 - 9 = 0.006001。
- [f(x+Δx)-f(x)] / Δx:输出变化 ÷ 输入变化 = 变化率。0.006001 ÷ 0.001 = 6.001。
- lim(Δx→0):让Δx无限接近0,看看这个变化率趋近于多少。Δx=0.0001→6.0001,Δx=0.00001→6.00001……趋近于6。
所以 f'(3) = 6。意思是:在x=3这个点,函数f(x)=x²的变化率是6。
几何意义:导数 = 函数图像上该点切线的斜率。
- 导数 > 0:函数在上升(上坡)
- 导数 < 0:函数在下降(下坡)
- 导数 = 0:函数的极值点(山顶或谷底)——这就是"用导数找最小值"的核心
在AI中的意义:
AI训练就是找损失函数的最小值。损失函数L(w)告诉你"在当前参数w下,模型表现有多差"。我们想知道:如果稍微改一下参数w,损失L会变好还是变差?变化多大?——这正好是导数告诉我们的!
常用导数公式表——AI中最常用的10个
下面这张表是AI中最常用的导数公式。不用背推导过程,但需要记住结果。就像学开车不需要懂发动机原理,但要知道怎么操作方向盘。
| 函数形式 | 导数结果 | 例子 | AI中出现场景 |
|---|---|---|---|
| f(x) = C(常数) | f'(x) = 0 | f(x)=5 → f'(x)=0 | 任何常数项 |
| f(x) = xⁿ | f'(x) = n·xⁿ⁻¹ | f(x)=x²→f'(x)=2x f(x)=x³→f'(x)=3x² | 幂函数 |
| f(x) = eˣ | f'(x) = eˣ(不变!) | f(x)=eˣ→f'(x)=eˣ | Softmax、Sigmoid |
| f(x) = ln(x) | f'(x) = 1/x | f(x)=ln(x)→f'(x)=1/x | 交叉熵损失 |
| f(x) = sin(x) | f'(x) = cos(x) | —— | 位置编码 |
| f(x) = cos(x) | f'(x) = -sin(x) | —— | 位置编码 |
| f(x) = σ(x)(Sigmoid) | f'(x) = σ(x)(1-σ(x)) | σ(0)=0.5, σ'(0)=0.25 | 激活函数反向传播 |
| f(x) = tanh(x) | f'(x) = 1 - tanh²(x) | tanh(0)=0, tanh'(0)=1 | RNN、LSTM |
重要规律:
- eˣ的导数就是自己——这就是为什么e在AI中如此重要,求导太方便了
- Sigmoid的导数用输出值就能算:σ'(x)=σ(x)(1-σ(x))——反向传播时不用重新算x
例1:求 f(x)=x² 在 x=4 处的导数
问题:已知 f(x)=x²,求 f'(4)。
Step 1:套用幂函数求导公式 f(x)=xⁿ → f'(x)=n·xⁿ⁻¹
这里 n=2,所以 f'(x)=2·x²⁻¹ = 2x
Step 2:代入 x=4
f'(4)=2×4=8
验证(用定义看是否合理):
在x=4附近:x=4.1时,f(4.1)=16.81,比f(4)=16多了0.81。变化率=0.81/0.1=8.1 ≈ 8 ✓
几何意义:在点(4,16)处,切线的斜率=8。函数在x=4处快速上升。
例2:求 f(x)=3x²+2x+1 的导数
问题:求 f(x)=3x²+2x+1 的导数 f'(x)。
Step 1:逐项求导。常数项1的导数为0。
Step 2:第一项 3x²:3×2×x¹=6x
Step 3:第二项 2x:2×1×x⁰=2
Step 4:合并结果:f'(x)=6x+2
验证:求f'(2)=6×2+2=14。验证:x=2→f(2)=3×4+4+1=17;x=2.01→f(2.01)=3×4.0401+4.02+1=12.1203+5.02=17.1403。变化量0.1403÷0.01≈14.03≈14 ✓
基础求导练习
Q1:求 f(x)=5x³ 的导数 f'(x)。
Q2:求 f(x)=x²+4x-3 的导数 f'(x)。
Q3:求 f(x)=2eˣ+3ln(x) 的导数 f'(x)。
Q4:计算 f(x)=x² 在 x=-2 处的导数,并说明函数的升降情况。
Q5:一辆车的位置 s(t)=2t²+3t(t为秒),求第5秒时的瞬时速度。
查看答案
A1:f'(x)=5×3×x²=15x²
A2:f'(x)=2x+4。常数-3的导数为0。
A3:f'(x)=2eˣ+3×(1/x)=2eˣ+3/x
A4:f'(x)=2x,f'(-2)=2×(-2)=-4。因为导数为负,函数在x=-2处是下降的。验证:f(-2)=4,f(-1.9)=3.61,确实变小了。
A5:s'(t)=4t+3。代入t=5:s'(5)=4×5+3=23米/秒。也可以说速度是23m/s。
偏导——多变量函数的"局部视角"
偏导的定义:当一个函数有多个输入变量时,对其中一个变量求导,其他变量视为常数。
🏠 装修预算类比:
假设装修总费用 f(瓷砖, 油漆, 人工) 取决于三个因素。
- 想知道"换一种瓷砖会多花多少钱?"→ 对"瓷砖"求偏导 ∂f/∂(瓷砖)
- 想知道"涨人工费会多花多少钱?"→ 对"人工"求偏导 ∂f/∂(人工)
每个偏导都独立地告诉你:只改这一个变量,其他不变,结果变化多少。
数学记号:
- f(x,y)有两个变量
- ∂f/∂x = 对x求偏导(y看作常数)
- ∂f/∂y = 对y求偏导(x看作常数)
实例:f(x,y)=x²·y+3y²
- ∂f/∂x:把y看作常数→2x·y(因为x²的导数是2x,乘以常数y)
- ∂f/∂y:把x看作常数→x²+6y(x²是常数,3y²的导数是6y)
在神经网络中的意义:
神经网络的损失函数 L 取决于数百万个参数(权重w₁,w₂,...,wₙ)。
- ∂L/∂w₁ = "如果稍微改一下w₁,损失L会变多少?"
- ∂L/∂w₂ = "如果稍微改一下w₂,损失L会变多少?"
- ……这样对每个参数求出偏导
这就是梯度下降的核心——算出每个参数的偏导,然后沿着下降方向更新。
例3:偏导计算实战
问题:f(x,y)=3x²y+xy²,求 ∂f/∂x 和 ∂f/∂y 在点 (1,2) 处的值。
Step 1:求 ∂f/∂x
把y看作常数:
- 第一项 3x²y:3y·2x = 6xy
- 第二项 xy²:y²·1 = y²
- ∂f/∂x = 6xy + y²
代入(1,2):∂f/∂x = 6×1×2 + 2² = 12+4 = 16
解释:在(1,2)处,x每增加1小单位,f约增加16。前提是y不变。
Step 2:求 ∂f/∂y
把x看作常数:
- 第一项 3x²y:3x²·1 = 3x²
- 第二项 xy²:x·2y = 2xy
- ∂f/∂y = 3x² + 2xy
代入(1,2):∂f/∂y = 3×1 + 2×1×2 = 3+4 = 7
解释:在(1,2)处,y每增加1小单位,f约增加7。前提是x不变。
总结:在(1,2)处,改变x比改变y对f的影响更大(16 > 7)。
梯度——所有偏导的集合
梯度的定义:梯度 ∇f 是一个向量,包含函数f对所有变量的偏导。
数学表示:
∇f = [∂f/∂x₁, ∂f/∂x₂, ..., ∂f/∂xₙ]
🏔️ 登山类比:
- 你站在山上某一点,想知道"往哪个方向走上升最快?"
- 梯度方向=上升最快的方向
- 负梯度方向=下降最快的方向
- 梯度下降就是沿着负梯度方向走——快速下山找谷底(最小化损失)
梯度的三个关键性质:
- 方向:指向函数增长最快的方向
- 大小:梯度向量的长度 = 该方向的变化率大小|∇f| = √((∂f/∂x₁)²+(∂f/∂x₂)²+...)
- 正交性:梯度方向与等高线垂直
在AI中:一次梯度计算 = 输入所有样本→前向传播→反向传播→得到每个参数的偏导。
例4:梯度计算实战
问题:f(x,y)=x²+2y²,计算梯度∇f(1,1)。
Step 1:求偏导
∂f/∂x = 2x,∂f/∂y = 4y
Step 2:代入(1,1)
∇f(1,1) = [2×1, 4×1] = [2, 4]
Step 3:解释
- 在(1,1)处,往x方向走变化率是2,往y方向走变化率是4
- 梯度方向是[2,4](约63°角)
- 梯度大小 = √(2²+4²) ≈ 4.47
- 负梯度方向[-2,-4]是下降最快的方向
验证:从(1,1)沿[-2,-4]走0.1步:新点(0.8,0.6)→f=0.64+0.72=1.36,确实比原值1+2=3小了!
链式法则——神经网络反向传播的核心引擎
链式法则:复合函数 f(g(x)) 的导数 = 外层导数 × 内层导数。
🥟 包子成本类比:
- 包子价格=面粉价格+肉价+人工
- 面粉价格=小麦价格×加工费
- 所以:包子价格对小麦的敏感度 = (包子价格对面粉的敏感度) × (面粉价格对小麦的敏感度)
这就是链式法则:把连锁反应一步步传递回去。
数学形式:
df/dx = df/dg · dg/dx
更常用的扩展形式(多个变量影响):
df/dx = (∂f/∂g₁)(dg₁/dx) + (∂f/∂g₂)(dg₂/dx) + ...
神经网络中的链式法则(反向传播):
一个简单神经网络:输入x→隐藏层h→输出层ŷ→损失L
损失L对权重w的导数:∂L/∂w = (∂L/∂ŷ) · (∂ŷ/∂h) · (∂h/∂w)
从右往左算:
- 先算∂h/∂w(权重对输出的影响)
- 再算∂ŷ/∂h(隐藏层对输出层的影响)
- 最后算∂L/∂ŷ(输出对损失的影响)
- 乘起来得到∂L/∂w
这就是"反向传播"名字的由来——从损失函数出发,反向逐层传播梯度。
例5:链式法则手算
问题:f(x)=e^(2x+1),求f'(x)。
Step 1:识别内外函数
外层:e^(□) → 导数是e^(□)(不变)
内层:2x+1 → 导数是2
Step 2:套用链式法则
f'(x) = e^(2x+1) × 2 = 2e^(2x+1)
验证:x=0时,f(0)=e¹≈2.718。x=0.01时,f(0.01)=e^(1.02)≈2.774。变化=(2.774-2.718)/0.01=5.6。公式给出2e¹≈5.436。接近✓(Δx=0.01不够小,Δx更小会更准)
例6:多层复合
f(x)=ln(x²+1)
Step 1:外层ln(□)→1/□,内层x²+1→2x
Step 2:f'(x) = [1/(x²+1)] × 2x = 2x/(x²+1)
验证:x=2时,f'(2)=4/5=0.8
Sigmoid导数——激活函数反向传播实例
Sigmoid函数 σ(x) = 1/(1+e⁻ˣ) 是AI中最重要的激活函数之一。
它的导数有一个超棒的发现:
σ'(x) = σ(x) · (1 - σ(x))
也就是说,用Sigmoid的输出值本身就能算出导数,不需要回过头去算x。
推导(不强制记住,但看看很有趣):
Step 1:σ(x)=1/(1+e⁻ˣ) = (1+e⁻ˣ)⁻¹
Step 2:链式法则:σ'(x) = -1×(1+e⁻ˣ)⁻² × (-e⁻ˣ) = e⁻ˣ/(1+e⁻ˣ)²
Step 3:巧妙地写为:[1/(1+e⁻ˣ)] × [e⁻ˣ/(1+e⁻ˣ)]
Step 4:注意到 e⁻ˣ/(1+e⁻ˣ) = (1+e⁻ˣ-1)/(1+e⁻ˣ) = 1 - 1/(1+e⁻ˣ) = 1 - σ(x)
Step 5:所以 σ'(x) = σ(x) × (1-σ(x))
数值验证:
- σ(0) = 0.5 → σ'(0) = 0.5×0.5 = 0.25
- σ(5) = 0.9933 → σ'(5) = 0.9933×0.0067 ≈ 0.0067
- σ(-5) = 0.0067 → σ'(-5) = 0.0067×0.9933 ≈ 0.0067
观察:x远离0时,导数非常小——这就是"梯度消失"问题:深层网络反向传播时,梯度越乘越小,前层几乎不更新。
Sigmoid导数参数表
| 参数 | 含义 | 典型值 | 太大/太小的影响 |
|---|---|---|---|
| x | Sigmoid的输入 | [-5,5] | x>>0: σ≈1,梯度≈0(饱和);x<<0: σ≈0,梯度≈0(饱和) |
| σ(x) | Sigmoid输出 | (0,1) | 接近0或1时梯度消失 |
| σ'(x) | 导数(梯度) | 最大0.25(x=0) | 最大值仅0.25,深度网络连乘后趋近于0 |
链式法则与Sigmoid练习
Q1:用链式法则求 f(x)=(3x+1)² 的导数。
Q2:若 σ(x)=1/(1+e⁻ˣ),计算 σ(2) 和 σ'(2)。
Q3:在一个两层的神经网络中,z₁=w₁·x+b₁,a₁=σ(z₁),z₂=w₂·a₁+b₂,ŷ=σ(z₂),损失L=½(ŷ-y)²。写出∂L/∂w₂的链式法则分解式。
Q4:求 f(x)=ln(eˣ+1) 的导数。
查看答案
A1:外层(□)²→2(□),内层3x+1→3。f'(x)=2(3x+1)×3=6(3x+1)=18x+6
A2:σ(2)=1/(1+e⁻²)=1/(1+0.1353)≈0.8808。σ'(2)=0.8808×(1-0.8808)=0.8808×0.1192≈0.1050
A3:∂L/∂w₂ = (∂L/∂ŷ) × (∂ŷ/∂z₂) × (∂z₂/∂w₂) = (ŷ-y) × σ(z₂)(1-σ(z₂)) × a₁
A4:外层ln(□)→1/□,内层eˣ+1→eˣ。f'(x)=eˣ/(eˣ+1)。
矩阵乘法——神经网络的计算引擎
为什么需要矩阵?
神经网络的一层:有n个输入和m个输出。如果不用矩阵,你得写n×m个循环。用矩阵:一行代码搞定。
矩阵乘法规则:
A(m×n) × B(n×p) = C(m×p)
条件:A的列数必须等于B的行数。
📦 物流类比:
- 你有3个仓库(3行),每个仓库有4种商品的数量(4列)
- 每种商品有5个目的地(5列)的运送单价
- 矩阵乘法 = 算出从每个仓库到每个目的地的总运费
神经网络的矩阵形式:
y = Wx + b
其中:
- x:输入向量(n维)
- W:权重矩阵(m×n维)
- b:偏置向量(m维)
- y:输出向量(m维)
y的第i个元素 = Σ(W[i][j] × x[j]) + b[i],j从1到n
堆叠多层:
深度学习 = 一串矩阵乘法 + 激活函数
h₁ = σ(W₁x + b₁)
h₂ = σ(W₂h₁ + b₂)
ŷ = W₃h₂ + b₃
例7:2×3矩阵乘法手算
问题:A = [[1,2,3],[4,5,6]],B = [[7,8],[9,10],[11,12]],求A×B。
Step 1:确认维度
A=2×3, B=3×2 → 结果C=2×2
Step 2:逐元素计算
C[0][0] = A第0行×B第0列 = 1×7+2×9+3×11 = 7+18+33 = 58
C[0][1] = 1×8+2×10+3×12 = 8+20+36 = 64
C[1][0] = 4×7+5×9+6×11 = 28+45+66 = 139
C[1][1] = 4×8+5×10+6×12 = 32+50+72 = 154
结果:C = [[58, 64], [139, 154]]
验证:可以用矩阵乘法交换律的变体验证。两个矩阵第0行点积=第0列点积等关系。
对数(Log)——让乘法变加法的魔法
为什么AI中到处是log?
三个核心原因:
- 乘法变加法:log(ab)=log(a)+log(b)。求导时,加法比乘法简单无数倍。
- 数值稳定:一个很小的概率 p=0.0001,直接乘n次会下溢为0。取log后是-4+(-4)+...,稳定得多。
- 信息论定义:信息量 = -log(p)。交叉熵损失源于信息论。
常用对数规则(务必记住):
- log(ab) = log(a) + log(b)
- log(a/b) = log(a) - log(b)
- log(aⁿ) = n·log(a)
- ln(eˣ) = x(自然对数的定义)
- e^(ln(a)) = a
实例:交叉熵损失
CE = -Σ yᵢ·log(ŷᵢ)
其中y是真实标签([1,0,0]),ŷ是预测概率([0.7,0.2,0.1])。
计算:CE = -(1×log(0.7) + 0×log(0.2) + 0×log(0.1)) = -log(0.7) ≈ 0.357
如果预测错了:ŷ=[0.1,0.2,0.7],CE = -log(0.1) ≈ 2.303
错误时惩罚大了约6.5倍——这就是交叉熵"惩罚错误"的方式。
对数在AI中的参数表
| 参数 | 含义 | 典型值 | 作用 |
|---|---|---|---|
| log(a) | a的自然对数(底数e≈2.718) | a∈(0,∞) | 压缩量级,将乘法转为加法 |
| -log(p) | 事件的"信息量" | p∈(0,1], -log(p)∈[0,∞) | 小概率事件信息量大 |
| CE=-Σy·log(ŷ) | 交叉熵损失 | ≥0, 越接近0越好 | 分类任务的默认损失 |
综合练习
Q1:计算 log₂(8) + log₂(16)。
Q2:用对数规则化简:log(ab³/c²)。
Q3:若损失函数 L=-log(ŷ_y),当真实类别y的第k个元素为1,模型预测ŷ_k=0.01时,损失L是多少?如果ŷ_k=0.99呢?
Q4:矩阵A=[[1,0],[2,3]],B=[[4],[5]],求A×B。
查看答案
A1:log₂(8)=3(因为2³=8),log₂(16)=4(因为2⁴=16)。所以3+4=7。
A2:log(ab³/c²) = log(a) + log(b³) - log(c²) = log(a) + 3log(b) - 2log(c)
A3:当ŷ_k=0.01:L=-log(0.01)=-(-4.605)=4.605。当ŷ_k=0.99:L=-log(0.99)=-(-0.01005)=0.01005。可见错误(置信度低)时损失大得多。
A4:[[1×4+0×5], [2×4+3×5]] = [[4], [8+15]] = [[4], [23]]。结果是2×1矩阵。