
机器学习数学推导(十九):神经网络与反向传播
神经网络如何学习?本文推导前向传播的矩阵形式、反向传播的链式法则逐层推导、梯度消失/爆炸的数学分析、以及 Xavier 和 He 初始化的方差保持策略。
本文概览#
单个感知机无法解决 XOR 问题,但只要堆叠足够多的感知机并引入非线性激活函数,就能构建出一个通用函数逼近器。那么,这样的网络如何从数据中学习?答案是反向传播——它本质上是对链式法则的高效应用,通过一次反向遍历复用中间结果,成为过去四十年所有深度学习库的核心引擎。深入理解其数学原理,还能揭示两个关键现象:为什么深层网络容易遭遇梯度消失或爆炸,以及为什么权重初始化远非随意选择。

你会学到:
- 感知机:模型、学习规则和收敛定理。
- 多层网络前向传播的矩阵形式。
- 反向传播:逐层推导链式法则,并明确需要缓存哪些中间量。
- 梯度消失与爆炸的根源——从雅可比矩阵连乘积中一目了然。
- Xavier 与 He 初始化:方差保持的数学推导,及其适用场景。
预备知识: 微积分(链式法则、偏导数)、线性代数(矩阵乘法)和基础概率。
感知机:一切的起点#
模型#
$$z = \mathbf{w}^{T}\mathbf{x} + b, \qquad \hat{y} = \operatorname{sign}(z) = \begin{cases} +1 & z \geq 0,\\ -1 & z < 0.\end{cases}$$几何上,方程 $\mathbf{w}^{T}\mathbf{x} + b = 0$ 定义了一个超平面,将输入空间划分为两个半空间,而 $\hat y$ 表示样本落在哪一侧。
学习算法#
$$\mathbf{w} \leftarrow \mathbf{w} + \eta\, y_i\, \mathbf{x}_i, \qquad b \leftarrow b + \eta\, y_i.$$这等价于在感知机损失 $\sum_{i \in M} -y_i(\mathbf{w}^{T}\mathbf{x}_i + b)$ 上执行随机次梯度下降,其中 $M$ 是当前被错分的样本集合。
收敛定理#
$$\frac{\|\mathbf{w}^{*}\|^{2}\, R^{2}}{\gamma^{2}} \qquad \text{次更新内收敛},$$其中 $R = \max_i \|\mathbf{x}_i\|$ 。证明的关键在于:一方面,$\mathbf{w}_k^{T}\mathbf{w}^{*}$ 至少以线性速度增长;另一方面,$\|\mathbf{w}_k\|$ 的增长至多为 $\sqrt{k}$ 。二者结合即可推出有限的更新上限。
XOR 问题#
四个点 $(0,0)\!\to\!0$ 、$(0,1)\!\to\!1$ 、$(1,0)\!\to\!1$ 、$(1,1)\!\to\!0$ 不是线性可分的:没有任何一条直线能将对角线上的两类点完全分开。Minsky 与 Papert 在 1969 年指出这一事实后,连接主义研究陷入长达十余年的停滞,直到多层网络出现才轻松解决该问题——只需画出两条超平面,再将其输出组合即可。
多层网络与前向传播#
网络结构#

前馈神经网络由一系列仿射变换与逐元素非线性激活交替构成:
- 输入层: $\mathbf{h}^{(0)} = \mathbf{x}\in\mathbb{R}^{d_0}$ 。
- 隐藏层: $\mathbf{h}^{(l)}\in\mathbb{R}^{d_l}$ ,其中 $l = 1, \ldots, L-1$ 。
- 输出层: $\mathbf{h}^{(L)} = \hat{\mathbf{y}}\in\mathbb{R}^{d_L}$ 。
前向传播(矩阵形式)#

其中 $\mathbf{W}^{(l)}\in\mathbb{R}^{d_l\times d_{l-1}}$ ,$\mathbf{b}^{(l)}\in\mathbb{R}^{d_l}$ 。前向传播过程中,我们会缓存每一层的 $\mathbf{h}^{(l-1)}$ 和 $\mathbf{z}^{(l)}$ ,因为反向传播需要用到它们。
激活函数全家福#

