《深度学习的数学》核心算法学习总结:从梯度下降到 CNN 反向传播(中学生友好版)
- 约 17 分钟读完 - 全文 6671 字《深度学习的数学》核心算法学习总结
目标读者:学过函数、导数、向量/矩阵基础的中学生生或刚转行的工程师。
参考书籍:涌井良幸《深度学习的数学》
Excel 示例:https://www.ituring.com.cn/book/2593
写在前面:为什么要先搞懂这 5 个算法?
深度学习的代码看起来很复杂,但核心无非是这五个环节:
- 梯度下降法:告诉模型“往哪走、走多远”。
- NN 求解器:用 Excel/数值方法直接“暴力”找出神经网络权重。
- NN 误差反向传播法:用导数的链式法则高效计算每个权重的调整量。
- CNN 求解器:把同样的思路用到图像上,用卷积和池化提取特征。
- CNN 误差反向传播法:把反向传播扩展到卷积层和池化层。
下面每一节都会先讲直觉,再给公式、例子、图解和踩坑经验。
一、梯度下降法(Gradient Descent)
1.1 一句话理解
想象你蒙着眼睛站在山坡上,想走到最低点。你每一步都:用脚感觉最陡的方向,然后朝相反方向跨一小步。重复很多次,就能接近山谷。
- “最陡的方向” = 梯度(gradient)。
- “相反方向” = 梯度前面加负号。
- “一小步” = 学习率 η(eta)。
1.2 数学表达式
要找函数 $z = f(x, y)$ 的最小值,每一步:
$$ \begin{aligned} x_{\text{新}} &= x_{\text{旧}} - \eta \cdot \frac{\partial z}{\partial x} \\ y_{\text{新}} &= y_{\text{旧}} - \eta \cdot \frac{\partial z}{\partial y} \end{aligned} $$
其中 $\frac{\partial z}{\partial x}$ 读作“z 对 x 的偏导数”,意思是:只有 x 动一点点时,z 会变多少。
1.3 计算例子:z = x² + y²
这是最简单的碗状函数,最小值在 $(0, 0)$。
偏导数很容易算:
$$ \begin{aligned} \frac{\partial z}{\partial x} &= 2x \\ \frac{\partial z}{\partial y} &= 2y \end{aligned} $$
取学习率 $\eta = 0.1$,起点 $(3, 2)$:
| 步数 $i$ | $x_i$ | $y_i$ | $\frac{\partial z}{\partial x}$ | $\frac{\partial z}{\partial y}$ | $\Delta x$ | $\Delta y$ | $z = x^2 + y^2$ |
|---|---|---|---|---|---|---|---|
| 0 | 3.00 | 2.00 | 6.00 | 4.00 | -0.60 | -0.40 | 13.00 |
| 1 | 2.40 | 1.60 | 4.80 | 3.20 | -0.48 | -0.32 | 8.32 |
| 2 | 1.92 | 1.28 | 3.84 | 2.56 | -0.38 | -0.26 | 5.32 |
| 3 | 1.54 | 1.02 | 3.07 | 2.05 | -0.31 | -0.20 | 3.41 |
| 4 | 1.23 | 0.82 | 2.46 | 1.64 | -0.25 | -0.16 | 2.18 |
| 13 | 0.16 | 0.11 | 0.33 | 0.22 | -0.03 | -0.02 | 0.04 |
| 18 | 0.05 | 0.04 | 0.11 | 0.07 | -0.01 | -0.01 | 0.00 |
| 30 | 0.00 | 0.00 | 0.01 | 0.00 | 0.00 | 0.00 | 0.00 |
可以看到:z 越来越小,x、y 越来越靠近 0。Excel 文件
2-11 梯度下降法.xlsx就是用完全相同的公式做出来的。
1.4 流程图
flowchart TD
A[初始化参数 x, y] --> B[计算当前梯度]
B --> C{梯度是否足够小?}
C -->|是| D[结束,得到近似最优解]
C -->|否| E[按 x := x - η·grad 更新]
E --> B
1.5 结构分解图
flowchart LR
subgraph 输入
X["x"]
Y["y"]
end
subgraph 目标函数
F["z = x² + y²"]
end
subgraph 输出
G["梯度 (∂z/∂x, ∂z/∂y)"]
L["当前损失 z"]
end
X --> F
Y --> F
F --> G
F --> L
G --> U["更新 x, y"]
U --> X
1.6 使用注意点 / 避坑指南
| 坑 | 现象 | 处理方法 |
|---|---|---|
| 学习率 η 太大 | 左右震荡、loss 不下降甚至发散到 NaN | 先设小一点(如 0.001、0.01),再调大 |
| 学习率 η 太小 | 收敛极慢,训练一万轮还在原地 | 逐步放大,或使用学习率衰减/热身 |
| 局部最小值 | 卡在不是全局最低的山谷 | 换初始化、用 Momentum/Adam、增加随机性 |
| 特征尺度不一致 | 某个参数梯度特别大,更新不稳定 | 先标准化/归一化输入数据 |
| 没有检查收敛 | 一直在迭代,不知道何时停 | 设定 loss 阈值、最大迭代次数或早停 Early Stopping |
1.7 异常场景处理
- Loss 变成 NaN/Inf:立刻减小学习率,检查输入是否归一化,检查是否出现
log(0)或除零。 - Loss 不动:检查梯度是否接近 0(可能进入平台或死区),换激活函数(如 ReLU),或减少正则化。
- Loss 震荡不下降:学习率过大,改用 Momentum 或 Adam,或者降低 batch size。
二、NN 求解器(用优化器/求解器训练神经网络)
2.1 神经网络在做什么?
神经网络 = 很多层“加权求和 + 激活函数”拼在一起。
以书中“0 和 1 的识别”为例:
- 输入:3×4 = 12 个像素(0 或 1)。
- 隐藏层:3 个神经元。
- 输出层:2 个神经元,分别代表“是 0”还是“是 1”。
下面就是它的经典结构图:
flowchart LR
subgraph 输入层["输入层(12 个像素)"]
I1((x₁))
I2((x₂))
I3((x₃))
IDOTS[...]
I12((x₁₂))
end
subgraph 隐藏层["隐藏层(3 个神经元)"]
H1((h₁))
H2((h₂))
H3((h₃))
end
subgraph 输出层["输出层(2 个神经元)"]
O1((是 0))
O2((是 1))
end
I1 --> H1
I1 --> H2
I1 --> H3
I2 --> H1
I2 --> H2
I2 --> H3
I3 --> H1
I3 --> H2
I3 --> H3
I12 --> H1
I12 --> H2
I12 --> H3
H1 --> O1
H1 --> O2
H2 --> O1
H2 --> O2
H3 --> O1
H3 --> O2
每个箭头都代表一个权重 w,每个圆圈(神经元)里都会做“加权求和 + 激活函数”。
2.2 前向传播公式
对单个神经元:
$$ \begin{aligned} \text{加权求和:} \quad z &= w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b \\ \text{激活输出:} \quad a &= \sigma(z) = \frac{1}{1 + e^{-z}} \end{aligned} $$
σ 叫 Sigmoid 函数,能把任意实数压到 0-1 之间,适合当“概率”。
如果写成更清晰的“层”形式:
隐藏层第 j 个神经元:
$$ \begin{aligned} z_j^{(2)} &= \sum_{i=1}^{12} w_{ji}^{(1)} \cdot x_i + b_j^{(1)} \\ a_j^{(2)} &= \sigma\left(z_j^{(2)}\right) \end{aligned} $$
输出层第 k 个神经元:
$$ \begin{aligned} z_k^{(3)} &= \sum_{j=1}^{3} w_{kj}^{(2)} \cdot a_j^{(2)} + b_k^{(3)} \\ a_k^{(3)} &= \sigma\left(z_k^{(3)}\right) \end{aligned} $$
- $x_i$:输入像素(12 个)。
- $w_{ji}^{(1)}$:输入到隐藏层的权重。
- $b_j^{(1)}$:隐藏层的偏置。
- $a_j^{(2)}$:隐藏层输出。
- $w_{kj}^{(2)}$:隐藏层到输出层的权重。
- $b_k^{(3)}$:输出层的偏置。
2.3 Excel 里的实现(测试表)
在 3-5 NN(求解器).xlsx 的“测试”表中,核心公式长这样:
# 隐藏层第一个神经元
=SUMPRODUCT(L5:N8, $D$5:$F$8) + $G$5
# Sigmoid 激活
=1/(1+EXP(-O11))
# 输出层
=MMULT($D$17:$F$17, O14:O16) + $G$17
对应上面的数学公式:
| Excel 公式 | 数学含义 | Excel 函数说明 |
|---|---|---|
SUMPRODUCT(L5:N8, $D$5:$F$8) |
$\sum_{i=1}^{12} w_i \cdot x_i$ | 把两个区域里对应位置相乘,再把所有乘积加起来,本质就是向量的点积/内积。这里输入像素放在 L5:N8,对应权重放在 $D$5:$F$8。 |
+ $G$5 |
$+ b_j^{(1)}$ | 加上隐藏层第 1 个神经元的偏置。 |
1/(1+EXP(-O11)) |
$\sigma(z) = \frac{1}{1 + e^{-z}}$ | Sigmoid 激活函数。 |
MMULT($D$17:$F$17, O14:O16) |
$\sum_{j=1}^{3} w_{kj}^{(2)} \cdot a_j^{(2)}$ | 矩阵乘法。$D$17:$F$17 是 1×3 的输出行权重,O14:O16 是 3×1 的隐藏层输出列向量,乘出来是一个标量。 |
+ $G$17 |
$+ b_k^{(3)}$ | 加上输出层第 k 个神经元的偏置。 |
一句话总结:Excel 里先用 SUMPRODUCT 做点积,再用 MMULT 做矩阵乘法,最后都加上偏置、过 Sigmoid。
2.4 计算例子
例子 1:隐藏层神经元(SUMPRODUCT 在算什么)
完整公式是:
$$ z_j^{(2)} = \sum_{i=1}^{12} w_{ji}^{(1)} \cdot x_i + b_j^{(1)} $$
为了手写方便,下面只看前 3 个输入和权重,演示这个过程。假设:
$$ \mathbf{w} = [-2.06,\ 3.36,\ -0.63]^\top,\quad b = -0.99,\quad \mathbf{x} = [1,\ 1,\ 1]^\top $$
$$ \begin{aligned} z &= (-2.06) \times 1 + 3.36 \times 1 + (-0.63) \times 1 + (-0.99) \\ &= -0.32 \\[6pt] a &= \sigma(-0.32) = \frac{1}{1 + e^{0.32}} \approx 0.42 \end{aligned} $$
Excel 里会用 SUMPRODUCT(L5:N8, $D$5:$F$8) 一次性把 12 项都乘好再加起来,然后 + $G$5 加上偏置。
例子 2:输出层神经元(MMULT 在算什么)
隐藏层输出(来自书中 Excel 第一个样本的近似值):
$$ \mathbf{a}^{(2)} = [1.5 \times 10^{-6},\ 0.99999999,\ 0.99999997]^\top $$
输出神经元 1 的权重和偏置:
$$ \mathbf{w}_1^{(2)} = [-14.25,\ -3.70,\ 9.33],\quad b_1^{(2)} = 6.64 $$
输出层的计算就是一次 1×3 矩阵 × 3×1 向量:
$$ \begin{aligned} z_1^{(3)} &= (-14.25) \times 1.5 \times 10^{-6} + (-3.70) \times 0.99999999 + 9.33 \times 0.99999997 + 6.64 \\ &\approx -3.70 + 9.33 + 6.64 \\ &\approx 12.28 \\[6pt] a_1^{(3)} &= \sigma(12.28) \approx 0.999995 \end{aligned} $$
含义:模型非常确信这个样本是“0”。Excel 里的
MMULT($D$17:$F$17, O14:O16)做的就是这一步矩阵乘法。
2.5 流程图
flowchart LR
I["输入图像像素 x"] --> W1["隐藏层加权求和 z²"]
W1 --> A1["Sigmoid 激活 a²"]
A1 --> W2["输出层加权求和 z³"]
W2 --> A2["输出概率 a³"]
A2 --> C["计算损失 C"]
C --> S["Excel 求解器调整 w, b"]
S --> W1
2.6 使用注意点 / 避坑
- 求解器=黑盒:Excel Solver 是通过数值方法搜索最优解,参数多的时候很慢,且容易陷入局部最优。
- 权重初始化别全 0:如果所有权重相同,所有神经元学到的东西也相同,模型退化成“单神经元”。
- 数据量不能太少:书中只有几十张图是为了教学,真实项目通常需要成千上万张。
- 输出层要配对损失函数:二分类用 Sigmoid + 交叉熵,多分类用 Softmax + 交叉熵。
2.7 异常场景处理
- 求解器提示“找不到可行解”:检查公式是否有
#VALUE!、输入是否规范、约束是否合理。 - 训练集准确率 100% 但测试集很差:过拟合,增加数据或加正则化/Dropout。
- 输出全是一个类别:标签不平衡,或最后一层权重初始化导致,检查损失函数是否写对。
三、NN 误差反向传播法(Backpropagation)
3.1 核心思想:链式法则
反向传播就是从输出倒推,计算每个权重对最终误差的贡献。
中学学过的复合函数求导:
如果 $y=f(u)$,$u=g(x)$,那么 $\frac{dy}{dx} = \frac{dy}{du} \cdot \frac{du}{dx}$。
神经网络层数很多,就是一层一层套起来的复合函数。反向传播只是把链式法则系统化地算一遍。
3.2 计算图
flowchart LR
X["x"] --> M["× w"]
B["b"] --> S["+ b = z"]
M --> S
S --> A["Sigmoid a"]
A --> L["损失 C"]
L --> D["反向求 ∂C/∂w, ∂C/∂b"]
D --> M
D --> B
3.3 反向传播公式(简化版)
设某层输出为 $a$,加权输入为 $z$,下一层传来的误差为 $\delta_{\text{next}}$:
$$ \begin{aligned} \delta &= \delta_{\text{next}} \cdot w \cdot \sigma’(z) \\ \frac{\partial C}{\partial w} &= a_{\text{prev}} \cdot \delta \\ \frac{\partial C}{\partial b} &= \delta \end{aligned} $$
其中 $\sigma’(z)$ 是 Sigmoid 的导数:
$$ \sigma’(z) = \sigma(z) \cdot (1 - \sigma(z)) $$
3.4 计算例子
假设只有一个输入 x = 1,目标输出 t = 1。
网络:
$$ \begin{aligned} z &= w \cdot x + b \\ a &= \sigma(z) \\ C &= \frac{1}{2}(a - t)^2 \quad \text{(平方误差)} \end{aligned} $$
初始 w = 0.5,b = 0,学习率 η = 0.1。
前向:
$$ \begin{aligned} z &= 0.5 \times 1 + 0 = 0.5 \\ a &= \sigma(0.5) \approx 0.6225 \\ C &= \frac{1}{2}(0.6225 - 1)^2 \approx 0.0712 \end{aligned} $$
反向:
$$ \begin{aligned} \frac{\partial C}{\partial a} &= a - t = -0.3775 \\ \sigma’(z) &= a(1 - a) \approx 0.6225 \times 0.3775 \approx 0.2350 \\ \delta &= \frac{\partial C}{\partial a} \cdot \sigma’(z) \approx -0.0887 \\[6pt] \frac{\partial C}{\partial w} &= x \cdot \delta = -0.0887 \\ \frac{\partial C}{\partial b} &= \delta = -0.0887 \end{aligned} $$
更新:
$$ \begin{aligned} w_{\text{new}} &= 0.5 - 0.1 \times (-0.0887) \approx 0.5089 \\ b_{\text{new}} &= 0 - 0.1 \times (-0.0887) \approx 0.0089 \end{aligned} $$
再算一次前向,a 会比 0.6225 更接近 1,误差减小。
3.5 流程图
flowchart TD
F["前向传播:算 z, a, C"] --> B["从输出层开始反向求 δ"]
B --> G["计算 ∂C/∂w, ∂C/∂b"]
G --> U["梯度下降更新权重"]
U --> F
3.6 使用注意点 / 避坑
| 坑 | 说明 | 处理 |
|---|---|---|
| Sigmoid 梯度消失 | 输入很大或很小时,Sigmoid 导数接近 0,深层网络传不动误差 | 用 ReLU / LeakyReLU |
| ReLU 死亡 | 某些神经元永远输出 0,梯度也永远 0 | 用 LeakyReLU、PReLU,或调小学习率 |
| 梯度爆炸 | 深层网络梯度越乘越大,权重变成 NaN | 梯度裁剪(Gradient Clipping)、BatchNorm、残差连接 |
| 损失与输出不匹配 | 用 Sigmoid 配 Softmax 损失会出问题 | 二分类用 binary_crossentropy,多分类用 categorical_crossentropy |
| batch 太小 | 梯度噪声大,训练抖动 | 增大 batch,或使用带动量的优化器 |
3.7 异常场景处理
- 某层梯度全为 0:可能是激活函数“死”了,或学习率过大导致参数进入饱和区。检查激活函数输出分布。
- 训练 loss 下降但验证 loss 上升:典型过拟合,早停或加 Dropout。
- 不同层梯度尺度差 1000 倍:深层网络梯度不稳定,考虑 Batch Normalization 或更合适的初始化(He/Xavier)。
四、CNN 求解器(卷积神经网络训练)
4.1 卷积是什么?
卷积 = 用一个小窗口(卷积核 / filter)在图片上滑来滑去,局部加权求和。
好处:
- 捕捉边缘、纹理等局部特征。
- 同一个核扫完整张图,参数少很多。
4.2 池化(Pooling)
池化 = 把一小块区域压缩成一个数,常用 Max Pooling(取最大值)。
作用:降维、减少计算量、让特征对位置变化不那么敏感。
4.3 计算例子
输入图像(4×4):
1 1 0 0
1 1 0 0
0 0 1 1
0 0 1 1
卷积核(2×2):
1 1
1 -1
卷积(无 padding,stride=1)第一步取左上角:
1×1 + 1×1 + 1×1 + (-1)×1 = 2
滑完得到 3×3 特征图:
2 0 0
0 2 0
0 0 2
Max Pooling(2×2,stride=2):
2 0
0 2
然后拉平成 [2, 0, 0, 2],接到全连接层做分类。
书中
5-4 CNN(求解器).xlsx就是用类似流程识别“文字 1、2、3”。
4.4 结构图
flowchart LR
I["输入图像"] --> C["卷积层"]
C --> R["激活函数 ReLU/Sigmoid"]
R --> P["池化层 Max Pooling"]
P --> F["拉平 Flatten"]
F --> D["全连接层"]
D --> O["输出分类"]
4.5 使用注意点 / 避坑
- 输出尺寸算错:卷积后尺寸为 $H_{\text{out}} = \frac{H_{\text{in}} - K + 2P}{S} + 1$,忘记 padding 会导致后续层维度不匹配。
- 核太大:会丢失细节,图像任务一般 3×3 最常用。
- 池化丢失位置信息:如果任务需要精确定位(如目标检测的边界框),Max Pooling 不宜太多。
- 通道数暴涨:每加一个卷积层通道数翻倍会迅速爆显存,要结合池化或stride=2降采样。
4.6 异常场景处理
- 特征图全 0:可能是权重初始化太差,或学习率过大导致 ReLU 全部死亡。加 BatchNorm 或换初始化。
- 输出尺寸报错:逐层打印特征图 shape,检查核大小、stride、padding。
- 显存不足:减小 batch size,或减少通道数/层数。
五、CNN 误差反向传播法
5.1 卷积层的反向传播
卷积的反向传播本质上仍是卷积,只是:
- 误差图需要和旋转 180° 的卷积核做卷积。
- 再乘以当前层激活函数的导数。
简化公式:
$$ \delta_l = \delta_{l+1} \circledast \text{rot180}(W_{l+1}) \odot f’(z_l) $$
其中 ⊛ 表示卷积,⊙ 表示对应元素相乘。
5.2 池化层的反向传播
Max Pooling 反向传播最简单:把误差传回给“最大值所在位置”,其余位置填 0。
flowchart LR
subgraph 前向
A["2 1\n0 3"] --> B["Max=3"]
end
subgraph 反向
E["误差 0.5"] --> C["0 0\n0 0.5"]
end
B -.-> E
5.3 计算例子
前向 Max Pooling 2×2:
输入: 输出:
2 1 3
0 3
反向时,如果输出位置误差是 0.5,传回输入应为:
0 0
0 0.5
然后继续往前传给卷积层。
5.4 流程图
flowchart TD
subgraph 前向
F1["卷积 + 激活"] --> F2["Max Pooling"] --> F3["全连接输出"]
end
subgraph 反向
B1["输出层误差 δ"] --> B2["池化层反向:把误差还给最大值位置"]
B2 --> B3["卷积层反向:rot180 核卷积 δ"]
B3 --> B4["更新卷积核权重"]
end
F3 -.-> B1
5.5 使用注意点 / 避坑
| 坑 | 说明 | 处理 |
|---|---|---|
| Max Pooling 不可导 | 它本身不是光滑函数,但反向传播时我们只把梯度传给最大值位置,工程上可行 | 注意保存前向时的“最大值位置掩码” |
| stride > 1 反向 upsample 复杂 | 误差图尺寸变小,传回去要补 0 | 框架会自动处理,手写时要小心 |
| Padding 的梯度 | padding 区域不应该有梯度,加 padding 时要把这些位置屏蔽 | 反向传播只更新非 padding 区域 |
| BatchNorm 插在卷积后 | 会改变反向传播的梯度分布,但通常更稳定 | BN 需要和卷积一起训练 |
5.6 异常场景处理
- 卷积核学不到东西:检查初始化、学习率,或前面层是否已经“死掉”。
- 深层 CNN loss 不下降:可能是梯度消失,加残差连接(ResNet)或 BatchNorm。
- 训练集准确率很高,测试集很低:CNN 参数多,极易过拟合,加数据增强、Dropout、L2 正则化。
六、通用训练避坑指南
下面这 10 条适用于 NN 和 CNN:
- 数据先归一化:像素除以 255,数值特征减去均值除以标准差。
- 划分训练 / 验证 / 测试集:不要拿测试集调参。
- 从小模型开始:先跑通一个两层的 baseline,再加深。
- 学习率是最重要的超参数:先用默认值,再按 10 倍上下调。
- 监控 loss 曲线:训练 loss 和验证 loss 一起画,才能判断是否过拟合。
- 早停 Early Stopping:验证 loss 连续 N 轮不降就停。
- 权重初始化:ReLU 用 He 初始化,Sigmoid/Tanh 用 Xavier/Glorot 初始化。
- Batch Size:小 batch(16-64)通常泛化更好,大 batch 训练更快但可能陷在尖锐最小值。
- 标签检查:花 10 分钟抽样看标签是否正确,比调一周模型都有效。
- 随机种子固定:方便复现和对比实验。
七、异常场景与业务异常处理
7.1 训练阶段
| 异常 | 可能原因 | 处理 |
|---|---|---|
| Loss = NaN | 学习率过大、梯度爆炸、log(0) | 降低学习率、梯度裁剪、加 ε |
| Loss 完全不降 | 学习率太小、数据损坏、标签全相同 | 逐步调大 lr、检查数据pipeline |
| 验证 loss 上升 | 过拟合 | 早停、Dropout、数据增强、简化模型 |
| 训练 loss 和验证 loss 都高 | 欠拟合 | 增加模型容量、训练更久、减少正则 |
| 类别严重不平衡 | 某些类别样本极少 | 加权损失、过采样、Focal Loss |
7.2 部署/业务阶段
| 业务异常 | 表现 | 处理 |
|---|---|---|
| 概念漂移 | 线上数据分布变了,模型准确率下降 | 监控分布、定期重训、在线学习 |
| 输入越界 | 用户上传纯黑图、超大图、非图片文件 | 前置校验、异常输入兜底规则 |
| ** adversarial 样本** | 人眼看不出区别,模型却错判 | 对抗训练、输出置信度+人工复核 |
| 长尾类别错误 | 冷门类别识别率低 | 收集更多样本、用度量学习/少样本学习 |
| 时延/成本超标 | 模型太大,推理慢 | 剪枝、量化、蒸馏、换小模型 |
7.3 一个实用的排查 checklist
□ 输入数据范围对吗?(0~1 还是 -1~1?)
□ 标签编码对吗?(one-hot / integer / 概率?)
□ 损失函数和输出激活匹配吗?
□ 第一层输出 shape 符合预期吗?
□ 权重还有在更新吗?(打印梯度范数)
□ 训练一个 batch 能过拟合吗?( Sanity Check )
□ 学习率是不是在合理区间?
八、总结
| 算法 | 核心作用 | 一句话口诀 |
|---|---|---|
| 梯度下降法 | 找函数最小值 | 看梯度,反方向,迈小步 |
| NN 求解器 | 用优化器直接调权重 | 输入加权求和,Sigmoid 出概率 |
| NN 反向传播 | 高效算每个权重的梯度 | 从后往前,链式求导 |
| CNN 求解器 | 图像特征提取 + 分类 | 卷积找局部特征,池化降维 |
| CNN 反向传播 | 卷积和池化的梯度回传 | 卷积核旋转 180°,池化只传最大值 |
如果你是第一次接触,建议:
- 先打开
2-11 梯度下降法.xlsx,改改η和起点,看 z 怎么变。 - 再打开
3-5 NN(求解器).xlsx,试着改输入像素,观察输出概率。 - 最后对照
4-4、5-4、5-6这几个 Excel,理解“求解器版”和“反向传播版”其实是同一套东西的不同实现方式。
本文档持续维护中。如果有哪一步的公式或例子让你卡住,欢迎在评论区指出,我会继续用更直观的方式补充图解。