1 上节内容回顾:分类器、损失函数与训练目标

1.1 图像分类的基本形式

图像分类(Image Classification)是计算机视觉中的核心任务:给定一张图像,从预先定义好的标签集合中选择一个类别,例如 dog、cat、truck、plane 等。这个任务表面上只是输出一个类别,但实际困难来自图像中的多种变化:光照、视角、形变、遮挡、背景杂乱以及同类内部差异。

早期的简单方法可以用最近邻分类器(k-Nearest Neighbor, kNN)理解:把测试图像与训练图像比较,选择距离最近的样本或最近的若干样本投票。kNN 的优点是训练阶段几乎没有计算,但测试慢、距离度量很脆弱,也难以真正学习视觉语义。

1.2 线性分类器与分数函数

本讲的优化和正则化围绕线性分类器展开。对一张输入图像 \(x\),线性分类器输出各类别分数:

\[ f(x, W) = Wx + b \]

其中 \(W\) 是权重矩阵,\(b\) 是偏置项。每个类别对应一组权重,分数越高表示模型越倾向于把图像判为该类别。训练的目标不是手工指定 \(W\),而是通过数据自动找到一组能让训练样本分类正确、并且能泛化到测试数据的参数。

1.3 损失函数与总体训练目标

给定训练集:

\[ \{(x_i, y_i)\}_{i=1}^{N} \]

其中 \(x_i\) 是第 \(i\) 个样本,\(y_i\) 是它的真实类别标签。损失函数(Loss Function)衡量当前模型在一个样本上的错误程度,数据集上的平均损失写作:

\[ L_{\text{data}}(W)=\frac{1}{N}\sum_{i=1}^{N}L_i(f(x_i,W),y_i) \]

常见分类损失包括多类 SVM 损失和 Softmax 交叉熵损失。它们的共同目的都是让正确类别的分数相对错误类别更高。到这里,学习问题就变成了一个优化问题:如何找到让损失尽可能小的参数 \(W\)

2 正则化(Regularization)

2.1 为什么需要正则化

如果只最小化训练集上的数据损失,模型可能会过度贴合训练数据中的偶然噪声。一个简单的一维拟合例子可以说明这一点:如果数据点来自某个大致平滑的趋势,复杂模型可能穿过每个训练点,却在测试点上表现很差;较简单的模型虽然训练误差不一定最低,但更可能捕捉真实规律。

正则化(Regularization)的核心思想是:在要求模型拟合训练数据的同时,对模型复杂度或参数形态施加偏好,从而提高泛化能力。完整目标通常写成:

\[ L(W)=L_{\text{data}}(W)+\lambda R(W) \]

其中 \(R(W)\) 是正则化项,\(\lambda\) 是正则化强度(regularization strength)。\(\lambda\) 越大,模型越倾向于满足正则化偏好;\(\lambda\) 越小,训练目标越接近纯数据损失。

2.2 Occam’s Razor 与简单模型偏好

正则化背后的直觉可以用奥卡姆剃刀(Occam’s Razor)概括:当多个假设都能解释训练数据时,优先选择更简单的假设。在机器学习中,“简单”不一定指模型参数少,也可以指权重更小、更平滑、更稀疏,或训练过程更不容易记住噪声。

考试重点:正则化并不是让训练集表现更好,而是有意阻止模型在训练集上“好得过头”,用一点训练误差换取更好的测试泛化。

2.3 常见正则化形式

常见的参数正则化包括:

正则化 形式 主要偏好
L2 正则化 \(R(W)=\sum_k W_k^2\) 惩罚大权重,让权重更平滑、更分散
L1 正则化 \(R(W)=\sum_k |W_k|\) 鼓励稀疏权重,使更多参数接近或等于 0
Elastic Net \(R(W)=\alpha\sum_k |W_k|+\beta\sum_k W_k^2\) 同时结合稀疏性和小权重偏好

L2 正则化喜欢把影响分散到多个维度上。例如两个权重向量如果都能产生相似分类效果,L2 更偏好多个较小权重共同发挥作用,而不是少数维度权重特别大。L1 正则化则更偏好稀疏解,因为绝对值惩罚会把一些参数推到 0。

除了这些显式参数惩罚,深度学习中还有更复杂的正则化方法,例如 Dropout、Batch Normalization、Stochastic Depth、Fractional Pooling 等。它们不一定都表现为简单的 \(R(W)\),但都在某种意义上限制模型过拟合或改善训练行为。

