[逻辑架构图]
本章知识点呈现出从“参数化空间”向“无限维泛函空间”跃迁的逻辑,其内核是模型表达能力与过拟合控制之间的博弈:
- 基石与破局:从刚性的纯线性模型出发,引入“线性基展开”,在不改变底层线性代数和优化算法架构的前提下,赋予模型非线性表达能力。
- 空间的构造(局部化):全局基函数(如高次多项式)存在计算和数值稳定性缺陷,进而引入分段多项式与样条(Splines),实现局部特征的精准控制。
- 约束与正则化(泛函极值理论):当基函数的维度逼近甚至超过样本量时,通过正则化方法(如平滑样条)引入物理世界的“最小能量原理”。在此,问题从寻找有限维参数转化为在无限维的希尔伯特空间(Hilbert Space)中寻找最优函数,并依靠表示定理(Representer Theorem)坍缩回可计算的有限维。
- 高维灾难与特征交叉:从一维推向高维,引出特征的非线性预处理与交叉特征的构造,同时面临计算复杂度呈指数级爆炸的系统级挑战。
[深度整理正文]
1. 突破线性局限:基函数展开的优雅架构
逻辑斯蒂回归和分离超平面都依赖于线性模型。{虽然线性模型在计算上拥有极高的执行效率(极其契合现代 CPU 的 SIMD 指令和缓存行对齐的矩阵乘法),但其假设过于强硬,无法拟合复杂的现实决策边界。}
为了破局,引入了关于变量 的线性基展开式 (linear basis expansion)。这种方式的优美在于:一旦确定了基函数 ,模型 关于这些新变量依然是线性的,然后就可以像之前一样进行拟合。 {底层视角的优美: 在工程实现上,这相当于我们只需要在数据预处理阶段,将原始的输入矩阵 映射为一个新的设计矩阵(Design Matrix)。一旦 生成并驻留在内存中,后续的优化过程(如求逆、梯度下降)复用的依然是高度优化过的线性代数核心库(如 BLAS/LAPACK),不需要对底层的优化器做任何修改。}
2. 函数空间的精细化:从全局走向局部控制
在确定了基展开的策略后,我们需要特殊的基函数来构造我们的特征空间。
{如果使用全局的多项式基(如 ),在计算机系统中极易引发龙格现象(Runge’s phenomenon),且由于高次项的值域跨度极大,会导致设计矩阵的条件数(Condition Number)极差,在 IEEE 754 浮点数计算中引发严重的灾难性取消(Catastrophic Cancellation)导致精度丢失。因此:}
在这章中,我们考虑更加实用的分段多项式 (piecewise-polynomials) 族和样条 (splines),它们允许局部的多项式表示。我们也考虑小波基,这在信号和图像处理中特别有用。
- 我们使用截断幂基 (Truncated power basis) 来构造局部特征。这是在“某个点(节点 )之后增加额外自由度”:实现局部调整。
- 三次样条: 每一段是三次多项式,并且在每个节点满足苛刻的连接条件:函数连续,一阶导连续,二阶导连续。{这保证了曲线在人眼看来是绝对光滑的(因为人眼对曲率即二阶导敏感)。}
3. 控制复杂度的三大范式与终极本质
当我们引入了足够多的基函数(例如在每个数据点都放置一个样条节点),模型很容易过拟合。控制模型复杂度有以下三种核心策略:
- 限制方法 (Restriction) ⇒ 事先确定限制函数的类别。{例如硬性规定只能用加性模型,切断特征间的交互。}
- 选择方法 (Selection) ⇒ 仅包含对拟合有显著作用的函数。{如逐步回归,类似贪心算法。}
- 正则化方法 (Regularization) ⇒ 对系数做限制。{在目标函数中加入惩罚项,如 Ridge 或 Lasso。}
在这里,我们要看透机器学习的本质公式: 损失函数 = 你对数据噪声的假设 ⇒ 选函数空间 + 选损失函数 + 做优化 {深度扩充: 这个总结极其精准。从极大似然估计(MLE)的底层逻辑来看:
- 如果你假设噪声服从高斯分布,推导出的损失函数必然是均方误差 (MSE)。
- 如果你假设噪声服从拉普拉斯分布,损失函数必然是绝对值误差 (MAE)。
- 选定函数空间(如样条空间)决定了你的 Hypothesis Set 有多大;而优化过程就是在 CPU/GPU 上寻找参数,使得该假设在给定的度量(损失函数)下达到极值。}
4. 平滑样条、最小能量原理与希尔伯特空间 (Hilbert Space)
当我们不再人为指定样条的节点,而是把每个数据点都作为一个节点时,我们进入了平滑样条 (Smoothing Splines) 的领域。这就是正则化方法在无限维函数空间中的绝美展现。
此时,我们的目标函数变为:
- 前面的项是拟合误差;后面的项是控制“复杂度”的,二阶导控制的是函数的曲率 ⇒ 光滑度。
想象你手里有一根细长且有弹性的钢条。你想让它穿过桌面上钉着的 个钉子(数据点)。钢条为了达到稳定状态,会自发地寻找一种形状,使得它内部积累的弯曲能量最小。物理学告诉我们,这种弯曲能量正比于:。这正好就是样条模型里的那个正则项(惩罚项)!
神奇的结论: 虽然理论上 可以是任意的(属于无限维的 Sobolev 空间),但物理实验和数学推导共同证明了:对于这个特定的最小化问题,最优解 恰好可以表示为以数据点 为节点的“自然三次样条”。 满足这种“弯曲能量最小”且经过指定点的曲线,在数学形式上完美契合。所以,当我们写下带有 的损失函数时,我们实际上是在模拟物理世界的“最小能量原理”。
{硬核泛函与计算扩充: 这个“神奇的结论”在数学上被称为表示定理 (Representer Theorem)。在再生核希尔伯特空间 (RKHS, Reproducing Kernel Hilbert Space) 中,虽然我们在无限维的函数空间里寻找最优的 ,但表示定理保证了最优解必定落在由 个训练样本点跨越的有限维子空间中。 从计算机系统角度看:这是一个计算可行性的奇迹。它将一个不可能通过计算机求解的泛函变分问题(无限维),坍缩成了一个只需解 线性方程组的问题。而且,对于平滑样条,其推导出的系数矩阵是一个带状矩阵(Banded Matrix,具体为三对角矩阵),在现代 CPU 上,解这样的方程组时间复杂度是极速的 ,且极其契合 L1 数据缓存的预取策略(Prefetching)。}
5. 维度的诅咒:高维特征空间的构造与系统挑战
引出一个问题,高维怎么办? 高维特征的预处理是非常普遍的而且对于改善学习算法的效果是很有效的。预处理也不需要像上面一样是线性的,而是可以是一般的(非线性)函数。派生特征可以接着作为任意(线性或非线性)学习过程的输入。
在多维度的特征里面, 如 ,两个特征相互影响,那么我们需要交叉构造特征来构造一个“足够丰富的函数空间”,让模型有能力表达复杂关系。
{高维张量积与系统资源爆炸: 如果我们在 1 维使用 个基函数,在 维空间中如果要完全表达特征的交互(交叉特征),我们需要进行张量积(Tensor Product),这会产生 个基函数。这在计算机中被称为“维度灾难”的具象体现:不仅会导致统计上的过拟合(样本量远远不够支撑 个参数的估计),更会导致内存带宽高墙(Memory Wall)。当特征维度呈指数爆炸时,设计矩阵将无法放入内存,导致频繁的 Page Fault(缺页中断)和磁盘 Swap,使得计算完全停滞。 为了解决这个系统级和统计级的双重灾难,后续往往会做出妥协,例如退化回加性模型 (GAM, Generalized Additive Models),即假定特征之间不发生交叉:,从而将复杂度从 强行降维打击到 。}
[边界知识联动]
为了将 ESL 的统计理论真正落地到你在计算机系统层面的认知,请关注以下底层联动:
- 缓存局部性 (Cache Locality) 与基展开:在生成截断幂基或张量积特征时,设计矩阵在内存中的布局(Row-major 还是 Column-major)直接决定了 CPU Cache 命中率。由于计算正则化参数或求导通常需要按特征(列)遍历,采用列主序(如 Fortran/R 语言默认分配)能大幅减少 Cache Miss。
- 浮点运算标准 (IEEE 754) 与 B-样条基:虽然笔记中提到了“自然三次样条”,但在工程源码(如 R、Scipy)底层,绝对不会使用原始的截断幂基去计算,而是通过递推算法生成 B-样条基 (B-splines)。这是因为截断幂基高度共线性,使得 矩阵近乎奇异(Singular Matrix),在双精度浮点数(64-bit)下求逆会产生无法忍受的舍入误差;而 B-样条基只在局部非零,生成的矩阵是高度稀疏的,具备极佳的数值稳定性。
- OS 内存调度与高维矩阵:当处理高维特征交叉时,设计矩阵往往极为庞大且极度稀疏。如果不使用压缩稀疏行 (CSR) 或压缩稀疏列 (CSC) 格式存储,而是用 Dense 数组,不仅会触发 OS 的 OOM (Out Of Memory) Killer,还会导致 TLB (Translation Lookaside Buffer) 频繁 Miss,让计算效率断崖式下跌。