机器学习数学推导(十九):神经网络与反向传播

神经网络如何学习?本文推导前向传播的矩阵形式、反向传播的链式法则逐层推导、梯度消失/爆炸的数学分析、以及 Xavier 和 He 初始化的方差保持策略。

本文概览#

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

机器学习数学推导(19):神经网络与反向传播 —— 图示

你会学到:

  1. 感知机:模型、学习规则和收敛定理。
  2. 多层网络前向传播的矩阵形式。
  3. 反向传播:逐层推导链式法则,并明确需要缓存哪些中间量。
  4. 梯度消失与爆炸的根源——从雅可比矩阵连乘积中一目了然。
  5. 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{z}^{(l)} = \mathbf{W}^{(l)}\,\mathbf{h}^{(l-1)} + \mathbf{b}^{(l)}, \tag{1} $$ $$ \mathbf{h}^{(l)} = \sigma\!\left(\mathbf{z}^{(l)}\right), \tag{2} $$

其中 $\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。这一微小差异,却深刻影响了后续的梯度传播行为。

通用逼近定理#

通用逼近:单隐层 ReLU MLP 拟合不同目标函数

$$g(\mathbf{x}) = \sum_{j=1}^{M} v_j\, \sigma\!\left(\mathbf{w}_j^{T}\mathbf{x} + b_j\right)$$

使得 $\|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.$
$$\mathbf{z}^{(1)} = \mathbf{W}^{(1)} \mathbf{x} = \begin{pmatrix} 0.1\cdot 1.0 + 0.2\cdot 0.5 \\ 0.3\cdot 1.0 + 0.4\cdot 0.5 \end{pmatrix} = \begin{pmatrix} 0.20 \\ 0.50 \end{pmatrix}.$$ $$\mathbf{h}^{(1)} = \sigma(\mathbf{z}^{(1)}) \approx (0.5498,\ 0.6225).$$ $$z^{(2)} = 0.5\cdot 0.5498 + (-0.6)\cdot 0.6225 + 0.1 = 0.2749 - 0.3735 + 0.1 = 0.0014.$$

预测 $\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).$
$$\mathbf{W}^{(1)} \leftarrow \begin{pmatrix} 0.2236 & 0.2618 \\ 0.1592 & 0.3296 \end{pmatrix},\quad \mathbf{W}^{(2)} \leftarrow (1.0491,\ 0.0216),\quad b^{(2)} \leftarrow 1.0986.$$

重新前向传播得到新预测 $\hat y \approx 0.776$ ,新损失 $\approx 0.0251$ ——一步把损失从 0.4986 砍到 0.0251,下降一个数量级。这就是反向传播在两层网络上的全部运转:算 $\delta$ 、外积成参数梯度、用一阶法走一步。当层数变成 50、参数变成 10 亿,公式还是这三句,只是循环次数多了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
def backprop(X, y, weights, biases, activations):
    """一次前向加一次反向传播。"""
    L = len(weights)

    # 前向传播 —— 缓存激活值和预激活值
    h = [X]
    z = []
    for l in range(L):
        z_l = weights[l] @ h[-1] + biases[l]
        z.append(z_l)
        h.append(activations[l](z_l))

    # 反向传播 —— 假设输出层是 softmax + 交叉熵
    delta = h[-1] - y
    grad_W = [None] * L
    grad_b = [None] * L
    for l in range(L - 1, -1, -1):
        grad_W[l] = delta @ h[l].T
        grad_b[l] = delta.sum(axis=1, keepdims=True)
        if l > 0:
            delta = (weights[l].T @ delta) * activations[l].deriv(z[l - 1])
    return grad_W, grad_b

整个算法本质上只有三步:一次外积、一次求和、一次转置矩阵–向量乘法再经激活导数门控。现代 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 / TanhXavier$\dfrac{2}{n_{\text{in}} + n_{\text{out}}}$
ReLUHe$\dfrac{2}{n_{\text{in}}}$
Leaky ReLU($\alpha$He(修正版)$\dfrac{2}{(1 + \alpha^{2})\, n_{\text{in}}}$

上文梯度图中的绿色曲线(ReLU + He)正是该理论的最佳验证:无论网络多深,梯度规模始终接近 1。


损失曲面的特性#

非凸损失曲面与 SGD 轨迹

即使是很小的网络,其损失曲面也高度非凸:包含两个深谷、一个鞍点和一条窄脊。图中展示了 SGD 从糟糕初始点出发的轨迹。有两个关键事实值得注意:

  1. 大多数局部极小值已足够好: 随着网络变宽,经验损失的极小值往往位于深度相近的平坦区域(Choromanska et al., 2015)。认为必须找到全局最优的想法源自凸优化,在深度学习中并不适用。
  2. 高维空间中鞍点远多于局部极小值。$\mathbb{R}^d$ 中,随机临界点处 Hessian 所有 $d$ 个特征值同号的概率呈指数级下降。SGD 的噪声反而有助于逃离这些鞍点(Dauphin et al., 2014)。

这两点解释了为何简单的一阶优化方法在缺乏凸性保证的情况下,仍主导着深度学习实践。


PyTorch 中 loss.backward() 到底做了什么#

PyTorch 的 autograd 并非魔法,而是我们上述链式法则的直接实现,仅叠加了两层工程优化。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import torch, torch.nn as nn

x = torch.randn(32, 784, requires_grad=False)
y = torch.randint(0, 10, (32,))

net = nn.Sequential(
    nn.Linear(784, 128), nn.ReLU(),
    nn.Linear(128, 10),
)
loss_fn = nn.CrossEntropyLoss()

logits = net(x)            # 前向传播:构建计算图
loss = loss_fn(logits, y)
loss.backward()            # 反向传播:应用链式法则,将梯度填充到每个 Parameter 的 .grad

for p in net.parameters():
    print(p.shape, p.grad.norm().item())

调用 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 篇

  1. 01 机器学习数学推导(一):绪论与数学基础
  2. 02 机器学习数学推导(二):线性代数与矩阵论
  3. 03 机器学习数学推导(三):概率论与统计推断
  4. 04 机器学习数学推导(四):凸优化理论
  5. 05 机器学习数学推导(五):线性回归
  6. 06 机器学习数学推导(六):逻辑回归与分类
  7. 07 机器学习数学推导(七):决策树
  8. 08 机器学习数学推导(八):支持向量机
  9. 09 机器学习数学推导(九):朴素贝叶斯
  10. 10 机器学习数学推导(十):半朴素贝叶斯与贝叶斯网络
  11. 11 机器学习数学推导(十一):集成学习
  12. 12 机器学习数学推导(十二):XGBoost 与 LightGBM
  13. 13 机器学习数学推导(十三):EM 算法与 GMM
  14. 14 机器学习数学推导(十四):变分推断与变分 EM
  15. 15 机器学习数学推导(十五):隐马尔可夫模型
  16. 16 机器学习数学推导(十六):条件随机场
  17. 17 机器学习数学推导(十七):降维与主成分分析
  18. 18 机器学习数学推导(十八):聚类算法
  19. 19 机器学习数学推导(十九):神经网络与反向传播 当前
  20. 20 机器学习数学推导(二十):正则化与模型选择

读有所得?

GitHub 关注我 → 新文周更

GitHub