2.4 正则化的三个作用

正则化至少有三层意义:

  1. 表达对权重的偏好:例如偏好小权重、稀疏权重或更平滑的函数。
  2. 提升测试集泛化:通过限制模型记忆训练噪声,让模型学习更稳定的规律。
  3. 改善优化曲面:某些正则项会给目标函数增加曲率,使优化问题更稳定。

这里要注意,正则化强度 \(\lambda\) 是超参数,需要通过验证集调节。训练损失最低的 \(\lambda\) 不一定最好,验证集表现才是选择超参数的依据。

3 优化问题:从随机搜索到梯度下降

3.1 训练分类器就是最小化损失

在有了分数函数、损失函数和正则化项之后,训练问题可以写成:

\[ W^\ast=\arg\min_W L(W) \]

也就是说,参数 \(W\) 是优化变量,损失 \(L(W)\) 是目标函数。对线性分类器而言,\(W\) 可能已经有成千上万个参数;对深度神经网络而言,参数数量可以达到百万、十亿甚至更多。因此,优化算法必须能在高维空间中高效寻找低损失区域。

3.2 随机搜索为什么很差

最直观但很糟糕的办法是随机搜索:随机采样许多组 \(W\),计算它们在训练集或验证集上的表现,选最好的一个。这个方法偶尔能比随机猜测稍好,例如在 CIFAR-10 上可能得到十几个百分点的准确率,但远远达不到现代模型水平。

随机搜索的问题在于高维空间巨大。参数维度越高,随机命中好区域的概率越低。优化不能只靠“试运气”,而应该利用损失函数本身提供的信息。

3.3 顺着斜率下降

更合理的策略是观察损失函数在当前位置的斜率。对一维函数,导数告诉我们函数在当前位置向右增加还是减少;对多维函数,梯度(Gradient)是所有偏导数组成的向量:

\[ \nabla_W L(W)=\left[\frac{\partial L}{\partial W_1},\frac{\partial L}{\partial W_2},\ldots,\frac{\partial L}{\partial W_d}\right] \]

梯度方向是函数上升最快的方向,因此负梯度方向 \(-\nabla_W L(W)\) 是局部下降最快的方向。梯度下降的基本思想就是:反复计算当前位置的梯度,然后沿负梯度方向小步更新参数。

4 数值梯度、解析梯度与梯度检查

4.1 数值梯度

数值梯度(Numerical Gradient)用有限差分近似偏导。对某个参数维度 \(W_j\),可以计算:

\[ \frac{\partial L}{\partial W_j}\approx \frac{L(W+h e_j)-L(W)}{h} \]

其中 \(e_j\) 表示只在第 \(j\) 个维度为 1 的单位向量,\(h\) 是很小的扰动。例如某一维参数增加 \(0.0001\) 后,损失从 \(1.25347\) 变为 \(1.25322\),则该维梯度近似为:

\[ \frac{1.25322-1.25347}{0.0001}=-2.5 \]

数值梯度的优点是容易实现、直观,不需要手工推导复杂公式。缺点也很明显:慢,并且只是近似值。如果有上百万个参数,每次计算完整梯度都要对每个维度单独扰动并重新计算损失,代价不可接受。

4.2 解析梯度

解析梯度(Analytic Gradient)通过微积分直接推导 \(\nabla_W L(W)\) 的公式。它速度快、结果精确,实际训练中必须使用解析梯度。深度学习框架中的自动微分,本质上就是在计算图上自动应用链式法则得到解析梯度。

解析梯度的风险是实现容易出错,尤其是手写反向传播或自定义损失函数时。一处符号、维度或广播错误,就可能让训练表现异常。

4.3 梯度检查

实践中的标准做法是:训练时使用解析梯度,但用数值梯度检查解析梯度实现是否正确。这叫梯度检查(Gradient Check)。

方法 优点 缺点 用途
数值梯度 容易写,直观 慢,只是近似 调试梯度实现
解析梯度 快,精确 推导或实现可能出错 实际训练

梯度检查通常只在小模型、小 batch 或少量参数上做,因为它太慢。通过检查后,就可以相信解析梯度并进入正式训练。

5 梯度下降与随机梯度下降(SGD)

