# XGBoost、优化器选择与收敛邻域

[[MCS/day6/00 学习指南|day6 学习指南]] · [[MCS/00 MCS学习总览|十一天总览]] · [[MCS/day6/阅读核验与疑问|阅读核验与疑问]] · 上一篇：[[MCS/day6/08 牛顿法、拟牛顿法与 Adam 问答|牛顿法、拟牛顿法与 Adam 问答]] · 下一篇：[[MCS/day6/10 牛顿法、割线法与鞍点实验|牛顿法、割线法与鞍点实验]]

> 来源：[[MCS/day6补充5|day6补充5]]。用途：问答。原有推导、追问与解答保留；阅读时请结合本日核验说明。

## XGBoost、LightGBM、Adam 与牛顿法：课堂笔记整理

### 一、XGBoost 的五大核心特点

#### 1. 二阶泰勒损失

- 使用二阶泰勒展开，收敛更快，因为是一阶 + 二阶（一阶导数 + 二阶导数）。
- 对损失函数适配性更强，比如 MSE、Log Loss 都支持。

#### 2. 自带正则化

- 正则化限制树不要长得太复杂，强力抑制过拟合。
- 这是 XGBoost 在表格数据上碾压普通 GBDT 的一个关键。

#### 3. 分裂节点的预排序或分箱（Engineering Accelerator，工程加速）

- 对特征进行预先排序，在候选分割点进行缓存，大幅提速。
- 支持近似直方图分箱，海量数据训练会更快。

#### 4. 缺失值自动处理

- 不需要人工处理缺失值。

#### 5. 支持并行计算

- 关键记忆点：树的迭代是串行的，必须一颗一颗地加。
- 因为它的本质是加法模型，硬件层面是加法器。
- 并行只发生在单棵树内部的特征分裂：多个特征同时找最优分割点时并行。

---

### 二、XGBoost 的四大优点

1. 训练速度快，支持自定义损失函数（loss function）。
2. 可以输出特征重要性量化，常用来做因子筛选。
3. 表格数据效果极好，鲁棒性好，抗噪声。
4. 自带正则、缺失值处理，上手门槛很低。

因此它也被誉为学习机器学习的入门模型。

> 逻辑区分：
> - 五大核心特点 = 技术机制（二阶泰勒、正则化、工程加速、缺失值处理、并行计算）
> - 四大优点 = 实际使用带来的好处（快、支持自定义损失、输出特征重要性、门槛低）

---

### 三、LightGBM

- 原型是 XGBoost，是 XGBoost 的改进版。
- 相比 XGBoost：直方图算法 + 按叶子生长（Leaf-wise），速度更快，精度略接近。
- 可用于：因子的预测挖掘、分类（如预测涨跌）、因子筛选、风险评估等。
- 做风控时一定要先做时间序列（time series）分析，序列回撤比较多，然后下分（降采样/分箱）。
- “Suffrage and test” 大概率是口误，结合语境应为 Train / Validation / Test 划分 或 Backtesting 回测。

> 风控中的 Time Series：
> 金融风控数据具有时序性，不能像普通表格数据那样随机划分训练集和测试集，否则会造成未来信息泄露（Look-ahead Bias）。正确做法是按时间顺序切分（如前 80% 训练，后 20% 测试），或者做滚动窗口回测（Walk-forward Backtesting）。

---

### 四、为什么深度学习不用牛顿法，而用 Adam？

1. 存不起海森矩阵。牛顿法没有办法存储海森矩阵。
2. mini-batch 的梯度是有噪声的。二阶导数更加有噪声，它更早（更敏感）。所以牛顿法更加不适合。
3. 在神经网络里面，鞍点很多。牛顿法会奔着驻点去，不管是不是极小值。
4. 它是非凸函数（non-convex）。在不可导点上没有正经的二阶导。

#### Adam 的做法

- Adam 用一阶矩和二阶矩，即梯度平方。
- 这里的二阶是梯度平方，不是海森矩阵。
- 用一阶矩和二阶矩做对角、随机的伪曲率。
- 好处：便宜。

---

### 五、作业 1：牛顿法为什么常常显得快？

牛顿法显得快，本质原因是它使用了二阶信息（曲率），而一阶方法（梯度下降）只用了梯度。

