# 第 7 章　网络优化与正则化

> 来源：https://deeplearning.bnuai.com/chapters/07-optimization-regularization ｜ 作者：唐志清（北京师范大学） ｜ 更新：2026-11-01 ｜ 内容依据邱锡鹏《神经网络与深度学习》（https://nndl.ai/）及作者公开课件

## 学习目标

<div class="goals">

- 理解深度网络优化的主要难点：非凸、鞍点、平坦最小值、梯度消失 / 爆炸；
- 掌握小批量梯度下降，理解批量大小与学习率的关系；
- 掌握学习率调整（衰减、周期性调整、预热、自适应学习率）与梯度方向优化（动量、Nesterov），能写出 **Adam** 的完整更新公式；
- 掌握 Xavier / He 初始化的推导思路，理解**批量归一化**与**层归一化**的计算与区别；
- 了解网格搜索、随机搜索、贝叶斯优化等超参数优化方法；
- 掌握 ℓ1/ℓ2 正则、权重衰减、提前停止、**Dropout**、数据增强、标签平滑等正则化方法。

</div>

## 课件幻灯片

> 本章课件共 59 页，可在网页中逐页浏览：https://deeplearning.bnuai.com/chapters/07-optimization-regularization；PDF 下载：https://deeplearning.bnuai.com/pdf/nndl-ch07.pdf

## 讲义