5.1 梯度下降更新式

标准梯度下降(Gradient Descent)的参数更新为:

\[ W_{t+1}=W_t-\eta \nabla_W L(W_t) \]

其中 \(\eta\) 是学习率(Learning Rate)。学习率控制每一步走多远:太小会训练很慢,太大可能越过低损失区域,甚至让损失爆炸。

从几何上看,每一步都沿当前点的负梯度方向移动。由于梯度只是局部信息,梯度下降不保证一步到达全局最优,而是通过许多小步逐渐降低损失。

5.2 全量梯度下降的代价

完整数据损失为:

\[ L(W)=\frac{1}{N}\sum_{i=1}^{N}L_i(W)+\lambda R(W) \]

如果每次更新都计算所有 \(N\) 个样本上的梯度,当训练集很大时会非常昂贵。深度学习训练集通常包含数万、数百万甚至更多样本,全量梯度下降每一步都太慢。

5.3 随机梯度下降与 minibatch

随机梯度下降(Stochastic Gradient Descent, SGD)用一个小批量(minibatch)样本近似全数据梯度:

\[ \nabla_W L(W)\approx \frac{1}{B}\sum_{i\in \mathcal{B}}\nabla_W L_i(W)+\lambda \nabla_W R(W) \]

其中 \(\mathcal{B}\) 是大小为 \(B\) 的 minibatch。常见 batch size 例如 32、64、128。SGD 每次更新便宜很多,因此可以频繁更新参数。

SGD 的关键权衡是:minibatch 梯度是有噪声的估计,不一定等于全量梯度;但只要估计方向总体上有用,许多便宜的小步通常比少数昂贵的大步更适合深度学习。

6 SGD 的困难:病态曲率、局部极小值、鞍点与噪声

6.1 问题一:不同方向曲率差异很大

如果损失函数在一个方向变化很快,在另一个方向变化很慢,SGD 会出现典型的低效行为:在陡峭方向来回震荡,在平坦方向前进缓慢。这种现象常出现在狭长山谷形的损失曲面中。

课件用条件数(Condition Number)描述这种困难。粗略来说,Hessian 矩阵最大和最小奇异值之比很大时,损失曲面在不同方向的曲率差异很大,优化会变得困难。

6.2 问题二:局部极小值与鞍点

在非凸优化中,损失函数可能存在局部极小值(Local Minimum)和鞍点(Saddle Point)。如果梯度接近 0,普通梯度下降可能停滞。

在高维深度学习问题中,鞍点通常比局部极小值更常见。鞍点在某些方向像极小值,在另一些方向像极大值;如果算法只看当前位置梯度,可能因为梯度很小而难以离开。

6.3 问题三:minibatch 梯度噪声

SGD 的梯度来自 minibatch,因此不同 batch 给出的梯度会有随机波动。噪声有时有好处,例如可以帮助模型逃离某些平坦停滞区域;但噪声也会让优化轨迹抖动,导致收敛不稳定。

因此,现代优化器通常会引入动量、自适应学习率或学习率计划,来缓解曲率差异、鞍点停滞和梯度噪声。

7 动量方法与自适应优化器

7.1 SGD + Momentum

动量(Momentum)的思想是维护一个速度向量,把过去的梯度方向累积起来。常见写法为:

\[ v_{t+1}=\rho v_t-\eta \nabla_W L(W_t) \]

\[ W_{t+1}=W_t+v_{t+1} \]

其中 \(\rho\) 是动量系数,常用 \(0.9\)\(0.99\)\(\rho\) 可以理解为“摩擦”或“记忆”参数:值越大,过去方向保留得越久。

动量的作用包括:

  1. 在长期一致的方向上加速,例如狭长山谷中的平坦方向。
  2. 在来回震荡的方向上相互抵消,例如陡峭方向。
  3. 在梯度噪声较大时,让更新方向更平滑。

因此,SGD + Momentum 往往比普通 SGD 更快、更稳定。

7.2 RMSProp

RMSProp 是一种自适应学习率方法。它为每个参数维度维护历史平方梯度的指数滑动平均:

\[ s_{t+1}=\beta s_t+(1-\beta)g_t^2 \]

\[ W_{t+1}=W_t-\eta \frac{g_t}{\sqrt{s_{t+1}}+\epsilon} \]

