第 1 节 机器学习应用的基本设置
训练集、验证集与测试集
在训练一个机器学习模型时,数据集通常会被划分为三部分:训练集(train set)、验证集(dev/validation set)和测试集(test set):

训练集用于更新模型参数;测试集用于比较不同模型、不同超参数和不同训练策略;验证集只应该在最后使用,用来报告最终模型的泛化能力。
也就是说,训练集参与参数学习,测试集参与超参数选择,而验证集不参与任何训练决策。验证集不仅独立于参数更新过程,也独立于超参数调整过程,因此它更适合作为最终结果的客观报告。
典型流程是:
- 在训练集上训练多个模型;
- 在测试集上比较不同模型和超参数设置;
- 选定最终模型之后,再在验证集上做一次最终评估。
早期数据量较小时,常见划分可能是 60/20/20 或 70/30。但当数据集非常大时,验证集和测试集不一定需要占很大比例。关键不是比例固定,而是验证集和测试集要足够大,能稳定估计模型性能。
一个重要原则是:测试集和验证集应该来自同一个分布。否则我们在测试集上选择出的模型,不一定能在验证集上表现良好。
如果任务不需要严格报告最终泛化能力,也可以没有独立验证集;但这时最终结果会受到超参数选择过程的影响,结论要谨慎。
偏差与方差
偏差(bias)和方差(variance)是理解模型错误来源的基本框架。
- 高偏差:模型在训练集上表现也不好,说明模型没有学到训练数据中的规律,通常是欠拟合。
- 高方差:模型在训练集上表现很好,但在验证集或测试集上表现不好,说明模型过度适应训练集,泛化能力差,通常是过拟合。
假设真实数据由下面的过程生成:
其中 是真实规律, 是不可避免的噪声,并且满足:
模型在不同训练集 上训练,会得到不同的预测函数 。对于固定输入 ,我们关心期望测试误差:
代入 :
在中间加减模型预测的期望 ,可以分解为:
这就是经典的 bias-variance decomposition。
其中三项含义分别是:
- noise:数据本身的随机性,即使模型完美也无法消除;
- bias:模型平均预测与真实函数之间的差距,表示模型是否系统性地学偏了;
- variance:换一批训练集后模型预测会变化多少,表示模型对训练数据扰动有多敏感。
所谓 bias-variance tradeoff,就是说模型复杂度提高时,bias 往往下降,因为模型有能力拟合更复杂的真实函数;但 variance 往往上升,因为模型也更容易对训练集中的偶然噪声敏感。反过来,模型复杂度降低或正则化增强时,variance 会下降,但 bias 可能上升。
因此,过拟合不是简单地“模型太强”,而是 variance 太高;欠拟合也不是简单地“模型太弱”,而是 bias 太高。好的模型是在 bias 和 variance 之间取得平衡,使总泛化误差最小。
需要注意,这个分解最标准地成立在回归问题和平方损失下。对于分类问题和交叉熵损失,也可以使用类似思想理解偏差和方差,但数学形式不会这么简单。
基本调参策略
如果遇到高偏差,常见做法是:
- 使用更大的网络;
- 训练更久;
- 更换模型结构;
- 减小过强的正则化。
如果遇到高方差,常见做法是:
- 增加训练数据;
- 使用正则化;
- 使用数据增强;
- 减小模型规模;
- 使用 early stopping。
现代深度学习中,我们希望有一些方法可以降低方差,同时不要显著增加偏差;或者降低偏差,同时不要显著增加方差。正则化、归一化、初始化和优化器就是围绕这个目标展开的。
第 2 节 输入归一化与权重初始化
输入归一化
输入归一化通常分两步:先减去均值,再除以标准差。
给定训练集:
然后:
再计算方差:
并归一化:
注意:如果训练集使用了某个 和 ,测试集也必须使用同样的 和 ,不能重新用测试集统计量归一化。
如果不同特征尺度差异很大,损失函数的等高线会变得非常狭长。梯度下降会在陡峭方向和缓慢方向之间来回震荡,需要很小的学习率才能稳定训练。
归一化后,不同方向的尺度更接近,损失函数形状更接近圆形或球形,梯度下降可以使用更大的学习率,训练更快更稳定。
从后面的优化动力学看,归一化的作用是改善损失函数的条件数,使不同方向的曲率差异减小。