#### 第一，从一维推导看：用二次函数近似原函数，一步跳到极值点。

在当前点 $x_n$ 处，对 $f(x)$ 做二阶泰勒展开：

$$
f(x) \approx f(x_n) + f'(x_n)(x - x_n) + \frac{f''(x_n)}{2}(x - x_n)^2
$$

求导并令其为零，得到：

$$
x_{new} = x_n - \frac{f'(x_n)}{f''(x_n)}
$$

也就是说，牛顿法是在当前点用一个二次函数（抛物线）去近似原函数，然后直接跳到这个二次函数的极值点。如果原函数本身接近二次函数（或者就是二次函数），牛顿法一步就能到位。

#### 第二，从多维推广看：用海森矩阵自动按方向缩放步长。

多维牛顿法的更新公式是：

$$
x_{new} = x - H^{-1} \nabla f
$$

其中 $H$ 是海森矩阵，$\nabla f$ 是梯度。

对比梯度下降 $x_{new} = x - \eta \nabla f$：梯度下降只有一个全局标量学习率 $\eta$，顾得了东顾不了西；而牛顿法用 $H^{-1}$ 相当于每个方向有自己的步长——在曲率大的方向自动缩小步长，在曲率小的方向自动放大步长。

这就是为什么在病态函数（比如 $f(x,y) = x^2 + 10y^2$）中，梯度下降走出之字形，而牛顿法一步到位。

#### 第三，从收敛速度看：牛顿法是二阶收敛。

在靠近最优解时，牛顿法每次迭代误差大约平方级缩小（比如误差从 $10^{-3}$ 变成 $10^{-6}$ 再到 $10^{-12}$），而梯度下降通常只是线性收敛。这就是“三步就得到很高精确度”的来源。

但要注意：牛顿法“显得快”是有前提的——海森矩阵要能存、能求逆、要正定、函数要光滑。这些前提在深度学习里基本不成立，所以才有了后面的替代方案。

---

### 六、作业 2：L-BFGS 和 Adam 怎么选择？

选择的核心依据是：问题规模（参数量）、数据规模（样本量）、以及是否需要随机 mini-batch 训练。

#### 选 L-BFGS 的场景

- 参数量中等（比如几百到几千维，海森矩阵存不下但能近似）。
- 样本量中等（几千到几万）。
- 问题是凸的或接近凸的（比如逻辑回归、广义线性模型）。
- 需要高精度收敛，且可以接受全批量（full-batch）计算。
- 典型应用：sklearn 里的逻辑回归、广义线性模型，默认求解器常常就是 lbfgs 或 newton-cg。L-BFGS 用最近 $m$ 步的梯度变化来估算曲率，不存完整海森矩阵，内存可控。

#### 选 Adam 的场景

- 参数量巨大（百万、千万、十亿级），海森矩阵根本存不起（100 万维就是 8 TB）。
- 数据量大，必须用 mini-batch 随机训练。
- 问题是高度非凸的（深度神经网络），鞍点很多。
- 损失函数可能有不可导点，没有正经的二阶导。
- 典型应用：深度学习训练。Adam 用一阶矩（梯度均值）和二阶矩（梯度平方均值）构造一个对角的伪曲率，好处是便宜——只存两个向量，不存矩阵。

#### 一句话总结

中小规模、凸问题、能全批量算 → L-BFGS；
大规模、非凸、必须 mini-batch → Adam。

---

### 七、作业 3：什么是收敛半径？

#### 课堂口语版

收敛半径，是关于初始点的。

初始点必须落在最优点的多大邻域之内，对不对？

初始点和这个最优点之间，它是不是有一个 range（范围）？那么算法要去保证，最终我们能够找到这个最优点。

那么这个邻域，它的最大范围，我们就把它叫做收敛半径。

你要知道，对于咱们的一个迭代算法，收敛半径是指：当且仅当初始点与最优点的距离满足

$$
\| x_0 - x^* \|_2 < R
$$

那么迭代序列是不是就保证能收敛到 $x^*$？

补充说明：

- 这里 $x_0$ 是初始点，$x^*$ 是最优点，$R$ 就是收敛半径。
- 意思是：只要初始点落在这个半径 $R$ 划出的邻域内，迭代算法就能保证收敛到最优点；一旦初始点跑到这个邻域之外，收敛就没有保证，可能变慢、震荡甚至发散。
- 所以收敛半径刻画的是——一个迭代算法对初始点的容忍范围有多大。

#### 课本学术版

那么这个是课本上的，照本宣科的一种非常学术的讲法。如果你不想听太学术的，你就听我前面一开始的讲法：

其实就是初始点必须落在最优点的多大邻域之内。算法保证最终能够找到这个最优点。那么它们之间的这个 range，就是它的一个最大范围，就是我们讲的收敛半径。你可以靠这个去记忆，这个更加简单一点，更加口语化。

你比如说，纯牛顿法，我们讲一步到位，它是局部收敛算法。只有初始点足够靠近极小点的时候，它才能收敛。那么这个“足够近”的距离阈值，其实就是牛顿法的收敛半径。

如果说我们要全局收敛，或者叫半全局收敛算法，怎么办呢？比如说强凸函数下的梯度下降，任意的初始点它都能够收敛。所以说它的收敛半径是无穷大，不可计算。

#### 一句话总结

- 局部收敛算法（牛顿法）：初始点必须落在收敛半径以内，才能保证收敛。收敛半径是有限值。
- 全局收敛算法（强凸函数下的梯度下降）：任意初始点都能收敛，收敛半径是无穷大。

#### 更数学化的补充

牛顿法的收敛半径，本质上是一个由函数曲率结构决定的局部邻域。在这个邻域内，二次近似足够准，牛顿法能稳定收敛；一旦离开这个邻域，二次近似失效，迭代就可能乱走甚至发散。

它不是一个简单的“离最优解多远”的固定距离，而是取决于函数的二阶导数变化有多剧烈。

一维情况下，设我们要求 $f'(x) = 0$ 的根，牛顿迭代是：

$$
x_{n+1} = x_n - \frac{f'(x_n)}{f''(x_n)}
$$

这是一个不动点迭代。它的收敛性有一个标准判据：看迭代函数

$$
g(x) = x - \frac{f'(x)}{f''(x)}
$$

的导数绝对值。

$$
|g'(x)| = \left| \frac{f'(x) f'''(x)}{[f''(x)]^2} \right|
$$

收敛条件是 $|g'(x)| < 1$。

这个条件成立的那个区间，就是收敛半径的实际来源。它告诉我们几件事：

- $f'(x)$ 不能太大：离极值点太远，梯度很大，容易超过 1。
- $f''(x)$ 不能太小：曲率接近零的地方，分母很小，步长爆炸。
- $f'''(x)$ 不能太大：三阶导大意味着曲率变化剧烈，二次近似很快失真。

所以收敛半径不是一个拍脑袋的距离，而是这三个量共同决定的一个区间。

#### 具体例子

$$
f(x) = x^4/4 - x^2/2
$$

这是双阱函数。

$$
f'(x) = x^3 - x
$$

$$
f''(x) = 3x^2 - 1
$$

牛顿迭代：

$$
x_{n+1} = x_n - \frac{x_n^3 - x_n}{3x_n^2 - 1}
$$

看这个式子：当 $3x_n^2 - 1 \approx 0$，也就是 $x_n \approx \pm 1/\sqrt{3} \approx \pm 0.577$ 时，分母接近零，步长爆炸。

这两个点就是牛顿法的“危险区”。它们在两个极小值点（$x = \pm 1$）和极大值点（$x = 0$）之间。

- 如果你从 $x_0 = 0.6$ 出发，离危险区太近，牛顿法可能把你甩到很远的地方。
- 如果你从 $x_0 = 0.5$ 出发，离危险区远一些，它可能顺利滑向 $x = 1$ 这个极小值。
- 如果你从 $x_0 = 0.1$ 出发，它可能反而被推向 $x = 0$ 这个极大值（因为 $f''(0) = -1 < 0$，牛顿法不区分极大极小）。

所以，这个函数的收敛半径，是由 $x \approx \pm 0.577$ 这两个奇点划出的边界决定的，而不是由离最优解的距离决定的。

#### 为什么深度学习里这个半径问题特别严重？

在深度神经网络里：

- 非凸：损失曲面有大量鞍点、局部极小、平坦区域。
- 海森矩阵不正定：很多地方 $f''(x) < 0$，牛顿法会朝极大值方向走。
- 不可导点：ReLU 等激活函数导致二阶导不存在或不连续。
- mini-batch 噪声：梯度本身有噪声，二阶导更不稳定。

这些因素让牛顿法的收敛半径在深度学习里非常小，而且难以预测。你很难保证初始点落在这个半径内，所以牛顿法在深度学习里基本不可用。

#### 实际怎么办？扩大收敛半径的手段

- 线搜索（line search）：不直接走完整步，而是沿牛顿方向找一个使函数下降足够的步长。这能防止步长爆炸。
- 阻尼牛顿法（damped Newton）：给海森矩阵加一个正定修正 $H + \lambda I$，保证分母不为零、方向是下降方向。
- 信赖域方法（trust region）：显式定义一个“信任半径”，在这个半径内用二次模型，超出就缩小半径。这实际上就是把收敛半径变成了一个可调节的参数。
- 先梯度下降预热，再切牛顿：先用一阶方法走到最优解附近，等进入收敛半径后再用牛顿法加速。

---

### 八、作业 4：高斯消元是什么？应用？

#### 高斯消元是什么

高斯消元（Gaussian Elimination）是一种解线性方程组的算法。它通过行变换把系数矩阵化为上三角矩阵，然后回代求解。

对于方程组 $Ax = b$，高斯消元分两步：

1. 前向消元：通过行变换，把矩阵 $A$ 化成上三角矩阵。
2. 回代：从最后一行开始，逐行解出未知数。

#### 与牛顿法的关系（课堂笔记里的关键连接）

多维牛顿法每一步都要解：

$$
Hd = -g
$$

其中 $H$ 是海森矩阵，$g$ 是梯度，$d$ 是牛顿方向。

然后更新：

$$
x_{new} = x + d
$$

这个 $Hd = -g$ 就是一个线性方程组，而解它的标准方法就是高斯消元。

所以，牛顿法每一步迭代，本质上都在做一次高斯消元（或者等价的矩阵分解，比如 LU 分解）。

#### 应用场景

- 优化：牛顿法、拟牛顿法里解牛顿方程。
- 线性回归：正规方程 $X^T X w = X^T y$，直接解这个线性方程组。
- 电路分析：解节点电压方程。
- 结构力学：解有限元方程。
- 计算机图形学：解线性系统做几何变换。
- 数值计算：任何需要解 $Ax = b$ 的地方。

#### 为什么深度学习不用高斯消元解牛顿方程

因为 $H$ 是 $n \times n$，$n$ 到百万级时，存储就是 8 TB，高斯消元的复杂度是 $O(n^3)$，根本算不动。所以深度学习才转向 L-BFGS（不存 $H$）和 Adam（只存对角伪曲率）。

---

### 九、四题逻辑串联

牛顿法快，是因为用了二阶曲率，自动按方向缩放步长（作业 1）；但牛顿法要解 $Hd = -g$，这需要高斯消元（作业 4），而 $H$ 太大存不起、算不动，所以大规模问题转向 L-BFGS 或 Adam（作业 2）；同时牛顿法只是局部收敛，有收敛半径限制，初始点不能太远（作业 3）。

---

### 十、核心记忆点

- XGBoost 五大核心特点：二阶泰勒、正则化、工程加速、缺失值处理、并行计算。
- 树的迭代是串行的，必须一颗一颗地加；并行只发生在单棵树内部的特征分裂。
- LightGBM 是 XGBoost 的改进版：直方图算法 + Leaf-wise，速度更快。
- 深度学习不用牛顿法：存不起海森矩阵、mini-batch 梯度有噪声、鞍点多、非凸且不可导点没有正经二阶导。
- Adam 用一阶矩和二阶矩做对角伪曲率，便宜。
- 牛顿法局部二阶收敛，有收敛半径；L-BFGS 适合中小规模凸问题；Adam 适合大规模非凸 mini-batch 训练。
- 收敛半径：初始点必须落在最优点的某个邻域内，算法才保证收敛。局部收敛算法半径有限，全局收敛算法半径无穷大。
- 高斯消元是解线性方程组的算法，牛顿法每一步解 $Hd = -g$ 本质上就是高斯消元。