其中 \(g_t=\nabla_W L(W_t)\),平方和除法都是逐元素进行。直觉上,如果某个维度历史梯度一直很大,说明这个方向可能很陡,RMSProp 会缩小该方向步长;如果某个维度历史梯度较小,说明方向较平,RMSProp 会相对放大该方向更新。

核心结论:RMSProp 会抑制陡峭方向的更新,加速平坦方向的进展,因此能缓解不同方向曲率差异的问题。

7.3 Adam

Adam 可以理解为把 Momentum 和 RMSProp 结合起来。它同时维护一阶矩估计和二阶矩估计:

\[ m_t=\beta_1 m_{t-1}+(1-\beta_1)g_t \]

\[ v_t=\beta_2 v_{t-1}+(1-\beta_2)g_t^2 \]

其中 \(m_t\) 类似动量,\(v_t\) 类似 RMSProp 的平方梯度统计。由于 \(m_0\)\(v_0\) 通常初始化为 0,训练初期估计会偏向 0,所以 Adam 使用偏差校正:

\[ \hat{m}_t=\frac{m_t}{1-\beta_1^t} \]

\[ \hat{v}_t=\frac{v_t}{1-\beta_2^t} \]

最终更新为:

\[ W_{t+1}=W_t-\eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon} \]

常用起点是 \(\beta_1=0.9\)\(\beta_2=0.999\),学习率 \(\eta=10^{-3}\)\(5\times 10^{-4}\)。Adam 是许多模型的强默认选择,常常即使使用常数学习率也能工作得不错。

8 AdamW、权重衰减与学习率计划

8.1 Adam 中的 L2 正则化和 AdamW 的区别

在普通 SGD 中,L2 正则化和权重衰减(Weight Decay)常常可以看成等价。但在 Adam 这类自适应优化器中,二者不再完全等价,因为 L2 正则项会先进入梯度,再参与一阶、二阶矩统计。

标准 Adam 如果把 L2 正则化写进损失:

\[ L(W)=L_{\text{data}}(W)+\lambda \|W\|_2^2 \]

那么梯度中的正则化部分会参与 \(m_t\)\(v_t\) 的计算。AdamW 的做法是把权重衰减从梯度矩估计中解耦,在 Adam 的自适应更新之后直接对权重施加衰减:

\[ W_{t+1}=W_t-\eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t}+\epsilon}-\eta\lambda W_t \]

重要区别:AdamW 的权重衰减项不参与 Adam 的动量和二阶矩统计,因此通常比在 Adam 损失中直接加 L2 更符合“缩小权重”的初衷。

8.2 为什么需要学习率计划

SGD、SGD + Momentum、RMSProp、Adam、AdamW 都依赖学习率。一个固定学习率可能在训练早期太小,导致进展慢;也可能在训练后期太大,导致模型无法稳定收敛。因此实践中常让学习率随训练时间变化。

常见学习率计划包括:

计划 形式或直觉 典型用途
Step decay 在若干固定 epoch 将学习率乘以某个因子,例如 \(0.1\) 传统 CNN/ResNet 训练常见
Cosine decay 学习率按余弦曲线平滑下降 现代视觉和语言模型常见
Linear decay 从初始值线性下降到较小值或 0 BERT 等训练中常见
Inverse square root 学习率按 \(1/\sqrt{t}\) 类似形式下降 Transformer 相关训练中常见

余弦衰减常写作:

\[ \eta_t=\frac{1}{2}\eta_0\left(1+\cos\left(\frac{t}{T}\pi\right)\right) \]

其中 \(\eta_0\) 是初始学习率,\(t\) 是当前训练步或 epoch,\(T\) 是总训练长度。

8.3 Linear Warmup

训练初期如果学习率过高,损失可能爆炸。线性预热(Linear Warmup)会在最开始一段迭代中把学习率从 0 逐渐增加到目标值:

\[ \eta_t=\eta_{\max}\frac{t}{T_{\text{warmup}}}, \quad 0\le t\le T_{\text{warmup}} \]

预热结束后再接余弦衰减、线性衰减或其他计划。经验规则之一是:如果 batch size 扩大 \(N\) 倍,初始学习率也可以按比例扩大 \(N\) 倍,但通常需要配合 warmup 保持稳定。

9 一阶优化与二阶优化

9.1 一阶优化