| 函数 | 公式 | 导数 | 备注 |
|---|---|---|---|
| Sigmoid | $\sigma(z) = \dfrac{1}{1+e^{-z}}$ | $\sigma(z)\bigl(1-\sigma(z)\bigr)$ | 输出在 $(0,1)$ 区间;两端饱和导致梯度消失 |
| Tanh | $\tanh(z)$ | $1 - \tanh^{2}(z)$ | 零中心化,优于 Sigmoid,但仍会饱和 |
| ReLU | $\max(0, z)$ | $\mathbb{1}[z > 0]$ | 正区梯度恒为 1;可能产生“死神经元” |
| Leaky ReLU | $\max(\alpha z, z)$ ,$\alpha\!\approx\!0.01$ | $1$ 或 $\alpha$ | 缓解 ReLU 的死亡问题 |
| GELU | $z\,\Phi(z)$ | 平滑,近 0 处呈钟形 | Transformer 默认激活函数 |
| Swish | $z\,\sigma(z)$ | $\sigma(z) + z\,\sigma(z)(1-\sigma(z))$ | 自门控、平滑 |
图右侧清晰表明:Sigmoid 的导数最大仅为 0.25,而 ReLU 在激活区域导数恒为 1。这一微小差异,却深刻影响了后续的梯度传播行为。
通用逼近定理#

使得 $\|f - g\|_\infty < \varepsilon$ 。上图展示了该定理的实际效果:一个仅含 64 个 ReLU 单元的单隐层网络,就能轻松拟合平滑波形、绝对值折线,甚至不连续的阶跃函数。
注意: 这只是一个存在性结论:它未说明 $M$ 需要多大,也未保证梯度下降一定能找到合适的 $g$ 。实践中,深度比宽度指数级更高效——深度为 $L$ 的网络可表达某些需宽度 $\Omega(2^{L})$ 的浅层网络才能表示的函数(Telgarsky, 2016)。
反向传播:链式法则的大规模应用#

损失函数#
$$ \mathcal{L} = \tfrac{1}{2}\,\bigl\|\hat{\mathbf{y}} - \mathbf{y}\bigr\|^{2}. $$ $$ \mathcal{L} = -\sum_{c} y_c \log \hat{y}_c, \qquad \hat{\mathbf{y}} = \operatorname{softmax}(\mathbf{z}^{(L)}). $$核心思想#