权重初始化
权重不能全部初始化为 0,否则同一层神经元会得到相同梯度,训练过程中始终保持对称,无法学到不同特征。
但随机初始化也不能太大或太小。太大会导致激活值和梯度爆炸,太小会导致信号和梯度逐层消失。
这是因为深层网络本质上包含大量矩阵连乘。暂时忽略激活函数和偏置, 层网络可以写成:
如果每一层的权重尺度都偏大,这个连乘会不断放大输入信号;如果每一层的权重尺度都偏小,这个连乘会不断压缩输入信号。反向传播中的梯度也有类似的矩阵连乘结构,因此同样会出现梯度爆炸或梯度消失。
常见初始化方法包括 Xavier 初始化和 He 初始化。
对于 tanh/sigmoid 类激活函数,常用 Xavier 初始化,使每层输入输出方差尽量保持稳定:
对于 ReLU 类激活函数,由于大约一半神经元会被置零,常用 He 初始化:
核心目标是:让信号在前向传播和反向传播中都不要快速放大或消失。
第 3 节 贝叶斯主义与正则化
贝叶斯后验
在频率主义视角下,我们常说存在一个真实分布,而训练数据是从这个真实分布中采样得到的。但从贝叶斯视角看,我们并不直接认为真实分布是完全确定且已知的,而是认为人类观察到数据 后,获得了对模型参数或分布的信念。
贝叶斯公式写作:
其中:
- 是后验分布,表示看到数据后我们对参数的信念;
- 是似然,表示参数为 时生成这批数据的概率;
- 是先验,表示看到数据之前我们对参数的偏好;
- 是证据或边缘似然,用于归一化:
贝叶斯视角的重要意义是:训练模型不只是拟合数据,也是在数据和先验之间做平衡。
KL 散度
有了后验分布之后,一个自然问题是:训练到底在优化什么?从分布视角看,我们真正希望的是,让模型给出的分布尽可能接近真实后验分布。
如果真实后验是 ,而我们用某个可计算的分布 去近似它
这里的 可以有很多具体形式。它的意思是:我们不直接处理复杂的真实后验,而是选一个比较容易计算和优化的分布族,用参数 控制这个分布族的形状。
例如,最常见的选择是高斯分布:
此时 ,训练的目标就是学习后验分布的均值和方差。
最极端的情况是点分布近似:
这表示我们不再保留参数的不确定性,只认为参数就是某一个最优点。深度学习中常见的普通训练方式,本质上就接近这种点估计。
因此, 的选择决定了我们如何近似真实后验:它可以很简单,也可以很复杂;可以保留不确定性,也可以退化为一个确定参数点。
用 KL 散度衡量二者差异,于是可以写出:
训练目标就是调整 ,使这个 KL 散度尽可能小。
将贝叶斯后验公式代入:
展开 KL 散度:
其中 与可训练参数无关,是常数。因此最小化 KL 散度,等价于最大化:
这就是 ELBO(Evidence Lower Bound,证据下界)。它由三部分组成:
- :似然项,希望参数能解释训练数据;
- :先验项,希望参数符合先验;
- :熵项,控制近似后验自身的形状和不确定性。
这说明,贝叶斯学习的目标不是单纯找一个最优参数点,而是寻找一个好的后验分布。
MLE、MAP 与正则化
如果我们只最大化似然,这意味着不对施加任何先验,并且不考虑的熵:
这就是 MLE(Maximum Likelihood Estimation,最大似然估计)。
上一章我们已经学过,所有损失函数都可以从 MLE 推出来。例如假设回归误差服从高斯分布,会得到 MSE;假设分类输出服从 softmax/Boltzmann 分布,会得到交叉熵。
如果我们进一步考虑先验 ,则目标变成:
这就是 MAP(Maximum A Posteriori,最大后验估计)。
从这个角度看,正则化项不是随便加的惩罚,而是参数先验的体现。
- 高斯先验与 L2 正则化
假设参数服从零均值高斯分布:
如果各参数相互独立,则:
取对数:
因此最大化后验等价于最小化:
这就是 L2 正则化。
直观上,高斯先验认为参数应该大多接近 0,但不强迫参数严格为 0。因此 L2 正则化倾向于让权重整体变小,使模型更平滑、更不容易过拟合。
- Laplace 先验与 L1 正则化
如果认为参数服从 Laplace 分布:
则:
于是得到 L1 正则化:
L1 正则化和 L2 正则化的重要区别是:L1 更容易把某些参数推到 0,因此会产生稀疏性。它可以用于特征选择或剪枝,但也可能增大偏差。
正则化的另一种形式:权重衰减
对于神经网络,L2 正则化通常写成:
其中 Frobenius 范数为:
因此梯度更新变为:
于是:
整理得到:
这说明 L2 正则化等价于权重在每一步更新时按比例缩小,所以也叫 weight decay。
为什么正则化能减轻过拟合
如果正则化强度 很大,权重矩阵会被压得很小。权重变小后,单个神经元对输出的影响减弱,模型难以记住训练集中的噪声,从而降低过拟合风险。
另一个角度是:当权重很小时,激活函数往往只在较小范围内工作,网络整体更接近线性模型。线性模型表达能力较弱,不容易拟合训练集中的复杂噪声,因此过拟合会减轻。但如果正则化过强,也会导致欠拟合。
从这个角度看,正则化和前面提到的权重初始化有一种不谋而合的意图:二者都在控制权重的尺度。权重初始化是在训练开始时选择一个合适的初始尺度,避免一开始就梯度爆炸或消失;weight decay 则是在训练过程中持续抑制权重无限变大,避免模型过度依赖某些参数并产生过拟合。
第 4 节 Dropout、数据增强与 Early Stopping
Dropout
Dropout 的做法是在训练时随机丢弃一部分神经元。对于某一层激活 ,生成一个同形状的随机 mask:
然后:
这里的 表示逐元素乘法(element-wise product),不是矩阵乘法。也就是说,mask 中的每个元素只和 中对应位置的激活值相乘:如果 mask 为 1,该神经元输出被保留;如果 mask 为 0,该神经元输出被置零。
例如某一层激活为:
随机生成的 mask 可能是:
逐元素相乘后得到:
可以看到,mask 中为 0 的位置,对应激活值被直接清零;mask 中为 1 的位置,对应激活值保留。
常用的是 inverted dropout。为了让激活值的期望在训练时保持不变,还要除以 keep-prob:
测试时不使用 dropout,因为测试时需要完整网络做稳定预测。
Dropout 迫使网络不能过度依赖某一个神经元或某一组特征。因为每次训练时都有一部分神经元随机失效,模型必须学习更加分散、更加鲁棒的表示。
从集成学习角度看,Dropout 近似于训练了许多共享参数的子网络,最后在测试时使用完整网络进行平均化预测。因此它能减轻过拟合。
数据增强
数据增强通过对训练样本做合理变换来扩大训练集。例如图像任务中可以使用旋转、平移、裁剪、颜色扰动等,例如:

从正则化视角看,数据增强是在注入一种先验:我们认为这些变换不应该改变标签。例如一张数字图片轻微平移后仍然应该是同一个数字。也就是说,数据增强表达了我们希望模型保持哪些不变性。
Early Stopping
Early stopping 的做法是在训练过程中持续观察验证集误差。当训练误差继续下降,但验证误差开始上升时,说明模型开始过拟合,此时停止训练。
它可以看作一种正则化,因为它限制了模型继续向训练集噪声拟合。但它也有缺点:它把“优化训练损失”和“防止过拟合”两个目标混在了一起。因此在需要更清晰控制时,L2、Dropout、数据增强通常更可解释。

第 5 节 Mini-batch、Momentum、RMSProp 与 Adam
Mini-batch Gradient Descent
全量梯度下降每次使用全部训练样本,梯度稳定但计算慢;随机梯度下降每次使用一个样本,更新快但噪声大。
Mini-batch 是折中:每次使用一小批样本计算梯度。它既能利用矩阵并行计算,又能引入适度噪声,帮助优化器跳出平坦区域或鞍点。
mini-batch size 本身也是超参数。太小噪声大,训练不稳定;太大接近 full batch,单步成本高,泛化有时也不一定更好。
Momentum
Momentum 的思想是引入梯度的指数加权平均:
指数加权平均示意图如下:

图中实线是用虚线的指数加权平均,可以看到,实线能够反映数据点的趋势。
然后用:
它相当于给优化过程加入惯性。在梯度方向一致的方向上,速度会累积;在来回震荡的方向上,正负梯度会抵消。因此 Momentum 能减少锯齿震荡,加速沿谷底方向前进。
RMSProp
RMSProp 记录梯度平方的指数加权平均:
然后更新:
它的作用是对不同参数方向做自适应缩放:梯度长期较大的方向步子变小,梯度长期较小的方向步子相对变大。这可以缓解不同方向尺度差异导致的震荡。
Adam
Adam 结合了 Momentum 和 RMSProp:
并做偏差修正:
最后更新:
Adam 通常是深度学习中非常稳健的默认选择。常见默认值是:
Learning Rate Decay
训练早期可以使用较大学习率快速接近较好区域;训练后期则需要较小学习率做精细收敛。因此常使用学习率衰减。
常见形式包括:
或指数衰减:
也可以使用 step decay、cosine decay 等。
第 6 节 Batch Normalization
对隐藏层激活归一化
输入归一化只处理第一层输入,但深层网络中,每一层的输入分布都会随着前面层参数变化而变化。Batch Normalization 的思想是:对隐藏层的中间值也进行归一化。
给定某层的 ,先计算 mini-batch 上的均值和方差:
然后归一化:
再引入两个可学习参数:
这里 和 不是超参数,而是模型参数。它们允许网络自己决定归一化后的均值和方差。
带 Batch Norm 的前向传播可以写作:
通常 Batch Norm 放在线性变换之后、激活函数之前。原因是我们希望归一化的是激活函数之前的连续信号 ,让它以更稳定的尺度进入非线性函数。如果放在 ReLU 之后,很多负值已经被截断成 0,这些 0 会大量参与均值和方差计算,使归一化统计量失真。
更重要的是,ReLU 输出中的 0 本身就是一种特征信号:它表示某些神经元没有被激活。如果再对这些包含大量 0 的激活值做 Batch Norm,归一化过程可能会重新移动和缩放这些值,反而干扰“哪些神经元应该关闭”这个稀疏激活模式。因此实践中更常见的做法是先做线性变换,再做 Batch Norm,再进入激活函数。
由于 Batch Norm 会减去均值,线性层中的 bias 在某些设置下会被抵消,因此使用 Batch Norm 时常常可以省略 bias。
为什么 Batch Norm 有效
Batch Norm 的一个直观解释是减少 covariate shift。当前面层参数变化时,后面层看到的输入分布也会变化,导致后面层需要不断适应新的分布。
Batch Norm 控制每层输入的均值和方差,使中间表示更稳定,从而加快训练。
此外,mini-batch 统计量本身带有噪声,不同 batch 的均值和方差会略有不同。这种噪声会产生轻微正则化效果,类似于让不同层不要过度依赖精确的输入分布。
测试时的 Batch Norm
训练时 Batch Norm 使用当前 mini-batch 的均值和方差;测试时通常只有单个样本或小 batch,不能稳定估计统计量。
因此训练过程中会维护均值和方差的指数滑动平均:
测试时使用这些 running statistics 做归一化。
第 7 节 超参数调优
哪些是超参数
常见超参数包括:
- 学习率 ;
- Momentum 参数 ;
- mini-batch size;
- 隐藏层数量和隐藏单元数;
- Adam 的 ;
- 正则化强度 ;
- dropout keep-prob;
- learning rate decay;
- Batch Norm 是否使用及其位置。
通常学习率最重要,其次是 batch size、正则化强度、网络规模、Momentum/Adam 参数等。
随机搜索优于网格搜索
随机搜索和网格搜索示意图如下:

如果两个超参数中只有一个真正重要,网格搜索会浪费大量计算资源在不重要方向上。例如横轴是学习率,纵轴是 ,但真正影响结果的是学习率,那么网格搜索的许多点本质上重复测试了相近学习率。
随机搜索能更均匀地探索每个超参数的取值范围,因此在高维超参数空间中通常更有效。
调参常用 coarse-to-fine 策略:先在较大范围内随机搜索,找到表现较好的区域后,再在该区域内做更细搜索。
这比一开始就在小范围内精细搜索更稳健,因为我们一开始并不知道好区域在哪里。
使用合适尺度采样
有些超参数应该在线性尺度采样,有些应该在对数尺度采样。
例如学习率可能在:
之间变化。如果在线性尺度均匀采样,大部分样本会落在 0.1 到 1 之间,低学习率区域探索不足。
因此应取:
例如 。
对于 Momentum 中的 ,常对 使用 log scale,因为 和 的差异非常大。
Appendix
优化动力学
前面的所有任务都在于确定了训练集和优化目标,但实际的优化不可能总有解析解,而是一个自动化方法,这就是优化问题,通常我们表述为:
直接的思路是求梯度:
但是并不是所有问题都可以有解析解。
海森矩阵
你能在任何位置进行泰勒展开:
一阶项梯度代表该点的变化剧烈程度,这里称为海森矩阵。取二次型,我们要证明这个二次型代表了在的局部曲率。考察某个方向,其中为单位向量,代入二次型:
因此:
对t求二阶导数:
在时:
这意味着就是函数在方向的局部曲率,称为瑞利商。进一步,对于海森矩阵,由于它是实对称矩阵,有一组完备正交的特征向量,有,并且这样一组完备正交向量可以组合成任何其他向量。特征向量的瑞利商为:
这意味着多元函数在某点的特征向量方向的局部曲率就是其所对应的特征值。因此
- 某点的海森矩阵是正定的,即全部特征值大于0,全部特征值方向的曲率大于0,依据线性组合可以得到全部方向的曲率都大于零,该点的局部形状是一个朝上的碗
- 某点的海森矩阵是负定的,即全部特征值小于0,全部特征值方向的曲率大于0,依据线性组合可以得到全部方向的曲率都小于零,该点的局部形状是一个朝下的碗
- 如果特征值有些正有些负,意味着该点通常是一个鞍点。
梯度下降法
将函数在任意点展开到1阶:
这个表达式意味着从,函数下降了:
我们要做一个近似,我们控制,有:
一个直接的思路就是,最大化它,意味着我们要:
这样得到:
这就是归一化的梯度下降法。如果考虑不归一化就得到通常的GD,Adam优化器考虑的是逐参数方均根归一化。
牛顿法
我们考虑进行二阶泰勒展开:
这意味着,从,造成的下降为:
我们相信这个近似足够精确,不需要设限,我们让它最小,这就是单步下降的最快的结果:
对求导数:
牛顿法是一种梯度下降法(或者反着说也一样),它主动传入了梯度的信息。代回泰勒展开:
这是一个海森矩阵的二次型,我们已经知道,这样的东西的含义是该点梯度方向的局部曲率。
- 当海森矩阵正定时,曲率在各个方向大于零,因此一定下降
- 当海森矩阵负定时,一定上升
- 当海森矩阵有正有负时,这个值可能大于0也可能小于0
- 当完全平滑时,梯度消失。
但是,对于海森矩阵尤其是全局海森矩阵的特征的描述需要更严格的理论来进行,这就是光滑性和凸性理论。
光滑性
光滑函数
我们首先展开光滑函数的定义,我们认为梯度满足Lipschitz连续条件的是光滑函数,这就是说,对于任意的两个n维向量,满足:
这个连续性条件是直观的,我们导出它的二阶形式。首先我们定义:
我们考虑:
第一步用了绝对值不等式,第二步使用了连续条件。
我们考虑拉格朗日中值定理,它的含义是,总能找到一个,使得:
对于左侧,我们展开:
因此我们得到:
由于我们的是任取的,因此得到:
可以证明这个条件也是lipschitz连续性条件的充分条件。用它可以容易推出:
Lipschitz连续条件刻画了,对于连续损失函数,它的海瑟矩阵二次型即曲率有一个全局最大值。
有效学习率
这个最大值保证了牛顿法不会爆炸,它的含义是,对于梯度下降法迭代:
同时Lipschitz保证
这个表达式小于零只需要,而让它最小,取到:
这就是Lipschitz连续条件带来的好处,它给梯度下降提供了保证。因此选择保证费用函数光滑的模型架构和损失函数是非常重要的。
凸集与凸函数
凸集与凸函数
在数学上,我们将那些,形状向外凸的形状用凸集描述:对于空间的一个集合,如果对于集合内任意两个点,对于任意的参数,都满足:
我们称这个集合是凸的。这个定义的几何意义的关键在于左边这个表达式,例如我把,那么结果是,如果,结果是,当,结果是,可以看到,左边这个表达式定义了一个滑块,在所连的高维直线上滑动,这个定义要求整个直线都在集合内。这无疑要求整个集合没有洞,且没有凹陷。
当我们观察二次函数这种经典的凸函数时,我们会发现,对于这样的函数,它总是满足,如果我们取这样一个集合,包含这个函数开口内保住的全部点和边界,我们就能够定义凸函数为这样的集合是凸集合的函数。这样的集合我们定义为这个函数的上镜图:
对于函数,定义它的上镜图为这样的集合:
这个定义十分形象,对于函数上任何一点,我们将上面的的点全部跟组合起来加到集合内。因此我们马上能够定义凸函数:一个凸函数指的是满足它的上镜图是凸集的函数。现在我们从这个定义导出凸函数满足的表达式:
首先考虑上镜图中任意两点,则有,考虑它们满足凸集定义:
再代入上镜图定义:
特别的,我们取就是函数上的对应的两点:
这就是著名的Jensen不等式。
凸性与强凸性
从凸函数的所满足的Jensen不等式出发可以导出凸性条件,考虑变形:
取极限,考虑一阶导数存在:
这就是一阶条件。我们进一步导出海森矩阵条件,考虑有:
同时我们又可以泰勒展开:
从而:
两边除以并使,得到:
等号在线性函数中取到,考虑海森矩阵的几何意义,当上面的表达式恒等于0时,意味着在该点曲率为0,函数在该点是平直,或者,没有曲率,如,意味着不能优化。
但我们并不期望这种情况,这就是为什么我们引入强凸性条件:
考虑逆推,利用含有积分余项的泰勒公式:
代入恒成立,代入:
这就是强凸性一阶条件。总之,一个函数的海森矩阵的二次型最小值标志这个函数的凸性。
凸优化
首先凸优化问题表述为:
要求优化函数以及限制函数必须是凸的,称满足不等式和等式限制条件的点称为可行点,构成可行集,可行集也是凸集
凸优化问题保证:
1.任何局部最优解都是全局最优解
反证法,假设是某个局部最小值点,这就是说,在的范数球内,是最小值,但不是全局最小值,意味着存在范数球外的可行点。
由于可行集是个凸集,因此也是可行集上的点,于是:
可是是线段上任意一点,因此总能进入范数球,故局部最小值点假设不成立,它是一个全局最小值点。
2.最优性准则
首先是一阶凸性条件:
对于最小值点:
那么是最优解,当且仅当对于任意:
这是什么意思呢?这定义了一个超平面的正向,它是可行集的支撑超平面。
凸化
我们需要让我们损失函数凸甚至强凸,L2正则化正是这样一个方法。
则:
如果是凸的,一定是强凸的。当够大时,能够将函数从不凸转为凸函数。
最优收敛
最优学习率
我们来导出梯度下降法的最优收敛公式,考虑损失函数光滑强凸,首先根据梯度下降法的公式:
考虑光滑性,有不等式:
考虑强凸性,有不等式:
于是有:
代入梯度下降法公式:
你可以看到如果,即,则不会稳定收敛,而如果,即,则根本不会收敛。我们关心最大下降,考虑平均取到:
这就是经典的最优学习率公式。代入:
收敛迭代不等式
现在我们的任务是找到梯度的范数平方的最值,这一最值又全局最小值约束。我们再次利用:
我们取,即全局最小值,则有:
移项得到:
利用不等式:
有
这里的思路是,考虑将乘积用不等式拆成加法以抵消右侧第二项:
最后我们得到:
带回之前的式子:
在等式两侧减去有:
可以看到,这就是收敛迭代不等式。可以看到这是一个线性收敛。
优化问题的条件数
从这里我们可以提炼出一个非常重要的指标,这就是条件数:
在这里,单步收敛率为,可以看到,越大,下降越慢,并且的最小极限是1,此时步长为时可以一步下降到谷底。
我们要更加深刻的理解件事,在上节中我们已经给出特征值的几何解释时曲率,在这里意味着区域内能够找到的最大的曲率,意味着区域内能够找到的最小的曲率。意味着,对于任意的向量:
我们知道,只有当海森矩阵是单位矩阵的常数倍的时候,上面的表达式是可以满足的,换句话说:
即这是一个特征值相等二次型,换句话说特征值相等的二次型可以一步下降到0.
我们再来考察的情况,这意味着
- 要么,我们已经知道了这就是平板或者局域的讲某点的二阶导数为0,意味着梯度消失,
- 要么,我们也知道了这就是某点尖峰,在这种情况有效的学习率是无穷小,这意味着梯度一定会爆炸。
因此条件数的含义已经很明显了,由于条件数越大,损失函数越不利于优化,优化的代价越大,条件数越接近1,优化的代价越小,因此,条件数指的是,解决一个问题的困难程度,需要多少“条件”。
条件数作为一种鲁棒性评估
我们定义一般的条件数为,对于问题,如果输入有扰动,输出对应扰动到,那么相对扰动为,我们定义条件数
在线性问题中,完成了映射,因此当,有,满足:
于是条件数为:
由于范数不等式:,得到:
条件数的定义依赖于范数,在我们这里我们用线性变换的L2范数定义:
对于特征值为的满秩矩阵,它就是最大值,从而:
这个正是线性问题的条件数。它的几何意义是,将映射到时在某些方向拉伸的程度,当时,这正是一个单位矩阵。
所以对于一个线性层,你可以直接求其来知道这样一个线性层是否优良。
最优调谐
我们来重新考虑梯度下降法的问题:
考虑
则:
代入:
这是一个线性问题。首先我们解耦:
从而系数矩阵为,对于强凸函数是正定的,这种形式的优化问题意味着,下降是模态化的,我们定义:
为第i个模态的收敛因子。
收敛发生必须要求,,可以推出。
最优学习率选择根据使得,最慢的那个最小,由于取绝对值,即使得最大的那个最小,即调制它们相等,即满足得到:,这正是刚才的结论。这个结论有更深刻的含义,考虑线性问题的系数矩阵,它的条件数为:
这意味着最优学习率使得不同的模态具有相同的收敛速率,即最优调谐。这个推导更加简洁,因为它将强凸性和光滑性隐含的使用了。
牛顿法的条件数
与线性问题类似,海森矩阵的条件数是最大特征值和最小特征值的比,这两者有没有更加本质的联系?
考虑重新将损失函数展开:
取步长,我们的最小化问题是:
求梯度就有:
可以看到,这就是海森矩阵的线性问题,这个问题也成为牛顿法。当的条件数过大,则对的响应越不均匀优化算法走的步子就“歪”:有的方向走得快,有的方向走得慢,这正是我们在训练神经网络或做数值优化时看到的那种“锯齿状震荡”轨迹。我们可以反解出:
这意味着海森矩阵把空间中“梯度的方向”映射成“移动的方向”,决定了“梯度空间”到“参数空间”的变换,这和的效果是等价的。更进一步:
可以看到,牛顿步是一种自适应学习率。因此牛顿法的优势在于,它将对于条件数的感知传递进入训练。这就是说,例如对于中由于条件数造成的拉伸,被(对于等特征值二次型这个值是)抵消了,从而得到,即二次型的牛顿法一步修正。这就是一种谱传递和谱对齐。
对抗训练
对抗训练(Adversarial Training)也是一种正则化,对抗训练的核心思想是:在训练过程中,不仅使用原始的自然数据,还主动生成并利用一种特殊的、难以察觉的“坏数据”——对抗样本,来一起训练模型。它引入的先验知识是:一个好的模型应该对输入空间中的小扰动是不敏感的。
对抗训练的思想可以写作:
这里的是模型的参数,是真实分布,表示从真实分布采样,这里表示的p norm,因此不等式表示一个半径为的范数球,是损失函数,为模型函数,为标签。
因此这个表达式的含义是,首先攻击:在一个限制的范数球内找到一个,使得输入数据偏移到后损失函数最大,即寻找训练集的一个很大的梯度。然后防御:在这个极大的扰动下,我们仍然希望对于训练集,找到使得损失函数最小的模型参数。
对抗训练的重要特点是,在绝大多数情况下,尤其是在图像领域,通过梯度方法生成的对抗攻击是“无语意”的。但对抗训练的目标是希望模型能够抵抗那些“有语意”的扰动。
- FGSM(Fast Gradient Sign Method)
首先计算样本梯度
它保证了,然后计算:
将这个结果实时计算并添加到训练中。但是这个攻击由于太有规,可能会被模型记忆,导致泄漏,并且这种攻击对梯度的依赖性太重,如果模型中含有梯度破坏层,这种方法必然失效。
更大的问题是FGSM在逻辑上利用的是损失函数的一阶导数,意味着它的含义是在损失函数空间中向着变化最大的方向迈一步,并考虑这一步也应该远离决策边界(线性分段函数)。这里总是假设,损失函数的最大变化方向就是决策条件的最大变化方向。
这就是说,linear+relu深层网络可以看作一个线性分段函数,通过将所有权重矩阵反变换可以得到一个输入空间的决策边界,考虑输入空间的某点,它有一个离决策边界最近的变化方向,这个方向是损失函数对输入的梯度所指示的方向吗?显然不是。
一种简单的改进是加入随机初始化,即FGSM with Random Start
再用这个进行对抗样本生成。
- PGD(Projected Gradient Descent)
它的含义是,走多步来找到这个最好的扰动,也就是迭代形式的FGSM,同样在随机初始化后:
为了保证修正在范数求内,需要裁剪,逐特征/像素进行:
含义是每一个像素点或者特征走的距离不能比大,不能比小,因此保证仍然在范数球内。
你可能觉得可以更新而不是更新,但是我们通常更新以减小浮点数误差。
当然PGD的计算成本是很大的,因此提出了各种改进方法,此处不在赘述。
除此之外还有一个非常有趣的改进版本:
- TRADES(Tradeoff-inspired Adversarial Defense via Surrogate-loss minimization)
看名字可以知道,它是对PGD的的损失函数最小化的一个改进,它利用的是KL Divergence(见下一节),我们可以直接将损失函数写为:
因此最小化损失函数需要最小化KL Divergence,意味着要让和最相似,根据KL Divergence的定义,这要求问题必须是个分类问题,输出的要是概率值。
而对抗样本也通过KL Divergence,考虑
再对进行Clip,使之回到范数球内。
数据标准化
条件数下降与白化
考虑单线性层的神经网络,这就是说,且损失函数是光滑强凸的,因此损失函数必然满足:
我们来考虑梯度:
取出二阶矩,从而海森矩阵有范围:
我们知道海森矩阵的条件数定义:
代入不等式:
因此条件数满足:
这里我们得到了非常重要的结论,单线性层海森矩阵的条件数受其损失函数的限制有一个本征的条件数,而输入数据的二阶矩对其再有一个缩放。
首先对于最理想的情况,即
我们知道这意味着所有特征值相等考虑,则:
不妨取,则,现在考虑,则:
我们看到,如果要归一化二阶矩,直接取:
对于向量:
这种数值处理称为白化,白化是最为激进的数据处理方法,它在压缩条件数时同时破坏了数据结构,简化问题的同时也将一些重要的信息当作冗余扔掉了。
为什么?白化完成两件事情:1.将二阶矩的非对角项清零2.将主对角线上的值都归一化,前者直接将不同特征的相关性清零了。
标准化
标准化是中心化和方差归一化,似乎中心化并不降低条件数,因为我们已经看到,对于单线性层,条件数的最小值依据的是二阶矩而不是协方差矩阵,这两者的区别就在与对中心化是否提出要求。
中心化的意义并不在于条件数,我们可以看到中心化并不能使条件数下降:
考虑对的中心化,意味着在每个列上都减去这个列的均值,我们可以通过,再左乘,从而中心化可以表达为,那么其二阶矩矩阵为:
利用了,从而有:
这说明是半正定的,必定有,其中依照特征值从小到大排列。可以看到,中心化造成了特征值平移,是有可能让条件数增大的,但是我们总还是让数据首先中心化,其中有更深刻的原因,考虑均方差损失函数的线性问题
请读者自己证明损失函数可以写成这种形式。我们考虑直接优化:
中心化后的满足,这意味着方程组变为:
这意味着,中心化使得系数矩阵和偏置解耦了。
这里我们还可以更进一步揭示为什么系数矩阵和偏置是不同的,你可能觉得,偏执可以加入系数矩阵,只需要在所有样本的中加一个值为的特征,现在我们对这个做中心化,结果是,这个新加的特征全部为0,这意味着有这样一个特征,它的和包括自己在内的所有特征的二阶矩项都是0,容易看出,这会使得最小特征值变为0,即条件数无穷大。这意味着,表示的特征正是这样一个常数特征,即数据整体的横向偏移,它更优良的存在形式是偏置项。
所以让我们在中心化的基础上考虑方差归一化,如果原始矩阵是,中心化后是,标准化(即中心化+方差归一化)后是,那么最终的二阶矩为,考虑对角线上的项:
可以看到,最后一项正是方差的定义:
这意味着,标准化让二阶矩矩阵的主对角线归一化了。其实你可以发现,方差归一化等价于乘以了,其中,即取二阶矩的对角线,和白化的操作是十分近似的。
现在我们需要回忆一些线性代数的知识以理解标准化的意义,对于一个满秩矩阵,我们知道它的特征值为,对应的特征向量为,且,考虑一个在原坐标架的向量,则表达式:
其中表示对原坐标的向量的分量变换到矩阵的特征向量形成的坐标架,则在该坐标架内,有:
这是个高维的椭球,在原坐标架内,矩阵对应一个斜着的椭球。而对于一个对角阵,,因此则是一个正着的椭球。当我们求一个矩阵的条件数时,我们正是在求这个椭球最长的半长轴和最短的半长轴的比值的平方。
对于白化操作,操作的结果是对单位阵,意味着将椭球主轴旋转到标准架方向并放缩坐标轴以变成一个标准的球。而对于标准化操作,这其实意味着一种硬伸缩。
这就是说,数据的方差归一化导致的二阶矩的对角线归一化在未人为旋转正主轴的情况下强行按原坐标架进行伸缩,产生的椭球的方向将自然发生旋转,形状也将变化,因此这个问题是,经过这种操作之后的椭球是否更加近圆。
我们能够在二阶证明这件事情确实如此,考虑原矩阵的谱分解:
考虑,则
因此
从而我们只需要证明:
这个证明只是代数展开,最终会化成:
因此当时,取到等号,这对应于二阶矩矩阵的对角线上项相同。
可是对于高维呢?
NTK 动力学
现代理论中,有时会用核函数解释神经网络为什么可以被梯度下降有效训练。
考虑训练集 ,模型输出为 。损失函数为:
梯度流为:
考虑模型输出随时间变化:
代入后得到:
定义神经正切核(Neural Tangent Kernel, NTK):
于是:
当网络宽度趋于无穷大时,NTK 在训练过程中可能趋于一个确定的核函数:
对于均方误差,可以写成:
其中 是模型在训练集上的输出向量。
这说明在某些极限条件下,神经网络训练可以近似理解为在一个核空间中做梯度下降。这个观点连接了传统核方法和现代深度学习,也解释了为什么过参数化网络在某些情况下仍然可以被稳定优化。
- 作者:向思齐
- 链接:https://blog.xiangsiqi.site/notes/DL2_cn
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章