一阶优化(First-Order Optimization)只使用梯度信息。可以把损失函数在当前位置做线性近似:

\[ L(W+\Delta W)\approx L(W)+\nabla L(W)^T\Delta W \]

然后选择能降低这个近似目标的方向。梯度下降、SGD、Momentum、RMSProp、Adam 都属于一阶方法。它们的优点是每步成本相对可控,适合大规模深度学习。

9.2 二阶优化

二阶优化(Second-Order Optimization)不仅使用梯度,还使用 Hessian 矩阵 \(H\) 描述曲率。二阶 Taylor 展开为:

\[ L(W+\Delta W)\approx L(W)+\nabla L(W)^T\Delta W+\frac{1}{2}\Delta W^T H \Delta W \]

令这个二次近似的导数为 0,可以得到 Newton 更新:

\[ W_{t+1}=W_t-H^{-1}\nabla L(W_t) \]

二阶方法的直觉是:如果知道曲率,就可以更聪明地决定每个方向走多远。

9.3 为什么二阶方法难以直接用于深度学习

深度学习模型参数 \(N\) 往往是百万、千万、亿级。Hessian 矩阵有 \(O(N^2)\) 个元素,存储已经很困难;求逆还需要 \(O(N^3)\) 时间,直接使用 Newton 方法几乎不可行。

因此,深度学习实践中最常用的仍然是一阶方法。若能进行全 batch、确定性优化,可以考虑 L-BFGS 等近似二阶方法;但在 minibatch 随机训练中,二阶方法的优势不容易直接发挥。

9.4 实践建议

本讲给出的实践经验可以概括为:

  1. Adam 或 AdamW 是许多模型的好默认选择,调参成本相对低。
  2. SGD + Momentum 有时能超过 Adam,但通常需要更仔细地调学习率和学习率计划。
  3. 如果能承受 full batch 更新,可以考虑二阶或近似二阶方法。

10 从线性分类器走向神经网络

10.1 线性分类器的局限

线性分类器只能用线性决策边界分割数据。如果二维平面中的红点和蓝点呈环形或其他非线性结构,单条直线无法把它们分开。

解决思路是引入特征变换。例如把原始坐标 \((x,y)\) 变换为极坐标相关特征 \((r,\theta)\),原来不可线性分离的数据可能在新特征空间中变得线性可分。

10.2 神经网络作为可学习特征变换

神经网络可以看成把“特征变换”也变成可学习的部分。一个两层神经网络可以写成:

\[ f(x)=W_2 \sigma(W_1 x) \]

其中 \(W_1\) 把输入映射到隐藏表示,\(\sigma\) 是非线性激活函数,\(W_2\) 再把隐藏表示映射到类别分数。实际中通常还会在每层加偏置项。

这里的关键是非线性。如果没有 \(\sigma\),多个线性层叠加仍然等价于一个线性层:

\[ W_2(W_1x)=(W_2W_1)x \]

因此,神经网络之所以比线性分类器更强,是因为它通过非线性层学习复杂特征空间。

10.3 名称说明

“神经网络(Neural Network)”是一个很宽泛的术语。本讲下一步要讨论的两层网络,更准确地说是全连接网络(Fully Connected Network)或多层感知机(Multi-Layer Perceptron, MLP)。后续课程会进一步讨论反向传播,也就是如何为多层网络高效计算梯度。

11 附录补充:Nesterov、AdaGrad、L-BFGS 与 SVM/Softmax 易混点

11.1 Nesterov Momentum

普通 Momentum 在当前位置计算梯度,再结合速度更新。Nesterov Momentum 的思想是先沿当前速度“向前看”一步,在这个前瞻位置计算梯度,再决定实际更新方向。

直觉上,普通动量像是根据当前位置的坡度和已有速度继续滑行;Nesterov 则先估计“如果按惯性走过去会到哪里”,再在那个位置修正方向。这种前瞻机制有时能减少过冲。

11.2 AdaGrad 与 RMSProp 的关系

AdaGrad 也使用历史平方梯度为每个参数设置自适应学习率:

\[ s_t=s_{t-1}+g_t^2 \]

\[ W_{t+1}=W_t-\eta \frac{g_t}{\sqrt{s_t}+\epsilon} \]

