跳到主要内容

深度学习数学基础:自动求导与反向传播

“如果不理解反向传播的数学本质,神经网络将永远只是一个黑盒。” —— 本专题旨在通过严密的数学推导与 C++ 算子级模拟,揭示深度学习背后的微积分与线性代数原理。


🪜 练习阶梯与评价标准

等级难度目标核心考察点期望达成
Level A链式法则应用计算图求导、简单激活函数导数理解局部梯度概念
Level B矩阵求导推导全连接层反向传播、Jacobian 矩阵完成多层感知机的数学推导
Level C复杂算子分析Softmax + CrossEntropy 联合求导, CNN 卷积求导实现自定义算子的反向传播

🎯 跨学科考点矩阵 (Knowledge Matrix)

知识模块数学核心计算机落地 (AI/C++)关联习题
导数与梯度多元复合函数链式法则自动求导系统 (Autograd)练习 1
线性代数矩阵求导, 逐元素运算 (Element-wise)张量运算库封装练习 2
概率与统计极大似然估计 (MLE), 期望损失函数 (CrossEntropy, MSE)练习 3
数值优化随机梯度下降 (SGD), 动量法参数更新器 (Optimizer)练习 4

📂 核心习题库

Level A:基础链式法则

练习 1:计算图求导 (Manual Autograd)

题目描述:考虑复合函数 f(w,x,b)=σ(wx+b)f(w, x, b) = \sigma(wx + b),其中 σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}} 为 Sigmoid 函数。已知 w=2,x=3,b=4w=2, x=3, b=-4

  1. 计算前向传播值 ff
  2. 利用链式法则计算 fw,fx,fb\frac{\partial f}{\partial w}, \frac{\partial f}{\partial x}, \frac{\partial f}{\partial b}
Check Solution (Formal Proof)

思维链 (Thought Chain)

  1. 建模:中间变量 z=wx+bz = wx + bf=σ(z)f = \sigma(z)
  2. 局部梯度
    • fz=σ(z)(1σ(z))\frac{\partial f}{\partial z} = \sigma(z)(1 - \sigma(z))
    • zw=x,zx=w,zb=1\frac{\partial z}{\partial w} = x, \frac{\partial z}{\partial x} = w, \frac{\partial z}{\partial b} = 1
  3. 推导
    • fw=fzx\frac{\partial f}{\partial w} = \frac{\partial f}{\partial z} \cdot x
    • fx=fzw\frac{\partial f}{\partial x} = \frac{\partial f}{\partial z} \cdot w
    • fb=fz\frac{\partial f}{\partial b} = \frac{\partial f}{\partial z}
  4. 计算
    • z=2×34=2z = 2 \times 3 - 4 = 2
    • f=σ(2)=11+e20.88f = \sigma(2) = \frac{1}{1 + e^{-2}} \approx 0.88
    • fz=0.88×(10.88)=0.1056\frac{\partial f}{\partial z} = 0.88 \times (1 - 0.88) = 0.1056
    • fw=0.1056×3=0.3168\frac{\partial f}{\partial w} = 0.1056 \times 3 = 0.3168

Level B:矩阵化反向传播

练习 2:全连接层 (Linear Layer) 的梯度推导

题目描述:设 Y=XW+BY = XW + B,其中 XRm×n,WRn×p,BR1×pX \in \mathbb{R}^{m \times n}, W \in \mathbb{R}^{n \times p}, B \in \mathbb{R}^{1 \times p}。已知输出端的梯度 LYRm×p\frac{\partial L}{\partial Y} \in \mathbb{R}^{m \times p},试求 LW\frac{\partial L}{\partial W}LX\frac{\partial L}{\partial X}

Check Solution (Matrix Calculus)