深度学习有一对“矛与盾”：**优化**希望经验风险尽可能小，**正则化**希望降低模型复杂度以提高泛化能力。深度网络拟合能力极强，两者都很关键。[幻灯片 2](#slide-2)

### 7.1 网络优化的难点

神经网络的优化面临：结构差异大，没有通用的优化算法；超参数多；非凸优化问题，需要关注参数初始化与逃离局部最优；梯度消失（爆炸）问题。[幻灯片 4](#slide-4)

**高维空间的非凸优化**。低维空间中，我们担心陷入局部最小值；但在高维空间中，大部分梯度为 0 的**驻点**其实是**鞍点**——在某些维度上是最低点、在另一些维度上是最高点。假设网络有 10,000 维参数，一个驻点在每一维上都是局部最低点的概率为 $p^{10000}$，可能性非常小。[幻灯片 5](#slide-5) 此外：

- **平坦最小值**：一个平坦最小值的邻域内所有点的损失都比较接近，模型对参数扰动不敏感，通常泛化更好；尖锐最小值则相反；
- **局部最小解的等价性**：在大型网络中，大部分局部最小解是等价的，它们在测试集上的性能接近，且对应的训练损失都可能非常接近全局最小解。

可视化研究表明，残差连接能让损失曲面（**优化地形**）变得平滑得多。[幻灯片 6](#slide-6) 改善神经网络优化的思路有四类：更有效的优化算法（动态学习率、梯度估计修正）、更好的初始化与数据预处理、修改网络结构得到更好的优化地形（ReLU、残差连接、逐层归一化），以及更好的超参数优化方法。[幻灯片 7](#slide-7)

### 7.2 优化算法

**小批量梯度下降**。每次从训练集选取 $K$ 个样本 $\mathcal S_t$，计算梯度并更新：[幻灯片 10](#slide-10)

$$
\boldsymbol g_t=\frac1K\sum_{(\boldsymbol x,\boldsymbol y)\in\mathcal S_t}\frac{\partial\mathcal L(\boldsymbol y,f(\boldsymbol x;\theta))}{\partial\theta}\Big|_{\theta=\theta_{t-1}},\qquad
\theta_t\leftarrow\theta_{t-1}-\alpha\boldsymbol g_t .
$$

影响小批量梯度下降的关键因素有三个：**批量大小 $K$、学习率 $\alpha$、梯度估计**。

**批量大小的影响**。批量大小不影响随机梯度的期望，但会影响其方差：批量越大，梯度方差越小、引入的噪声越少、训练越稳定，可以设置较大的学习率；批量较小时需要较小的学习率，否则不收敛。经验上常用**线性缩放规则**：批量大小增加 $m$ 倍时，学习率也增加 $m$ 倍。按迭代次数看，批量越大下降越明显越平滑；按遍历数据集的回合（epoch）看，小批量反而下降更快。[幻灯片 11](#slide-11)

```mermaid
flowchart TB
  A["标准（小批量）梯度下降<br/>θ ← θ − α g"] --> B["调整学习率 α"]
  A --> C["修正梯度方向 g"]
  B --> B1["学习率衰减<br/>周期性学习率 / 预热"]
  B --> B2["自适应学习率<br/>AdaGrad · RMSprop · AdaDelta"]
  C --> C1["动量法 · Nesterov"]
  C --> C2["梯度截断"]
  B2 --> D["Adam ≈ 动量法 + RMSprop"]
  C1 --> D
```

**学习率衰减**（学习率退火）。学习率过大不收敛、过小收敛太慢。[幻灯片 13](#slide-13) 常用做法是开始时较大、之后逐渐减小：[幻灯片 15](#slide-15) [幻灯片 16](#slide-16)

- **分段常数衰减**（阶梯衰减）：每经过若干迭代把学习率乘以一个小于 1 的衰减系数；
- **逆时衰减**：$\alpha_t=\alpha_0\dfrac{1}{1+\beta t}$；**指数衰减**：$\alpha_t=\alpha_0\beta^t$；**自然指数衰减**：$\alpha_t=\alpha_0\exp(-\beta t)$；
- **余弦衰减**：$\alpha_t=\dfrac12\alpha_0\Big(1+\cos\big(\dfrac{t\pi}{T}\big)\Big)$，$T$ 为总迭代次数。

**周期性学习率**：让学习率在一个区间内周期性地增大和减小，例如**三角循环学习率**和**带热重启的随机梯度下降**（SGDR，每个周期内余弦衰减，周期结束时重置为初始值）。短期内增大学习率虽然损害收敛，但有助于逃离尖锐最小值和鞍点，找到更平坦的区域。[幻灯片 17](#slide-17) [幻灯片 18](#slide-18)

**学习率预热**（warmup）：训练初期参数随机、梯度往往较大，再配合较大的学习率会使训练不稳定。因此在最初几轮用较小的学习率逐渐升高到初始学习率，例如逐渐预热 $\alpha_t'=\frac{t}{T'}\alpha_0$，$1\le t\le T'$。在大批量训练中预热尤其重要（如“1 小时训练 ImageNet”）。另一个有趣的观察是：增大批量大小与衰减学习率有类似的效果。[幻灯片 19](#slide-19)

**自适应学习率**：为每个参数设置不同的学习率。[幻灯片 20](#slide-20)

- **AdaGrad**：累计每个参数梯度的平方 $G_t=\sum_{\tau=1}^{t}\boldsymbol g_\tau\odot\boldsymbol g_\tau$，更新 $\Delta\theta_t=-\dfrac{\alpha}{\sqrt{G_t+\epsilon}}\odot\boldsymbol g_t$。梯度大的参数学习率小、梯度小的参数学习率大；缺点是学习率单调下降，后期可能过早停滞。
- **RMSprop**：用指数衰减移动平均代替累加 $G_t=\beta G_{t-1}+(1-\beta)\boldsymbol g_t\odot\boldsymbol g_t$（$\beta$ 一般取 0.9），更新同 AdaGrad。学习率不再单调衰减。
- **AdaDelta**：在 RMSprop 基础上把初始学习率 $\alpha$ 换成参数更新量平方的移动平均 $\Delta X^2_{t-1}=\beta_1\Delta X^2_{t-2}+(1-\beta_1)\Delta\theta_{t-1}\odot\Delta\theta_{t-1}$，更新 $\Delta\theta_t=-\dfrac{\sqrt{\Delta X^2_{t-1}+\epsilon}}{\sqrt{G_t+\epsilon}}\odot\boldsymbol g_t$，在一定程度上平抑了学习率的波动。

**梯度方向优化**。

- **动量法**：用之前积累的“动量”代替真正的梯度，每次迭代的梯度可以看作加速度：$\Delta\theta_t=\rho\Delta\theta_{t-1}-\alpha\boldsymbol g_t=-\alpha\sum_{\tau=1}^{t}\rho^{t-\tau}\boldsymbol g_\tau$，动量因子 $\rho$ 通常取 0.9。当某参数在最近一段时间内的梯度方向一致时，更新幅度变大，起加速作用；方向不一致时更新幅度变小，起减速作用——这能有效抑制在“峡谷”两壁之间的来回震荡。[幻灯片 21](#slide-21)
- **Nesterov 加速梯度**：先按动量“往前走一步”，在那里计算梯度：$\Delta\theta_t=\rho\Delta\theta_{t-1}-\alpha\,\boldsymbol g_t\big(\theta_{t-1}+\rho\Delta\theta_{t-1}\big)$，相当于提前看到下一步的梯度，修正更合理。[幻灯片 22](#slide-22)

**Adam 算法 ≈ 动量法 + RMSprop**：既用梯度的一阶矩（动量）作为更新方向，又用二阶矩自适应地调整学习率。[幻灯片 23](#slide-23)

$$
\begin{aligned}
M_t&=\beta_1M_{t-1}+(1-\beta_1)\boldsymbol g_t, & G_t&=\beta_2G_{t-1}+(1-\beta_2)\boldsymbol g_t\odot\boldsymbol g_t,\\
\hat M_t&=\frac{M_t}{1-\beta_1^t}, & \hat G_t&=\frac{G_t}{1-\beta_2^t},\\
\Delta\theta_t&=-\frac{\alpha}{\sqrt{\hat G_t+\epsilon}}\hat M_t .
\end{aligned}
$$

通常 $\beta_1=0.9$，$\beta_2=0.999$（教材取 0.99），$\alpha=0.001$。由于 $M_0=G_0=0$，迭代初期 $M_t,G_t$ 偏向 0，需要**偏差修正**。在鞍点附近，自适应算法能更快地找到正确的方向，而标准 SGD 往往很慢。[幻灯片 24](#slide-24)

**梯度截断**：把梯度的模限定在一个区间内，防止梯度爆炸导致参数剧烈变化，在循环网络中尤为常用。[幻灯片 25](#slide-25)

$$
\text{按值截断：}\ \boldsymbol g_t=\max\big(\min(\boldsymbol g_t,b),a\big);\qquad
\text{按模截断：}\ \boldsymbol g_t=\frac{b}{\|\boldsymbol g_t\|}\boldsymbol g_t\ \ (\text{当}\ \|\boldsymbol g_t\|>b).
$$

**小结**。大部分优化算法都可以用下面的公式统一描述：[幻灯片 26](#slide-26)

$$
\Delta\theta_t=-\frac{\alpha_t}{\sqrt{G_t+\epsilon}}M_t,\qquad G_t=\psi(\boldsymbol g_1,\cdots,\boldsymbol g_t),\quad M_t=\phi(\boldsymbol g_1,\cdots,\boldsymbol g_t),
$$

其中 $\psi(\cdot)$ 为学习率缩放函数（取 1 或历史梯度平方的移动平均），$\phi(\cdot)$ 为参数更新方向（取当前梯度或历史梯度的移动平均）。

下面的演示在三种二维损失曲面上比较各优化器（可调学习率、点击设置起点）：

> （此处为交互演示，请在网页中使用：https://deeplearning.bnuai.com/chapters/07-optimization-regularization）

### 7.3 参数初始化

**参数不能全初始化为 0**：否则第一遍前向计算时所有隐藏神经元的激活值相同，反向传播时它们的权重更新也相同，导致神经元之间没有区分性，这称为**对称权重问题**。偏置通常可以用 0 初始化。初始化方法分为预训练初始化、随机初始化和固定值初始化三类。[幻灯片 28](#slide-28)

**随机初始化**：从固定均值（如 0）和固定方差（如 0.01）的**高斯分布**中采样，或在区间 $[-r,r]$ 内按**均匀分布**采样（其方差为 $r^2/3$）。[幻灯片 29](#slide-29) 但方差设置得太小会导致神经元输出过小、信号逐层衰减；太大则 Sigmoid 型激活函数容易饱和、ReLU 网络的输出可能爆炸。

**基于方差缩放的初始化**。为避免梯度消失或爆炸，我们希望每层输出和误差项的方差保持不变（**范数保持性**）。[幻灯片 30](#slide-30) 设第 $l$ 层神经元 $a^{(l)}=f\big(\sum_{i=1}^{M_{l-1}}w_i^{(l)}a_i^{(l-1)}\big)$，$f$ 为恒等函数，权重与输入独立且均值为 0，则

$$
\mathrm{var}\big(a^{(l)}\big)=M_{l-1}\,\mathrm{var}\big(w_i^{(l)}\big)\,\mathrm{var}\big(a_i^{(l-1)}\big).
$$

要使前向时方差不变，需 $\mathrm{var}(w)=1/M_{l-1}$；同理反向传播时需 $\mathrm{var}(w)=1/M_l$。折中取 $\mathrm{var}(w)=\dfrac{2}{M_{l-1}+M_l}$，这就是 **Xavier 初始化**。对 ReLU，由于一半神经元输出为 0，方差需要加倍，得到 **He 初始化** $\mathrm{var}(w)=2/M_{l-1}$。[幻灯片 31](#slide-31)

| 初始化方法 | 激活函数 | 均匀分布 $[-r,r]$ | 高斯分布 $\mathcal N(0,\sigma^2)$ |
| --- | --- | --- | --- |
| Xavier | Logistic | $r=4\sqrt{\dfrac{6}{M_{l-1}+M_l}}$ | $\sigma^2=16\times\dfrac{2}{M_{l-1}+M_l}$ |
| Xavier | Tanh | $r=\sqrt{\dfrac{6}{M_{l-1}+M_l}}$ | $\sigma^2=\dfrac{2}{M_{l-1}+M_l}$ |
| He | ReLU | $r=\sqrt{\dfrac{6}{M_{l-1}}}$ | $\sigma^2=\dfrac{2}{M_{l-1}}$ |

**正交初始化**：方差缩放只保证了每个神经元的方差，对整个误差项向量，我们希望 $\|\boldsymbol\delta^{(l-1)}\|^2=\|(\boldsymbol W^{(l)})^\top\boldsymbol\delta^{(l)}\|^2=\|\boldsymbol\delta^{(l)}\|^2$，即 $\boldsymbol W^{(l)}$ 为正交矩阵。做法是：先用均值为 0、方差为 1 的高斯分布初始化一个矩阵，再对其做奇异值分解，取其中一个正交矩阵作为权重。正交初始化常用于循环网络。

### 7.4 数据预处理

不同特征的尺度差异很大时，损失曲面会呈狭长的椭圆形，梯度下降需要很多次迭代才能收敛；归一化后曲面更接近圆形，收敛更快。[幻灯片 32](#slide-32) 常用方法：

- **最小最大值归一化**：$\hat x^{(n)}=\dfrac{x^{(n)}-\min_n x^{(n)}}{\max_n x^{(n)}-\min_n x^{(n)}}$；
- **标准化**（Z 值归一化）：$\hat x^{(n)}=\dfrac{x^{(n)}-\mu}{\sigma}$，使每一维特征均值为 0、方差为 1；
- **白化**：用 PCA 去除特征之间的相关性，并使各维方差相同。

### 7.5 逐层归一化

逐层归一化把数据归一化的思想用到神经网络的中间层，其好处是：**更好的尺度不变性**（缓解**内部协变量偏移**——前一层参数变化导致后一层输入分布不断变化）以及**更平滑的优化地形**。[幻灯片 34](#slide-34)

**批量归一化**（Batch Normalization, BN）对每一层的净输入 $\boldsymbol z^{(l)}$ 的每一维，用当前小批量的统计量进行标准化：[幻灯片 35](#slide-35)

$$
\boldsymbol\mu_{\mathcal B}=\frac1K\sum_{k=1}^{K}\boldsymbol z^{(k,l)},\qquad
\boldsymbol\sigma_{\mathcal B}^2=\frac1K\sum_{k=1}^{K}\big(\boldsymbol z^{(k,l)}-\boldsymbol\mu_{\mathcal B}\big)\odot\big(\boldsymbol z^{(k,l)}-\boldsymbol\mu_{\mathcal B}\big),
$$

$$
\hat{\boldsymbol z}^{(l)}=\frac{\boldsymbol z^{(l)}-\boldsymbol\mu_{\mathcal B}}{\sqrt{\boldsymbol\sigma_{\mathcal B}^2+\epsilon}}\odot\boldsymbol\gamma+\boldsymbol\beta\triangleq\mathrm{BN}_{\boldsymbol\gamma,\boldsymbol\beta}\big(\boldsymbol z^{(l)}\big).
$$

标准化会把取值集中到 0 附近，对 Sigmoid 型函数而言接近线性区间，削弱了非线性；因此引入可学习的**缩放参数** $\boldsymbol\gamma$ 和**平移参数** $\boldsymbol\beta$，必要时可以还原原来的分布。BN 通常放在仿射变换之后、激活函数之前：$\boldsymbol a^{(l)}=f\big(\mathrm{BN}_{\boldsymbol\gamma,\boldsymbol\beta}(\boldsymbol W\boldsymbol a^{(l-1)})\big)$，此时偏置可以省略（被 $\boldsymbol\beta$ 吸收）。注意 $\boldsymbol\mu_{\mathcal B}$、$\boldsymbol\sigma_{\mathcal B}$ 是 $\boldsymbol z$ 的函数，反向传播时要计算它们的梯度；训练完成后用整个数据集上的均值和方差（实践中用训练时的移动平均）代替。BN 还带来一定的正则化效果，因为每个样本的输出依赖于同一批次中的其他样本。

**层归一化**（Layer Normalization, LN）则对**一个样本**中某一层**所有神经元**进行归一化：[幻灯片 36](#slide-36)

$$
\mu^{(l)}=\frac{1}{M_l}\sum_{i=1}^{M_l}z_i^{(l)},\qquad
\sigma^{(l)2}=\frac{1}{M_l}\sum_{i=1}^{M_l}\big(z_i^{(l)}-\mu^{(l)}\big)^2,\qquad
\mathrm{LN}_{\boldsymbol\gamma,\boldsymbol\beta}\big(\boldsymbol z^{(l)}\big)=\frac{\boldsymbol z^{(l)}-\mu^{(l)}}{\sqrt{\sigma^{(l)2}+\epsilon}}\odot\boldsymbol\gamma+\boldsymbol\beta .
$$

层归一化不依赖批量大小，训练与测试的计算方式一致，适合循环网络：$\boldsymbol z_t=\boldsymbol U\boldsymbol h_{t-1}+\boldsymbol W\boldsymbol x_t$，$\boldsymbol h_t=f\big(\mathrm{LN}_{\boldsymbol\gamma,\boldsymbol\beta}(\boldsymbol z_t)\big)$；它也是 Transformer 的标准组件。

**BN 与 LN 的对比**：把一个小批量的净输入看作 $K\times M$ 的矩阵（$K$ 个样本、$M$ 个神经元），BN 按**列**（同一神经元、不同样本）归一化，LN 按**行**（同一样本、不同神经元）归一化。[幻灯片 37](#slide-37) 此外还有**权重归一化**（对权重做再参数化 $\boldsymbol w=g\frac{\boldsymbol v}{\|\boldsymbol v\|}$）、**局部响应归一化**（LRN，对邻近特征映射归一化，用于 AlexNet），以及用于卷积网络的实例归一化、组归一化等。[幻灯片 38](#slide-38)

### 7.6 超参数优化

神经网络的超参数包括：网络结构（层数、每层神经元个数、激活函数类型），优化参数（优化方法、学习率、小批量大小），正则化系数等。[幻灯片 40](#slide-40) 超参数优化的难点在于它是组合优化问题，无法用梯度下降，且评估一组超参数的代价很高。常用方法：

- **网格搜索**：对每个超参数取几个值，如学习率 $\alpha\in\{0.01,0.1,0.5,1.0\}$，尝试所有组合，在验证集上选最优。[幻灯片 41](#slide-41)
- **随机搜索**：不同超参数对性能的影响差异很大，网格搜索会在不重要的超参数上做许多无用尝试；随机采样组合通常更有效。[幻灯片 42](#slide-42)
- **贝叶斯优化**：用高斯过程等模型拟合“超参数 → 性能”的函数，根据已有的试验结果选择最有希望的下一组超参数（如最大化期望改进）。
- **动态资源分配**：尽早淘汰没有希望的配置，把资源分给更有可能带来收益的配置（如逐次减半）。
- **神经架构搜索**（NAS）：用一个控制器（如循环网络 + 强化学习）生成网络结构，以验证集性能为奖励进行学习。[幻灯片 43](#slide-43)

### 7.7 网络正则化

深度网络通常是**过度参数化**的，拟合能力强到可以记住随机标签；但实践中它们依然优先学习数据中的一般规律，表现出良好的泛化能力——如何解释这一点仍是开放问题（“重新思考泛化”）。[幻灯片 45](#slide-45) 正则化方法包括：ℓ1/ℓ2 约束、数据增强（增加优化约束）；权重衰减、随机梯度下降、提前停止、Dropout（干扰优化过程）。[幻灯片 46](#slide-46)

**ℓ1 和 ℓ2 正则化**：$\theta^*=\arg\min_\theta\frac1N\sum_{n=1}^N\mathcal L\big(y^{(n)},f(\boldsymbol x^{(n)};\theta)\big)+\lambda\,\ell_p(\theta)$。ℓ1 正则倾向于得到稀疏解，ℓ2 正则使参数整体变小。[幻灯片 47](#slide-47) 在 TensorFlow Playground 上可以直观看到不同隐藏层大小和正则化系数对决策边界的影响。[幻灯片 49](#slide-49) [幻灯片 50](#slide-50)

**提前停止**：用验证集监控每次迭代后的性能，验证集错误率不再下降时停止。[幻灯片 51](#slide-51)

**权重衰减**：每次更新时对参数乘以一个小于 1 的系数 $\theta_t\leftarrow(1-\beta)\theta_{t-1}-\alpha\boldsymbol g_t$，$\beta$ 一般取较小的值（如 0.0005）。在标准 SGD 中权重衰减等价于 ℓ2 正则，但在 Adam 等自适应算法中两者并不等价（这正是 AdamW 的出发点）。[幻灯片 52](#slide-52)

**丢弃法**（Dropout）：训练时随机丢弃一部分神经元。对一层输入 $\boldsymbol x$，引入掩码 $\boldsymbol m\in\{0,1\}^D$，每个元素以概率 $p$ 取 1（保留）：[幻灯片 53](#slide-53)

$$
\mathrm{mask}(\boldsymbol x)=\begin{cases}\boldsymbol m\odot\boldsymbol x & \text{训练阶段}\\ p\,\boldsymbol x & \text{测试阶段}\end{cases}
$$

测试时乘以 $p$ 是为了保证训练和测试时神经元输出的期望一致（实现中更常用的是“反向 Dropout”：训练时除以 $p$，测试时不变）。隐藏层一般取 $p=0.5$，输入层保留率更接近 1。Dropout 有两种解释：[幻灯片 54](#slide-54)

- **集成学习**：每次丢弃相当于从原网络采样一个子网络，$n$ 个神经元可以采样出 $2^n$ 个共享参数的子网络，最终网络可以看作它们的集成；
- **贝叶斯学习**：把参数 $\theta$ 看作随机变量，丢弃法相当于对参数的采样，$\mathbb E_{q(\theta)}[y]\approx\frac1M\sum_{m=1}^{M}f(\boldsymbol x;\theta_m)$。

**循环网络上的 Dropout**：不能直接对每个时刻的隐状态随机丢弃，否则会损害循环网络的记忆能力。根据贝叶斯解释，每次采样的参数应在所有时刻保持不变，因此对参数矩阵的元素随机丢弃并在所有时刻使用**相同的丢弃掩码**，称为**变分丢弃法**。[幻灯片 55](#slide-55)

**数据增强**：对图像进行旋转、翻转、缩放、平移、加噪声等变换，增加数据多样性；文本也可以用同义词替换、回译等方法增强。[幻灯片 56](#slide-56)

**标签平滑**：one-hot 硬目标 $\boldsymbol y=[0,\cdots,0,1,0,\cdots,0]^\top$ 会促使模型把正确类别的 logit 推向无穷大，导致过拟合与过度自信。假设样本以 $\epsilon$ 的概率属于其他类，得到**软目标**：[幻灯片 57](#slide-57)

$$
\tilde{\boldsymbol y}=\Big[\frac{\epsilon}{K-1},\cdots,\frac{\epsilon}{K-1},1-\epsilon,\frac{\epsilon}{K-1},\cdots,\frac{\epsilon}{K-1}\Big]^\top .
$$

### 7.8 实践建议

训练深度网络的一套“默认配置”：[幻灯片 58](#slide-58)

- **模型**：用 ReLU 作为激活函数；分类时用交叉熵损失；使用逐层归一化；
- **优化**：小批量 SGD，配合动态学习率，优先尝试 Adam；每个 epoch 重新随机打乱数据；
- **预处理与初始化**：数据标准化；He / Xavier 初始化；
- **正则化**：ℓ2 正则 / 权重衰减、Dropout、数据增强、提前停止。

## 本章小结

- 高维非凸优化的主要障碍是鞍点而非局部最小值；平坦最小值泛化更好。
- 优化算法 = 学习率调整（衰减、周期、预热、AdaGrad / RMSprop / AdaDelta）+ 梯度方向修正（动量、Nesterov、梯度截断），Adam 结合了两者。
- Xavier / He 初始化保持各层方差稳定；BN 按批量、LN 按样本对神经元归一化，平滑优化地形。
- 正则化：ℓ1/ℓ2、权重衰减、提前停止、Dropout（子网络集成 / 参数采样）、数据增强、标签平滑。

## 思考题与习题 {#exercises}

<div class="exercise-list">

1. **（分析）** 为什么小批量 SGD 中批量越大、学习率可以越大？用随机梯度的方差解释线性缩放规则。
2. **（推导）** 证明 Adam 中若不做偏差修正，第 1 步的更新量约为 $-\alpha\frac{(1-\beta_1)}{\sqrt{1-\beta_2}}\mathrm{sgn}(g_1)$，并说明偏差修正的必要性。
3. **（推导）** 推导 He 初始化：对 ReLU 网络，说明为什么 $\mathrm{var}(w)=2/M_{l-1}$ 能保持前向传播时激活值的二阶矩不变。
4. **（概念）** 批量归一化在测试阶段如何计算？为什么在批量很小或循环网络中通常改用层归一化？
5. **（分析）** 在 SGD 中权重衰减与 ℓ2 正则等价，在 Adam 中为什么不等价？
6. **（计算）** 某隐藏层有 4 个神经元，Dropout 保留率 $p=0.5$。训练时一共可能有多少种子网络结构？测试时为何要把输出乘以 $p$（或训练时除以 $p$）？
7. **（编程）** 在同一个 CIFAR-10 小模型上比较 SGD、SGD+Momentum、Adam、AdamW 的训练曲线；再分别加入 BN、Dropout、数据增强，记录验证集准确率的变化。

</div>

**部分提示**

- 第 2 题：$M_1=(1-\beta_1)g_1$，$G_1=(1-\beta_2)g_1^2$。取 $\beta_1=0.9,\beta_2=0.999$ 时，不修正的第 1 步步长约为 $3.16\alpha$，各步的有效步长随 $t$ 变化而失真；修正后第 1 步恰为 $-\alpha\,\mathrm{sgn}(g_1)$。
- 第 5 题：Adam 中 ℓ2 正则的梯度 $\lambda\theta$ 会被自适应学习率 $1/\sqrt{\hat G}$ 缩放，梯度大的参数受到的正则更弱。
- 第 6 题：$2^4=16$ 种。

## 延伸阅读

- 教材：邱锡鹏《神经网络与深度学习》第 7 章「网络优化与正则化」。
- Ruder S. An overview of gradient descent optimization algorithms, 2016；Kingma D P, Ba J. Adam, ICLR 2015；Ioffe S, Szegedy C. Batch normalization, ICML 2015；Srivastava N, et al. Dropout, JMLR 2014。
- 实践：[nndl-practice](https://github.com/nndl/nndl-practice) 第 7 章「网络优化与正则化」；本站 [梯度下降与优化器演示](https://deeplearning.bnuai.com/demos/optimizers)。
- 第二版对应章节：第 7 章「网络优化与正则化」。