它会抑制历史梯度大的方向、加速历史梯度小的方向。但由于 \(s_t\) 持续累加不衰减,长期训练后分母越来越大,步长会逐渐衰减到接近 0。RMSProp 可以看成“带泄漏的 AdaGrad”:它使用指数滑动平均,让很久以前的梯度影响逐渐变小。

11.3 L-BFGS

BFGS 是拟牛顿方法,会近似 Hessian 逆矩阵,避免直接求 Hessian 逆。L-BFGS(Limited-memory BFGS)进一步减少内存,不显式存储完整逆 Hessian。

L-BFGS 在 full batch、确定性目标上通常表现很好;但在 minibatch 随机训练中,由于目标函数和梯度本身有噪声,L-BFGS 往往效果不好。把二阶方法适配到大规模随机深度学习仍然是研究方向。

11.4 SVM 零损失解为什么不唯一

多类 SVM 损失关注正确类别分数是否比错误类别分数至少高出 margin。如果某个 \(W\) 已经让所有样本损失为 0,把 \(W\) 放大为 \(2W\) 后,正确类别与错误类别之间的分数差距也会放大,因此损失仍然可能为 0。

这说明没有正则化时,零训练损失解不唯一。正则化可以在多个同样训练损失很低的解之间做选择,例如 L2 正则化通常会偏好范数更小的 \(W\),而不是无意义地把权重越放越大。

12 复习重点与易混点

12.1 必须掌握的核心公式

主题 公式
总损失 \(L(W)=L_{\text{data}}(W)+\lambda R(W)\)
L2 正则化 \(R(W)=\sum_k W_k^2\)
L1 正则化 \(R(W)=\sum_k |W_k|\)
梯度下降 \(W_{t+1}=W_t-\eta\nabla_W L(W_t)\)
SGD minibatch 梯度 \(\nabla_W L(W)\approx \frac{1}{B}\sum_{i\in \mathcal{B}}\nabla_W L_i(W)+\lambda\nabla_W R(W)\)
Momentum \(v_{t+1}=\rho v_t-\eta g_t,\quad W_{t+1}=W_t+v_{t+1}\)
RMSProp \(s_{t+1}=\beta s_t+(1-\beta)g_t^2,\quad W_{t+1}=W_t-\eta\frac{g_t}{\sqrt{s_{t+1}}+\epsilon}\)
Adam \(m_t=\beta_1m_{t-1}+(1-\beta_1)g_t,\quad v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2\)
Newton 更新 \(W_{t+1}=W_t-H^{-1}\nabla L(W_t)\)

12.2 常见概念对比

概念 关键区别
数据损失 vs 正则化损失 数据损失要求拟合训练标签,正则化损失表达对模型复杂度或权重形态的偏好
训练误差 vs 泛化能力 训练误差低不代表测试表现好,过拟合时训练很好但测试变差
数值梯度 vs 解析梯度 数值梯度慢但易写,适合检查;解析梯度快且精确,适合训练
全量梯度下降 vs SGD 全量梯度每步准确但贵;SGD 每步便宜但有噪声
Momentum vs RMSProp Momentum 平滑并累积更新方向;RMSProp 为每个维度调整学习率
Adam vs AdamW Adam 结合动量和自适应学习率;AdamW 解耦权重衰减,更适合配合 Adam 类优化器
一阶优化 vs 二阶优化 一阶只用梯度,成本低;二阶使用 Hessian 曲率,信息多但成本高

12.3 考试和作业中容易出错的点

  1. 正则化强度是超参数,通常用验证集选择,而不是训练集。
  2. L2 正则化偏好小而分散的权重,L1 正则化更偏好稀疏权重。
  3. 负梯度方向是局部下降最快方向,梯度本身是上升最快方向。
  4. 数值梯度不能用于实际训练大模型,它主要用于 gradient check。
  5. SGD 的 minibatch 梯度有噪声,这既是效率来源,也是训练不稳定来源。
  6. 鞍点在高维非凸问题中非常常见,不能只用一维局部极小值的直觉理解深度学习优化。
  7. Adam 的偏差校正来自初始矩估计为 0,训练初期尤其重要。
  8. Adam 中直接加 L2 与 AdamW 的权重衰减不同,因为前者会影响自适应矩估计。
  9. 学习率计划和优化器同样重要,一个好优化器配错学习率也可能训练失败。
  10. 多层线性变换仍然是线性的,神经网络需要非线性激活才能表达复杂决策边界。