思维链 (Thought Chain)

  1. 维度检查LW\frac{\partial L}{\partial W} 必须与 WW 维度相同 (n×p)(n \times p)
  2. 推导
    • 根据矩阵微分公式 dL=Tr((LY)TdY)dL = \text{Tr}((\frac{\partial L}{\partial Y})^T dY)
    • dY=XdWdY = X dW,代入得 dL=Tr((LY)TXdW)=Tr(XTLYdW)dL = \text{Tr}((\frac{\partial L}{\partial Y})^T X dW) = \text{Tr}(X^T \frac{\partial L}{\partial Y} dW)
    • LW=XTLY\frac{\partial L}{\partial W} = X^T \frac{\partial L}{\partial Y}
  3. 同理
    • LX=LYWT\frac{\partial L}{\partial X} = \frac{\partial L}{\partial Y} W^T

C++ 模拟实现 (Eigen 风格)

#include <iostream>
#include <vector>

// 模拟简单的全连接层
void backward(const std::vector<std::vector<double>>& X,
const std::vector<std::vector<double>>& gradY,
std::vector<std::vector<double>>& gradW) {
int m = X.size(), n = X[0].size(), p = gradY[0].size();
// gradW = XT * gradY
for (int i = 0; i < n; i++) {
for (int j = 0; j < p; j++) {
gradW[i][j] = 0;
for (int k = 0; k < m; k++) {
gradW[i][j] += X[k][i] * gradY[k][j];
}
}
}
}

Level C:挑战——Softmax 求导

练习 3:Softmax + Cross-Entropy 梯度合并

题目描述:设 aa 是 Logits 向量,yy 是 Softmax 输出,yi=eaieajy_i = \frac{e^{a_i}}{\sum e^{a_j}}。损失函数为 L=tklnykL = -\sum t_k \ln y_k,其中 tt 为 One-hot 标签。证明: Lai=yiti\frac{\partial L}{\partial a_i} = y_i - t_i

Check Solution (Full Proof)

证明过程

  1. Softmax 自身偏导
    • i=ji=jyiai=yi(1yi)\frac{\partial y_i}{\partial a_i} = y_i(1 - y_i)
    • iji \neq jyjai=yjyi\frac{\partial y_j}{\partial a_i} = -y_j y_i
  2. 结合 Cross-EntropyLai=kLykykai\frac{\partial L}{\partial a_i} = \sum_k \frac{\partial L}{\partial y_k} \frac{\partial y_k}{\partial a_i} 其中 Lyk=tkyk\frac{\partial L}{\partial y_k} = -\frac{t_k}{y_k}
  3. 代入展开Lai=tiyiyi(1yi)+kitkyk(ykyi)\frac{\partial L}{\partial a_i} = -\frac{t_i}{y_i} \cdot y_i(1 - y_i) + \sum_{k \neq i} -\frac{t_k}{y_k} \cdot (-y_k y_i) Lai=ti(1yi)+kitkyi=ti+tiyi+kitkyi\frac{\partial L}{\partial a_i} = -t_i(1 - y_i) + \sum_{k \neq i} t_k y_i = -t_i + t_i y_i + \sum_{k \neq i} t_k y_i 由于 ktk=1\sum_k t_k = 1(One-hot),故 ktkyi=yiktk=yi\sum_{k} t_k y_i = y_i \sum_k t_k = y_i
  4. 结论Lai=yiti\frac{\partial L}{\partial a_i} = y_i - t_i

工程意义:这个极其简洁的结果意味着在 C++ 实现反向传播时,我们只需将网络输出减去真实标签即可得到 Logits 层的梯度。


🏆 训练建议

  1. 手推一遍反向传播:不要完全依赖 PyTorch/TensorFlow。自己手推全连接、卷积和 Softmax 的梯度是成为架构师的必经之路。
  2. 注意数值稳定性:在实现 Softmax 时,务必减去向量中的最大值以防止 eaie^{a_i} 溢出(Safe Softmax)。
  3. 维度对齐:矩阵求导最简单的检查方法就是看结果的维度是否与原变量一致。