跳转至

微积分与求导

训练神经网络 = 算损失对参数的梯度,再沿负梯度更新。本节只保留深度学习真正用到的微积分。

导数:变化有多快

一元函数 \(f(x)\) 在 \(x\) 处的导数:

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

常用导数(建议背熟):

函数 导数
\(x^n\) \(n x^{n-1}\)
\(e^x\) \(e^x\)
\(\ln x\) \(1/x\)
\(\sigma(x)=\frac{1}{1+e^{-x}}\) \(\sigma(x)(1-\sigma(x))\)
\(\mathrm{ReLU}(x)=\max(0,x)\) \(1\)(\(x>0\)),\(0\)(\(x<0\))

偏导数与梯度

多变量函数 \(f(x_1, x_2, \ldots, x_n)\) 对某一个变量的导数叫偏导,记作 \(\partial f / \partial x_i\)。

把所有偏导排成向量,就是梯度:

\[ \nabla f = \left( \frac{\partial f}{\partial x_1}, \ldots, \frac{\partial f}{\partial x_n} \right) \]

梯度指向函数上升最快的方向;训练时沿 \(-\nabla f\) 走,让损失下降。

链式法则(重中之重)

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

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

多层网络就是一层套一层的复合函数。反向传播 = 从外到内反复使用链式法则。

一个最小例子

\[ z = (wx + b)^2 \]

令 \(u = wx + b\),则 \(z = u^2\)。

\[ \frac{\partial z}{\partial w} = \frac{\partial z}{\partial u} \cdot \frac{\partial u}{\partial w} = 2u \cdot x = 2(wx+b)x \]

向量/矩阵求导直觉

  1. 标量对向量的梯度形状与该向量相同。
  2. 线性层 \(y = Wx\) 中,上游传来的 \(\partial L/\partial y\) 会通过 \(W^\top\) 传回 \(x\),通过外积更新 \(W\)。
  3. 框架用自动微分帮你算;你要理解的是「为什么能算、形状怎么对」。
\[ \frac{\partial L}{\partial x} = W^\top \frac{\partial L}{\partial y}, \quad \frac{\partial L}{\partial W} = \frac{\partial L}{\partial y}\, x^\top \]

和深度学习的对应关系

概念 作用
梯度 参数更新方向
链式法则 反向传播的数学本质
自动微分 框架替你展开计算图并回传