虽然控制树结构(深度、最小样本数)以及使用收缩和子抽样等方法是正则化梯度提升模型的有效方法,但另一种重要方法涉及修改算法在每个步骤中旨在最小化的核心目标函数。我们可以不再仅仅专注于最小化损失(如平方误差或对数损失),而是添加一个惩罚项,明确地抑制模型复杂度。这种方法直接将正则化纳入优化过程。惩罚复杂度:正则化目标函数核心思想是将标准损失函数 $L(y, F(x))$ 与一个正则化项 $\Omega(f_t)$ 相结合,该项惩罚在迭代 $t$ 时添加的新树 $f_t$ 的复杂度。在步骤 $t$ 找到最佳树 $f_t$ 的目标函数变为:$$ \text{目标函数}^{(t)} = \sum_{i=1}^{n} L(y_i, F_{t-1}(x_i) + f_t(x_i)) + \Omega(f_t) $$这里,$L$ 是原始损失函数,$F_{t-1}(x_i)$ 是截至迭代 $t-1$ 构建的集成模型的预测,$f_t(x_i)$ 是新树对样本 $i$ 的预测,而 $\Omega(f_t)$ 是该新树复杂度的惩罚项。现在的目标是找到最小化这个组合目标函数的新树 $f_t$。常见的正则化惩罚项:L1 和 L2两种广泛使用的正则化惩罚项,借鉴自 Lasso 和 Ridge 回归等线性模型,是对模型参数应用的 L1 和 L2 范数。在提升决策树的背景下,“参数”通常是分配给树叶子的输出值(权重)。令 $T$ 为树 $f_t$ 中的叶子数量,并令 $w_j$ 为分配给叶子 $j$ 的输出值(权重)。L1 正则化 (Lasso): 添加一个与叶子权重绝对值之和成比例的惩罚项。 $$ \Omega(f_t) = \alpha \sum_{j=1}^{T} |w_j| $$ 超参数 $\alpha$ 控制 L1 惩罚的强度。较大的 $\alpha$ 值会将叶子权重推向零,可能使某些叶子输出恰好为零。这鼓励了叶子值的稀疏性。在 XGBoost 中,这对应于 reg_alpha 参数。L2 正则化 (Ridge): 添加一个与叶子权重平方和成比例的惩罚项。 $$ \Omega(f_t) = \frac{1}{2} \lambda \sum_{j=1}^{T} w_j^2 $$ 超参数 $\lambda$ 控制 L2 惩罚的强度(其中 $\frac{1}{2}$ 是为了微分时的数学便利而包含的)。较大的 $\lambda$ 值鼓励更小、更分散的叶子权重,防止任何单个叶子具有过大的输出值。这倾向于使模型对叶子中的单个数据点不那么敏感。在 XGBoost 中,这对应于 reg_lambda 参数。集成到提升过程(XGBoost 示例)XGBoost 提供了一个清晰的框架来展示这些惩罚项是如何集成的。XGBoost 没有直接处理可能复杂的损失函数 $L$,而是使用损失函数在预测 $F_{t-1}(x_i)$ 附近的二阶泰勒近似:$$ L(y_i, F_{t-1}(x_i) + f_t(x_i)) \approx L(y_i, F_{t-1}(x_i)) + g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) $$其中 $g_i$ 是损失函数 $L$ 对预测的一阶导数(梯度),$h_i$ 是二阶导数(海森),在 $F_{t-1}(x_i)$ 处评估。将此近似代入目标函数(并去除不影响 $f_t$ 优化的常数项)后,第 $t$ 次迭代的目标函数近似为:$$ \text{目标函数}^{(t)} \approx \sum_{i=1}^{n} [ g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i) ] + \alpha \sum_{j=1}^{T} |w_j| + \frac{1}{2} \lambda \sum_{j=1}^{T} w_j^2 $$此目标函数可以通过对叶子 $j$ 求和而不是对单个样本 $i$ 求和来重写。令 $I_j$ 为分配给叶子 $j$ 的训练样本的索引集合。那么对于所有 $i \in I_j$,有 $f_t(x_i) = w_j$。目标函数变为:$$ \text{目标函数}^{(t)} \approx \sum_{j=1}^{T} [ (\sum_{i \in I_j} g_i) w_j + \frac{1}{2} (\sum_{i \in I_j} h_i) w_j^2 ] + \alpha \sum_{j=1}^{T} |w_j| + \frac{1}{2} \lambda \sum_{j=1}^{T} w_j^2 $$合并与 $w_j$ 相关的项:$$ \text{目标函数}^{(t)} \approx \sum_{j=1}^{T} [ (\sum_{i \in I_j} g_i) w_j + \frac{1}{2} (\sum_{i \in I_j} h_i + \lambda) w_j^2 + \alpha |w_j| ] $$对树构建和叶子权重的影响这个正则化目标函数直接影响树构建的两个主要方面:最佳叶子权重: 对于固定的树结构,每个叶子 $j$ 的最佳权重 $w_j^$ 被选择为最小化括号中的项。在仅有 L2 正则化($\alpha=0$)的情况下,这个最小化问题有一个直接的闭式解: $$ w_j^ = - \frac{\sum_{i \in I_j} g_i}{\sum_{i \in I_j} h_i + \lambda} $$ 请注意 L2 惩罚项 $\lambda$ 如何出现在分母中。较大的 $\lambda$ 值会将最佳权重 $w_j^*$ 缩小到零,有效降低了在此步骤添加的树的影响。当包含 L1 正则化($\alpha > 0$)时,由于绝对值函数在零点不可微,寻找最佳权重会稍微复杂一些,通常需要迭代或近似方法,但其原则保持不变:惩罚项抑制大权重。分裂寻找增益: 在树构建过程中评估潜在分裂时,XGBoost 等算法会计算与分裂相关的“增益”。此增益衡量通过将单个叶子替换为两个新叶子,目标函数减少了多少。此增益的计算明确地纳入了正则化项($\lambda$ 和 $\alpha$)。这意味着导致过大或过多叶子权重的分裂会受到惩罚。算法偏爱那些不仅能有效减少损失,而且能生成具有受控叶子权重的树的分裂,从而促进更好的泛化能力。实际考虑超参数调优: L1($\alpha$,reg_alpha)和 L2($\lambda$,reg_lambda)惩罚的强度是重要的超参数,通常需要通过交叉验证以及学习率和树深度等其他参数进行调整。L1 与 L2: L2 正则化通常更平滑,并且常作为默认选项。它有效防止叶子权重变得过大。L1 正则化可能将某些叶子权重推到恰好为零,这看起来像是特征选择,但在树模型中不如在线性模型中直接。在实践中,提升中的 L1 有时在处理高维稀疏特征时有所帮助,但 L2 更常见的是叶子权重的主要正则化器。通常,L1 和 L2 结合使用。可用性: 虽然这个想法是普遍的,但如通过泰勒展开描述的,对叶子权重进行明确的 L1/L2 正则化是 XGBoost 的一个标志性特征。LightGBM 和 CatBoost 等其他库也包含 reg_alpha 和 reg_lambda 参数,实现类似的正则化原则,尽管确切的内部计算可能略有不同。Scikit-learn 的 GradientBoostingRegressor 和 GradientBoostingClassifier 更侧重于收缩、子抽样和树约束进行正则化。通过向目标函数添加 L1 和 L2 惩罚项,梯度提升框架获得了一种直接的机制来控制每次迭代中添加的更新的幅度。这是防止过拟合的基本技术,尤其是在与前面讨论的其他正则化策略结合使用时,可以带来更有效和更具泛化能力的模型。