我们需要计算每层的 $\partial\mathcal{L}/\partial\mathbf{W}^{(l)}$ 和 $\partial\mathcal{L}/\partial\mathbf{b}^{(l)}$ 。若对每个参数单独回溯整个网络,复杂度将达 $\mathcal{O}(P^2)$ ($P$ 为参数总数)。反向传播的关键洞察在于:所有梯度共享从输出到当前层的相同路径。通过在一次从右到左的遍历中计算每层的误差信号,所有参数梯度均可通过简单外积得出,复杂度降至 $\mathcal{O}(P)$ 。
误差信号的递推公式#
$$ \boldsymbol{\delta}^{(l)} \;=\; \frac{\partial \mathcal{L}}{\partial \mathbf{z}^{(l)}}. \tag{3} $$ $$ \boldsymbol{\delta}^{(L)} \;=\; \hat{\mathbf{y}} - \mathbf{y}. \tag{4} $$“预测减真实”——这正是 softmax 与交叉熵成为分类默认组合的核心原因:梯度形式极其简单。
$$ \boldsymbol{\delta}^{(l)} \;=\; \bigl(\mathbf{W}^{(l+1)\,T}\boldsymbol{\delta}^{(l+1)}\bigr) \,\odot\, \sigma'\!\left(\mathbf{z}^{(l)}\right). \tag{5} $$通俗地说:将上层误差通过转置权重矩阵传回,再逐元素乘以本层激活函数的导数进行“门控”。
参数梯度#
$$ \frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(l)}} \;=\; \boldsymbol{\delta}^{(l)}\, \mathbf{h}^{(l-1)\,T}, \tag{6} $$ $$ \frac{\partial \mathcal{L}}{\partial \mathbf{b}^{(l)}} \;=\; \boldsymbol{\delta}^{(l)}. \tag{7} $$每个权重梯度都是输出端误差信号与输入端激活值的外积——而激活值已在前向传播中缓存。
手算一个 2 层 MLP 的反向传播#
公式听起来抽象,举个能在草稿纸上跑完的例子。设:
- 输入 $\mathbf{x} = (1.0,\ 0.5)$ ,标签 $y = 1$ (回归任务,MSE 损失);
- 第 1 层(隐藏层,2 个神经元,sigmoid 激活): $\mathbf{W}^{(1)} = \begin{pmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \end{pmatrix},\quad \mathbf{b}^{(1)} = \begin{pmatrix} 0 \\ 0 \end{pmatrix};$
- 第 2 层(输出层,1 个神经元,线性激活): $\mathbf{W}^{(2)} = (0.5,\ -0.6),\quad b^{(2)} = 0.1.$
预测 $\hat y = z^{(2)} \approx 0.0014$ ,损失 $\mathcal{L} = \tfrac{1}{2}(0.0014 - 1)^2 \approx 0.4986$ 。
反向传播:
- 输出层误差 $\delta^{(2)} = \hat y - y = 0.0014 - 1 = -0.9986$ ;
- 第 2 层参数梯度(外积公式 (6)(7)): $\nabla_{\mathbf{W}^{(2)}} = \delta^{(2)} \cdot \mathbf{h}^{(1)\top} \approx (-0.5491,\ -0.6216),\qquad \nabla_{b^{(2)}} = -0.9986.$
- 隐藏层误差(公式 (5),sigmoid 导数 $\sigma'(z) = h(1-h)$ ): $\boldsymbol{\delta}^{(1)} = \mathbf{W}^{(2)\top}\delta^{(2)} \odot \sigma'(\mathbf{z}^{(1)}).$ 其中 $\mathbf{W}^{(2)\top}\delta^{(2)} = (0.5,\ -0.6)\cdot(-0.9986) = (-0.4993,\ 0.5992)$ , $\sigma'(\mathbf{z}^{(1)}) = (0.5498\cdot 0.4502,\ 0.6225\cdot 0.3775) \approx (0.2476,\ 0.2350)$ , 逐元素相乘得 $\boldsymbol{\delta}^{(1)} \approx (-0.1236,\ 0.1408)$ 。
- 第 1 层参数梯度: $\nabla_{\mathbf{W}^{(1)}} = \boldsymbol{\delta}^{(1)} \mathbf{x}^\top \approx \begin{pmatrix} -0.1236 & -0.0618 \\ 0.1408 & 0.0704 \end{pmatrix},\quad \nabla_{\mathbf{b}^{(1)}} \approx (-0.1236,\ 0.1408).$
重新前向传播得到新预测 $\hat y \approx 0.776$ ,新损失 $\approx 0.0251$ ——一步把损失从 0.4986 砍到 0.0251,下降一个数量级。这就是反向传播在两层网络上的全部运转:算 $\delta$ 、外积成参数梯度、用一阶法走一步。当层数变成 50、参数变成 10 亿,公式还是这三句,只是循环次数多了。
| |
整个算法本质上只有三步:一次外积、一次求和、一次转置矩阵–向量乘法再经激活导数门控。现代 autograd 引擎虽自动管理中间变量,但底层执行的正是这套递推逻辑。
梯度消失与梯度爆炸#
梯度消失问题#
$$ \frac{\partial \mathcal{L}}{\partial \mathbf{W}^{(1)}} \;\propto\; \prod_{l=2}^{L} \Bigl[\mathbf{W}^{(l)\,T}\, \operatorname{diag}\bigl(\sigma'(\mathbf{z}^{(l-1)})\bigr)\Bigr]. $$对 Sigmoid 而言,$\sigma'(z)\leq 0.25$ 。若各权重矩阵谱范数接近 1,则第 $1$ 层梯度大小约为 $0.25^{L-1}$ 。当 $L=20$ 时,该值约 $3.6\times 10^{-12}$ ——梯度更新在数值上几乎为零,浅层参数无法有效学习。
具体感受这个数字:假设损失对最后一层权重的梯度规模是 $1$ ,那么经 5 层 sigmoid 反传,到第 1 层的梯度大约 $0.25^4 \approx 0.0039$ ;经 10 层是 $0.25^9 \approx 3.8\times 10^{-6}$ ;经 20 层是 $0.25^{19} \approx 3.6\times 10^{-12}$ ,已经低于 float32 的有效精度。换成 ReLU + He 初始化,理论上每层 $\mathbb{E}[\sigma'(z)\cdot \|\mathbf{W}\|_2^2] \approx 1$ ,20 层后梯度仍接近 1 ——同样的"五层、十层、二十层",sigmoid 网络的浅层梯度按 $4^{-(L-1)}$ 速度衰减,ReLU 网络几乎不衰减。这就是 2012 年以后 sigmoid 几乎从隐藏层消失、ReLU 接管一切的根本原因。
梯度爆炸问题#
反之,若权重矩阵谱范数大于 1 且激活导数无强收缩效应,同一乘积会指数增长,很快导致数值溢出。RNN 尤其严重,因其展开后同一权重矩阵被重复相乘 $T$ 次。
曲线解读#

该图通过实验复现了上述现象:将单位梯度信号反向传播通过不同深度的随机网络。Sigmoid(Xavier 初始化)每增加一层,梯度衰减近一个数量级;ReLU 配合 He 初始化则基本维持在健康范围;而未缩放的 ReLU 则以类似速率爆炸。注意 y 轴为对数坐标——每条网格线代表十倍变化。
解决方案#
| 问题 | 方案 | 原理 |
|---|---|---|
| 梯度消失 | ReLU 激活函数 | $z>0$ 时 $\sigma'(z)=1$ ,避免指数衰减 |
| 梯度消失 | 残差连接 | $\mathbf{h}^{(l)} = \mathbf{h}^{(l-1)} + F(\mathbf{h}^{(l-1)})$ ,提供恒等梯度路径绕过非线性 |
| 梯度消失 | 批归一化 | 逐层稳定激活分布 |
| 梯度爆炸 | 梯度裁剪 | 当 $\mid\mathbf{g}\mid > c$ 时,按 $\mathbf{g}\!\leftarrow\!(c/\mid\mathbf{g}\mid)\,\mathbf{g}$ 缩放 |
| 两者兼顾 | 合理初始化 | 保持激活与梯度方差跨层稳定(见下节) |
权重初始化策略#
为什么初始化很重要#
- 全零初始化: 同层所有神经元计算相同函数、接收相同梯度,无法打破对称性。
- 过大: 预激活落入激活函数饱和区,梯度消失。
- 过小: 激活值趋近于零,前向信号逐渐消失。
因此,目标是保持激活值与梯度的方差在各层间稳定。合适的尺度取决于该层的 fan-in 与激活函数。
Xavier(Glorot)初始化#
$$z_j = \sum_{i=1}^{n_{\text{in}}} w_{ji}\, h_i.$$ $$\operatorname{Var}(z_j) = n_{\text{in}}\cdot \operatorname{Var}(w)\cdot \operatorname{Var}(h).$$ $$ \operatorname{Var}(w) = \frac{2}{n_{\text{in}} + n_{\text{out}}}, \qquad w \sim \mathcal{U}\!\left(-\sqrt{\tfrac{6}{n_{\text{in}}+n_{\text{out}}}},\; \sqrt{\tfrac{6}{n_{\text{in}}+n_{\text{out}}}}\right). \tag{8} $$最适合 Sigmoid 与 Tanh。
He 初始化#
$$ \operatorname{Var}(w) = \frac{2}{n_{\text{in}}}, \qquad w \sim \mathcal{N}\!\left(0,\, \tfrac{2}{n_{\text{in}}}\right). \tag{9} $$最适合 ReLU 及其变体。
总结表#
| 激活函数 | 初始化方法 | $\operatorname{Var}(w)$ |
|---|---|---|
| Sigmoid / Tanh | Xavier | $\dfrac{2}{n_{\text{in}} + n_{\text{out}}}$ |
| ReLU | He | $\dfrac{2}{n_{\text{in}}}$ |
| Leaky ReLU($\alpha$ ) | He(修正版) | $\dfrac{2}{(1 + \alpha^{2})\, n_{\text{in}}}$ |
上文梯度图中的绿色曲线(ReLU + He)正是该理论的最佳验证:无论网络多深,梯度规模始终接近 1。
损失曲面的特性#

即使是很小的网络,其损失曲面也高度非凸:包含两个深谷、一个鞍点和一条窄脊。图中展示了 SGD 从糟糕初始点出发的轨迹。有两个关键事实值得注意:
- 大多数局部极小值已足够好: 随着网络变宽,经验损失的极小值往往位于深度相近的平坦区域(Choromanska et al., 2015)。认为必须找到全局最优的想法源自凸优化,在深度学习中并不适用。
- 高维空间中鞍点远多于局部极小值。 在 $\mathbb{R}^d$ 中,随机临界点处 Hessian 所有 $d$ 个特征值同号的概率呈指数级下降。SGD 的噪声反而有助于逃离这些鞍点(Dauphin et al., 2014)。
这两点解释了为何简单的一阶优化方法在缺乏凸性保证的情况下,仍主导着深度学习实践。
PyTorch 中 loss.backward() 到底做了什么#
PyTorch 的 autograd 并非魔法,而是我们上述链式法则的直接实现,仅叠加了两层工程优化。
| |
调用 loss.backward() 时,实际发生三件事:首先,前向传播中所有 requires_grad=True 的张量都会记录生成它的操作——这就是计算图(tape);其次,backward 按拓扑逆序遍历 tape,每个节点知道如何将传入的余切向量与局部 Jacobian 相乘(若存在高效 vector-Jacobian product,则无需显式构造 Jacobian);最后,梯度是累加到 .grad 中而非覆盖——这正是训练循环开头需调用 optimizer.zero_grad() 的原因。
使用 PyTorch 时有两个常见陷阱:(1) loss.backward() 默认释放计算图,二次调用会报错 RuntimeError: Trying to backward through the graph a second time,如需保留可传 retain_graph=True;(2) 对参与 autograd 的张量执行 in-place 操作时,若反向传播需原值,梯度会被静默破坏,错误信息 one of the variables needed for gradient computation has been modified by an inplace operation 是除 shape 不匹配外最常见的训练 bug。
常见陷阱#
学生常对反向传播有五个误解:
“反向传播就是梯度下降。” 错。反向传播仅计算 $\nabla_{\boldsymbol\theta} L$ ,而 SGD、Adam、L-BFGS 等优化器才是梯度的使用者。你可以计算梯度后不做任何事,也可用有限差分代替反向传播再做梯度下降。混淆二者会导致切换优化器时困惑。
“梯度消失是因为网络太深。” 半对。深度放大了每层的性质:若每层局部 Jacobian 谱范数 $<1$ ,$L$ 层连乘后梯度按 $\rho^L$ 衰减。ResNet 并非靠减少深度,而是通过恒等跳跃连接使局部 Jacobian 特征值强制为 1。问题根源在于 Jacobian 的谱特性,而非深度本身。
“ReLU 完全解决了饱和问题。” 仅在正半轴成立。若 ReLU 单元预激活始终为负,其梯度恒为零——即“死 ReLU”。典型训练中,5%–15% 的 ReLU 单元在前几个 epoch 死亡且无法恢复。Leaky ReLU 与 GELU 主要为此设计。
“参数越多越容易过拟合。” 在现代深度学习中不成立。参数量超样本量 10 倍的网络仍可良好泛化,即**双下降(double descent)**现象:测试误差在插值阈值处达峰后,随宽度增加再度下降。经典偏差-方差权衡(第 20 篇)对过参数化模型已不充分。
“初始化只影响训练速度。” 错。若初始化极差,深层 ReLU 网络的预激活要么全零、要么饱和,无论训练多久都无法恢复。He 初始化(方差 $2/n_{\text{in}}$ )并非优化技巧,而是网络可训练的必要前提。
练习题#
练习 1(链式法则): 设 $y = \sigma(wx + b)$ ,其中 $\sigma(z) = 1/(1+e^{-z})$ ,求 $\partial y/\partial w$ 。
解答: $\partial y/\partial w = \sigma'(z)\,x = \sigma(z)\bigl(1 - \sigma(z)\bigr)\,x$ 。
练习 2(梯度消失): 为何 Sigmoid 导致梯度消失而 ReLU 不会?
解答: Sigmoid 导数 $\sigma'(z) \leq 0.25$ ,经 $L$ 层后梯度至多衰减至 $0.25^{L}$ ,呈指数下降;ReLU 在激活区导数恒为 1,无此问题。
练习 3(批归一化): BatchNorm 如何帮助训练?
解答: 它将每层预激活重置为近似零均值、单位方差,从而稳定梯度幅度,允许更大 LR;mini-batch 噪声还起到轻微正则化作用。
练习 4(Dropout 在测试时)。 训练用 $p = 0.5$ 的 dropout,测试时如何调整?
解答: 保留所有神经元并将权重乘以 $(1-p)=0.5$ 以保持期望输出。现代库多用反向 dropout:训练时激活值除以 $(1-p)$ ,测试时无需调整。
练习 5(Xavier): 为何 Xavier 用 $\operatorname{Var}(w) = 2/(n_{\text{in}} + n_{\text{out}})$ ?
解答: 前向要求 $n_{\text{in}}\operatorname{Var}(w)=1$ ,反向要求 $n_{\text{out}}\operatorname{Var}(w)=1$ ,该形式是兼顾二者的折中方案。
下一步#
神经网络给了表达力,但没有自动给泛化。当模型容量远超数据时,训练损失可以被压到 0,测试损失却可能爆掉——这就是过拟合。整个系列的最后一章正是处理这个问题:正则化与模型选择。
正则化的本质是"在容量和数据之间装一个安全阀"——L2 把参数往原点拉、L1 引入稀疏性、Dropout 在训练时打断神经元、早停在过拟合开始之前停住。模型选择则是把这一组安全阀的强度调到最合适的位置——交叉验证、AIC/BIC、信息准则。我还会聊一下深度学习时代的两个反直觉现象:双下降和过参数化网络的隐式正则化。这一章是整个系列的收尾——不是因为它最难,而是因为前面所有算法的"调参"二字,背后都是这一章的语言。
参考文献#
[1] Rosenblatt, F. (1958). The perceptron: A probabilistic model for information storage and organization in the brain. Psychological Review, 65(6), 386–408.
[2] Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature, 323(6088), 533–536.
[3] Cybenko, G. (1989). Approximation by superpositions of a sigmoidal function. Mathematics of Control, Signals and Systems, 2(4), 303–314.
[4] Hornik, K. (1991). Approximation capabilities of multilayer feedforward networks. Neural Networks, 4(2), 251–257.
[5] Glorot, X., & Bengio, Y. (2010). Understanding the difficulty of training deep feedforward neural networks. AISTATS, 249–256.
[6] He, K., Zhang, X., Ren, S., & Sun, J. (2015). Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification. ICCV, 1026–1034.
[7] Ioffe, S., & Szegedy, C. (2015). Batch normalization: Accelerating deep network training by reducing internal covariate shift. ICML, 448–456.
[8] Dauphin, Y., Pascanu, R., Gulcehre, C., Cho, K., Ganguli, S., & Bengio, Y. (2014). Identifying and attacking the saddle point problem in high-dimensional non-convex optimization. NeurIPS.
[9] Choromanska, A., Henaff, M., Mathieu, M., Ben Arous, G., & LeCun, Y. (2015). The loss surfaces of multilayer networks. AISTATS.
[10] Telgarsky, M. (2016). Benefits of depth in neural networks. COLT.
[11] Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press. Ch. 6.
本文是 ML Mathematical Derivations 系列的第 19 章。下一章:第 20 章:正则化与模型选择 。上一章:第 18 章:聚类算法 。
机器学习数学推导 20 篇
- 01 机器学习数学推导(一):绪论与数学基础
- 02 机器学习数学推导(二):线性代数与矩阵论
- 03 机器学习数学推导(三):概率论与统计推断
- 04 机器学习数学推导(四):凸优化理论
- 05 机器学习数学推导(五):线性回归
- 06 机器学习数学推导(六):逻辑回归与分类
- 07 机器学习数学推导(七):决策树
- 08 机器学习数学推导(八):支持向量机
- 09 机器学习数学推导(九):朴素贝叶斯
- 10 机器学习数学推导(十):半朴素贝叶斯与贝叶斯网络
- 11 机器学习数学推导(十一):集成学习
- 12 机器学习数学推导(十二):XGBoost 与 LightGBM
- 13 机器学习数学推导(十三):EM 算法与 GMM
- 14 机器学习数学推导(十四):变分推断与变分 EM
- 15 机器学习数学推导(十五):隐马尔可夫模型
- 16 机器学习数学推导(十六):条件随机场
- 17 机器学习数学推导(十七):降维与主成分分析
- 18 机器学习数学推导(十八):聚类算法
- 19 机器学习数学推导(十九):神经网络与反向传播 当前
- 20 机器学习数学推导(二十):正则化与模型选择