1. 损失函数的由来
在机器学习中,损失函数(loss function)用于衡量模型预测与真实目标之间的差异。训练模型的过程,本质上就是在参数空间中寻找一组参数,使得总体损失尽可能小。
从更深层的角度看,常见损失函数并不是“凭经验拍脑袋定义”的,而通常来自两条主线:
- 误差度量观点:直接衡量预测值与真实值之间的偏差;
- 概率建模观点:先假设数据的生成过程,再用极大似然估计推导出损失函数。
通常来说:
- 回归问题中的均方误差、绝对误差,常可由不同的噪声分布假设推导得到;
- 分类问题中的交叉熵损失,通常来自伯努利分布或类别分布下的负对数似然。
1.1 回归问题中的损失:绝对误差与最小二乘法
设训练样本为:
模型对输入 \(x_i\) 的预测记为 \(\hat{y}_i\)。
1.1.1 绝对误差(MAE)
单个样本的绝对误差定义为:
一个批量上的平均绝对误差为:
绝对误差对异常值相对更鲁棒,因为误差是线性增长的。
1.1.2 均方误差(MSE)与最小二乘法
单个样本的平方误差定义为:
一个批量上的平均平方误差为:
这就是常见的均方误差(Mean Squared Error, MSE)。如果我们最小化误差平方和:
就称为最小二乘法(Least Squares)。
需要特别注意:
- 最小二乘法对应的是平方误差,不是绝对误差;
- 原文中把\[|y_i-\hat{y}_i| \]和\[(y_i-\hat{y}_i)^2 \]混在一起称为“最小二乘法”,这是不准确的。
1.1.3 从概率角度理解回归损失
如果进一步假设真实数据满足:
其中噪声 \(\varepsilon_i\) 服从不同分布,就会导出不同损失函数:
- 若 \(\varepsilon_i \sim \mathcal{N}(0,\sigma^2)\)(高斯噪声),则最大似然估计对应最小化平方误差;
- 若 \(\varepsilon_i\) 服从拉普拉斯分布,则最大似然估计对应最小化绝对误差。
因此,MSE 和 MAE 都可以看作概率建模的结果,而不仅仅是“经验定义”。
1.2 极大似然估计:从概率模型到损失函数
1.2.1 抛硬币的例子
设一枚硬币正面朝上的概率为 \(p\)。现在独立抛掷 \(n\) 次,其中有 \(k\) 次正面朝上。我们希望根据结果估计参数 \(p\)。
在参数为 \(p\) 的模型下,观察到这组结果的概率为:
这就是似然函数(likelihood)。极大似然估计的目标是:
由于组合项 \(\binom{n}{k}\) 与 \(p\) 无关,优化时可以忽略,于是等价于最大化:
进一步取对数,可得:
因此,极大似然估计常常转化为最大化对数似然,或者等价地,最小化负对数似然。
1.2.2 从 MLE 到 MAP
严格地说:
- 极大似然估计(MLE):只最大化数据在参数下出现的概率;
- 最大后验估计(MAP):在 MLE 基础上再考虑参数本身的先验分布。
MLE 的目标是:
MAP 的目标是:
根据贝叶斯公式:
由于 \(P(\mathcal{D})\) 与参数 \(\theta\) 无关,因此 MAP 等价于:
这件事很重要,因为后面常见的 L2 正则化、L1 正则化,都可以理解为给参数加入了不同形式的先验。
1.2.3 有监督学习中的正确建模方式
原文中把“人脑模型”“真实模型”“预测标签来自什么模型”等概念混在一起,这在概率建模上并不严谨。更规范的表述是:
设训练集为:
模型参数记为:
在有监督学习中,我们的目标是找到参数 \(\theta\),使得在给定输入 \(x_i\) 时,真实标签 \(y_i\) 出现的条件概率尽可能大,即:
若假设样本独立同分布(i.i.d.),则有:
于是:
取对数后得到:
等价地,也就是最小化负对数似然:
这就是许多损失函数的统一来源。
1.3 信息量、熵、KL 散度与交叉熵
为了更好地理解分类损失,尤其是交叉熵,需要先理解信息论中的几个基本概念。
1.3.1 信息量
一个事件越罕见,它一旦发生所携带的信息就越大。香农定义事件 \(A\) 的信息量为:
它满足两个直观性质:
- 事件越不容易发生,信息量越大;
- 独立事件的信息量可加。
若以 2 为底,则单位是 bit:
若以自然对数为底,则单位是 nat:
底数不同只对应单位不同,不影响本质。
1.3.2 熵
熵刻画一个随机变量整体上的不确定性。若随机变量 \(X\) 的分布为 \(P(x)\),则其熵定义为:
也可以理解为信息量的期望:
直观上:
- 分布越均匀,不确定性越大,熵越高;
- 分布越集中,不确定性越小,熵越低。
1.3.3 KL 散度
仅比较两个分布的熵并不能判断它们是否相同,因为不同分布可能具有相同的熵。因此需要引入KL 散度来衡量两个分布之间的差异。
设真实分布为 \(P\),模型分布为 \(Q\),则 KL 散度定义为:
展开可得:
即:
其中:
- \(H(P)\) 是真实分布的熵;
- \(H(P,Q)\) 是真实分布 \(P\) 与模型分布 \(Q\) 之间的交叉熵。
1.3.4 交叉熵
交叉熵定义为:
它表示:当真实分布是 \(P\) 时,用模型分布 \(Q\) 去编码样本所需要的平均信息量。
由
可知,对给定数据而言,真实分布 \(P\) 是固定的,因此 \(H(P)\) 是常数。于是:
最小化 KL 散度,等价于最小化交叉熵。
这就是为什么分类任务中常使用交叉熵作为损失函数。
1.4 二分类交叉熵的推导
考虑二分类问题,标签:
模型对“正类”的预测概率记为:
通常 \(\hat{p}_i\) 来自 sigmoid 输出:
则在伯努利分布假设下,单个样本的条件概率为:
解释如下:
- 若 \(y_i=1\),则上式变为 \(\hat{p}_i\);
- 若 \(y_i=0\),则上式变为 \(1-\hat{p}_i\)。
对整个数据集,似然为:
取对数:
因此,负对数似然为:
这就是二分类交叉熵(Binary Cross Entropy, BCE)。
如果取平均,则写为:
1.4.1 这里的一个常见记号误区
在分类任务中,应尽量区分:
- \(y_i\):真实标签;
- \(\hat{p}_i\):模型输出的概率;
- \(\hat{y}_i\):将概率阈值化后的预测类别。
训练交叉熵时,真正进入公式的是预测概率 \(\hat{p}_i\),而不是阈值化后的 \(\hat{y}_i\)。
因此,把交叉熵写成关于 \(\hat{y}_i\in\{0,1\}\) 的函数,在概念上是不严谨的。
1.5 多分类交叉熵的推导
设多分类问题共有 \(C\) 个类别。对样本 \(x_i\),模型输出 softmax 概率:
满足:
若真实标签采用 one-hot 编码,记为 \(y_{i,c}\in\{0,1\}\),则单个样本的条件概率可写为:
于是整个数据集的负对数似然为:
若取平均:
这就是多分类交叉熵(Categorical Cross Entropy)。
需要注意:
- 单标签多分类通常使用 softmax + cross entropy;
- 多标签分类中每个类别独立判断,通常使用 sigmoid + binary cross entropy;
- 原文把“多分类交叉熵”与“sigmoid 输出”直接绑定,这并不准确。
1.6 小结:损失函数的统一理解
可以把常见损失函数总结为下面这条主线:
- 先假设数据的生成方式;
- 写出样本在模型下出现的概率;
- 对整个数据集做极大似然估计;
- 将“最大化似然”等价改写为“最小化负对数似然”;
- 得到具体的损失函数。
于是:
- 高斯噪声 \(\Rightarrow\) 均方误差(MSE);
- 拉普拉斯噪声 \(\Rightarrow\) 绝对误差(MAE);
- 伯努利分布 \(\Rightarrow\) 二分类交叉熵(BCE);
- 类别分布 + softmax \(\Rightarrow\) 多分类交叉熵。
因此,损失函数不是孤立的技巧,而是概率建模与统计推断的直接结果。
2. 正则化的本质
如果说损失函数回答的是“如何让模型拟合训练数据”,那么正则化回答的就是“如何让模型不过度拟合训练数据”。
2.1 为什么需要正则化
深度学习模型通常参数量巨大,表达能力很强。如果只追求训练误差最小,模型很容易记住训练集中的噪声与偶然模式,导致在测试集上表现变差,这就是过拟合。
正则化的核心目标是:
- 限制模型的有效复杂度;
- 降低过拟合风险;
- 提高模型在未见数据上的泛化能力。
从直观上说,正则化并不是阻止模型学习,而是偏向于让模型学习更简单、更稳定、更平滑的规律。
2.2 常见正则化方法
2.2.1 L2 正则化
L2 正则化在原损失基础上加入参数平方和惩罚:
它倾向于让参数整体更小、更平滑,但通常不会直接产生稀疏解。
从贝叶斯观点看,L2 正则化等价于对参数施加高斯先验。
2.2.2 L1 正则化
L1 正则化形式为:
它更倾向于产生稀疏参数,使部分参数直接变为 0,因此常被用于特征选择或稀疏建模。
从贝叶斯观点看,L1 正则化等价于对参数施加拉普拉斯先验。
2.2.3 Dropout
Dropout 在训练时以一定概率随机将一部分神经元输出置零。这样做会使模型无法过度依赖某些局部特征或某几个固定通路,从而提升泛化能力。
它可以理解为一种随机子网络集成思想:
- 每次迭代都在训练一个不同的“稀疏子网络”;
- 测试时则近似于对这些子网络做集成平均。
因此,Dropout 本质上是一种随机扰动型正则化。
2.2.4 数据增强与早停
严格来说,正则化并不只包括对参数显式加惩罚项。许多方法虽然形式不同,但本质上都在减少过拟合,例如:
- 数据增强(Data Augmentation):通过扩充样本分布,提高模型对输入扰动的鲁棒性;
- 早停(Early Stopping):在验证集性能开始下降前停止训练,防止模型过度拟合训练集。
2.2.5 Batch Normalization 的定位
原文把 Batch Normalization 直接归为“正则化的本质体现”,这需要更谨慎。
Batch Normalization 的主要作用是:
- 稳定训练过程;
- 缓解梯度问题;
- 允许更大学习率;
- 加快收敛。
它在实践中常常带来一定正则化效果,因为 mini-batch 统计量会引入噪声扰动,但它的首要目标并不是像 L1/L2 那样显式约束参数复杂度。
因此,更准确的说法是:
Batch Normalization 主要是优化与训练稳定化技术,同时可能附带一定的正则化效应,但不宜简单地把它与 L1/L2、Dropout 完全并列为同一种意义上的正则化。
2.3 正则化的本质是什么
正则化的本质可以概括为:
在拟合训练数据之外,额外引入某种偏好或约束,使模型更倾向于选择简单、稳定、泛化更好的解。
这种“偏好”可以体现在多个层面:
- 参数层面:限制参数过大或鼓励参数稀疏,例如 L1/L2;
- 结构层面:通过随机失活减少共适应,例如 Dropout;
- 数据层面:通过增强样本多样性减少过拟合,例如数据增强;
- 优化路径层面:通过早停、噪声扰动等方式避免走向过拟合解。
因此,正则化并不只是“限制参数分布”,而是更广义地:
缩小模型的有效假设空间,或者降低模型对训练数据细节噪声的敏感性。
2.4 对“平滑性”的理解
正则化常常会让模型表现出更好的平滑性,即:
- 相似的输入,输出更接近;
- 模型不会因为微小扰动而产生剧烈变化。
但要注意,这种平滑性通常是结果,不是所有正则化方法的直接定义。
例如:
- L2 正则化通常会让函数更平滑;
- 数据增强会让模型对输入扰动更鲁棒;
- Dropout 会减少对局部特征组合的过度依赖。
所以更准确的说法不是“正则化就是让输出平滑”,而是:
正则化通过限制模型复杂度或提高鲁棒性,往往会诱导出更平滑、更稳定的输入输出关系。
2.5 小结:正则化的统一理解
损失函数与正则化可以统一理解为:
- 损失函数决定模型要“拟合什么”;
- 正则化决定模型要“偏好什么样的解”。
二者结合后,训练目标通常写成:
其中:
- \(\mathcal{L}_{data}\) 衡量模型对数据的拟合程度;
- \(\Omega(\theta)\) 表示对模型复杂度的约束或偏好;
- \(\lambda\) 控制拟合数据与限制复杂度之间的权衡。
从这个角度看,机器学习训练不是单纯追求“把训练集做对”,而是在数据拟合与模型泛化之间寻找平衡。
3. 总结
本文可以归结为两条主线:
第一条主线:损失函数的来源
损失函数并不是孤立定义的技巧,而通常来自概率建模与统计推断:
- 高斯噪声对应 MSE;
- 拉普拉斯噪声对应 MAE;
- 伯努利分布对应二分类交叉熵;
- softmax 类别分布对应多分类交叉熵。
从统一角度看,很多损失函数本质上都是负对数似然。
第二条主线:正则化的本质
正则化的根本目的不是降低训练误差,而是控制模型复杂度、抑制过拟合、提升泛化能力。它通过对参数、结构、数据或优化路径施加约束,使模型偏向于更简单、更稳定、更鲁棒的解。
因此,机器学习中的训练目标,本质上是在回答两个问题:
- 模型应该怎样拟合数据?
- 模型应该偏向什么样的解?
前者由损失函数回答,后者由正则化回答。
