如前所述,当网络对训练数据学习得过于充分,包含了其噪声和特定特性,导致无法对新数据进行泛化时,就会发生过拟合。应对此问题的一种有效方法是正则化,它通过根据网络权重的大小向损失函数添加一个惩罚项来实现。其基本思想是,复杂的模型通常拥有较大的权重,而更简单、泛化能力更强的模型往往具有较小的权重。通过惩罚大权重,我们促使网络寻求更简单的解决方案。两种受线性模型直接启发、常用且有效的正则化技术是 L1 和 L2 正则化。L2 正则化(权重衰减)L2 正则化向原始损失函数($L_{original}$)添加一个惩罚项,该惩罚项与每个权重($w$)的平方成比例。修改后的损失函数 $L_{L2}$ 变为:$$ L_{L2} = L_{original} + \frac{\lambda}{2m} \sum_{i} w_i^2 $$这里:$w_i$ 表示网络中的每个权重(偏差有时不计入)。$\sum_{i} w_i^2$ 是所有权重的平方和。$\lambda$ (lambda) 是正则化超参数,用于控制惩罚的强度。$\lambda$ 值越高,惩罚越强。$m$ 是批次(或数据集)中的样本数量,用于缩放。在计算梯度时,通常包含 $\frac{1}{2}$ 这个系数是为了数学上的便利。工作原理: 在反向传播过程中,此惩罚项对权重 $w_i$ 的梯度是 $\frac{\lambda}{m} w_i$。当使用梯度下降更新权重时,此项将被减去:$$ w_i := w_i - \alpha \left( \frac{\partial L_{original}}{\partial w_i} + \frac{\lambda}{m} w_i \right) $$请注意项 $-\alpha \frac{\lambda}{m} w_i$。此项在每个更新步骤中都会有效地将权重 $w_i$ 稍微推向零,其推动大小与其当前值成比例。这就是 L2 正则化常被称为权重衰减的原因。它促使网络使用较小的权重,将重要性分散到许多神经元上,而不是严重依赖少数几个大权重。这通常会带来更平滑的决策边界和更好的泛化能力。{"layout": {"title": "L2 正则化对权重的影响", "xaxis": {"title": "权重值", "range": [-3, 3]}, "yaxis": {"title": "惩罚项 (w^2)", "range": [0, 9]}, "showlegend": false, "width": 600, "height": 400, "template": "plotly_white"}, "data": [{"x": [-3, -2.5, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3], "y": [9, 6.25, 4, 2.25, 1, 0.25, 0, 0.25, 1, 2.25, 4, 6.25, 9], "type": "scatter", "mode": "lines", "line": {"color": "#4263eb"}}]}L2 正则化施加的二次惩罚项($w^2$)。当权重偏离零时,惩罚项会显著增加,强烈阻止大的权重值。L1 正则化L1 正则化采用不同的方法。它向损失函数添加一个惩罚项,该惩罚项与每个权重的绝对值成比例:$$ L_{L1} = L_{original} + \frac{\lambda}{m} \sum_{i} |w_i| $$这里,$\sum_{i} |w_i|$ 是所有权重绝对值的和,$\lambda$ 再次控制惩罚强度。工作原理: L1 惩罚项的梯度是 $\frac{\lambda}{m} \text{sign}(w_i)$,其中 $\text{sign}(w_i)$ 在 $w_i$ 为正时为 +1,在 $w_i$ 为负时为 -1,在 $w_i$ 为零时为 0(尽管梯度在零点处在技术上未定义,但实现会处理这种情况)。权重更新如下所示:$$ w_i := w_i - \alpha \left( \frac{\partial L_{original}}{\partial w_i} + \frac{\lambda}{m} \text{sign}(w_i) \right) $$与 L2 的主要区别在于,L1 减去一个常数因子($\alpha \frac{\lambda}{m}$),将权重推向零,而不管权重的当前大小(只要它不为零)。这种持续的推动能使权重变为精确的零并保持不变。因此,L1 正则化通常会产生稀疏模型,其中许多权重为零。这可以被视作一种自动特征选择,因为通过零权重连接的神经元对于那些输入实际上会变得不活跃。{"layout": {"title": "L1 正则化对权重的影响", "xaxis": {"title": "权重值", "range": [-3, 3]}, "yaxis": {"title": "惩罚项 (|w|)", "range": [0, 3]}, "showlegend": false, "width": 600, "height": 400, "template": "plotly_white"}, "data": [{"x": [-3, -2.5, -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3], "y": [3, 2.5, 2, 1.5, 1, 0.5, 0, 0.5, 1, 1.5, 2, 2.5, 3], "type": "scatter", "mode": "lines", "line": {"color": "#f76707"}}]}L1 正则化施加的线性惩罚项($|w|$)。当权重偏离零时,惩罚项线性增加。恒定的梯度通过将小权重直接推向零来促使稀疏性。L1 和 L2 的选择**L2(权重衰减)**通常更常见,并作为默认设置表现良好。它促使权重较小且分布分散。L1 生成稀疏权重,通过将一些权重降至零来有效地进行特征选择。如果您怀疑许多输入特征不相关,或者希望获得一个更稀疏、可能更易于解释的模型,它会很有用。然而,与 L2 相比,它在训练期间有时可能不太稳定。在实际操作中,L1 和 L2 正则化都可以在大多数深度学习框架中定义层或优化器时直接添加。正则化参数($\lambda$)正则化超参数 $\lambda$ 的选择很重要。如果 $\lambda = 0$,则没有正则化。如果 $\lambda$ 过小,正则化效果甚微,模型可能仍然过拟合。如果 $\lambda$ 过大,权重惩罚项将主导损失函数。网络会优先考虑最小化权重而非拟合数据,可能导致欠拟合(高偏差)。找到合适的 $\lambda$ 值通常需要通过实验。它通常使用验证集进行调整,常通过网格搜索或随机搜索等方法,我们将在本章稍后讨论超参数调整时介绍这些方法。通过添加这些惩罚项,L1 和 L2 正则化提供了有效的方法来控制模型复杂性,避免过拟合,并提升神经网络在新数据上的泛化表现。它们是深度学习实践者工具箱中不可或缺的工具。