尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

不可知PAC学习:为何经验风险最小化是最优算法

不可知PAC学习:为何经验风险最小化是最优算法 训练误差很低但模型一上线就“翻车”这类案例在工程里并不少见。常见的解释是“数据有噪声”或者“模型容量不够”但很少有人从学习理论的角度追问一个更根本的问题如果真实世界根本不按照我们假设的模型走那么“学习”这件事到底还能不能保证成功这就是不可知PAC学习Agnostic PAC Learning要回答的问题。这篇文章想把理论拆开讲清楚一个可能反直觉的结论在不假设存在完美假设的情况下只要假设类容量有限经验风险最小化ERM就是样本复杂度意义上的最优算法。读完你会理解为什么训练误差不能作为模型好坏的唯一标准也会用一段可以运行的Python代码亲手验证泛化误差如何随样本量下降。1. 为什么需要“不可知”PAC学习传统PAC学习Probably Approximately Correct Learning由Valiant在1984年提出它的核心设定是存在一个目标概念函数并且这个目标函数一定位于学习算法考虑的假设空间中。算法从样本中学习后要有高概率输出一个误差小于某个阈值的假设。这个设定有几个理想化条件数据分布固定训练和测试来自同一个分布。标签由某个真实函数生成。该真实函数在假设空间中。但现实工程中这三个条件几乎不可能同时满足。以分类任务为例标签可能由人工标注存在不可避免的噪声。数据的特征可能根本无法完全区分类别比如两个样本特征相同但标签不同。我们选定的模型家族比如线性分类器很可能不包含真正的标签生成函数。如果继续用经典PAC的框架去分析结论会非常脆弱一旦假设空间里不存在完美函数理论上就无法保证学习成功。于是就有了更贴近实际的“不可知PAC学习”不假设存在一个零错误的完美假设只假设存在一个“在假设类中表现最好”的假设。学习算法的目标是以高概率输出一个假设使其真实风险尽量接近这个最优假设的风险。换句话说不可知PAC允许“做不到最好”但要求“尽量向最好的那个靠拢”。这个设定更符合机器学习在真实数据上的行为也是统计学习理论中处理噪声和模型偏差的标准框架。2. 最优的不可知PAC算法就是经验风险最小化很多人在第一次接触这个结论时都会觉得难以置信理论上的最优算法居然就是最简单的“在训练集上挑误差最小的假设”先给结论在有限的假设空间或者有限VC维的假设类中经验风险最小化Empirical Risk MinimizationERM就是最优的不可知PAC算法。所谓“最优”不是指它在任何数据集上都拿到最低误差而是指它需要的样本数量达到了信息论意义下的下界不会再有其他算法能在同样的样本规模下稳定地做得更好。为什么是ERM因为不可知PAC的目标是最小化风险[ R(h) \mathbb{E}_{(x,y)\sim D}[\mathbb{1}[h(x) \neq y]] ]但我们只能看到有限的训练样本无法直接计算真实风险 (R(h))。ERM的做法很直接用训练集上的经验风险 (\hat{R}(h)) 来逼近真实风险然后选择经验风险最小的假设[ \hat{h}{\mathrm{ERM}} \arg\min{h \in \mathcal{H}} \hat{R}(h) ]从统计学习理论的角度看ERM之所以是最优的是因为它满足“一致性”和“最小最大最优性”。给定样本量 (m)任何算法的泛化误差都不可能低于某个信息论下界而ERM恰好能达到这个下界的量级。这里的“最优”是指样本复杂度意义上的最优不是指“每个数据集上都最准”。这个结论并不依赖复杂的优化技巧它依赖的是概率集中不等式当样本量足够大时训练误差会以高概率接近真实误差。而ERM选择训练误差最小的假设自然也就选择了真实误差足够小的假设。3. 样本复杂度不可知设定比可实现设定贵在哪里PAC学习中最重要的指标之一是样本复杂度也就是为了达到预期精度和置信度需要多少训练样本。在“可实现”realizable设定下即假设类中存在完美假设时ERM需要的样本量约为[ m O\left(\frac{\ln |\mathcal{H}| \ln(1/\delta)}{\varepsilon}\right) ]而在不可知设定下这个上界变成了[ m O\left(\frac{\ln |\mathcal{H}| \ln(1/\delta)}{\varepsilon^2}\right) ]差别在于分母中 (\varepsilon) 变成了 (\varepsilon^2)。也就是说当精度要求提高一个数量级时可实现设定只需要样本量线性增长而不可知设定需要平方级增长。这个代价来自哪里可以用一个直观例子理解。可实现设定下学习算法只需要在所有误分类样本 “消失” 的假设中找到一个即可。不可知设定下由于存在噪声最优假设的经验风险不一定是最小的甚至可能出现“多个假设经验风险接近最优”的情况。算法必须先确定哪些假设是真正优秀的这需要更精细的估计因此误差的方差对样本量的影响更强。对于无限假设类用VC维替代 (\ln |\mathcal{H}|)。只要假设类的VC维 (d) 有限不可知PAC学习的样本复杂度就是[ m O\left(\frac{d \ln(1/\delta)}{\varepsilon^2}\right) ]并且存在匹配的下界。这说明一个假设类是否可学习取决于VC维是否有限。在不可知PAC框架下ERM达到了这个上界因此是最优的。如果假设类无限且VC维无限则不存在任何算法能以有限样本保证泛化。表格对比一下两种设定的差异设定是否假设存在完美假设样本复杂度主要项对噪声的容忍可实现PAC是(\frac{\ln|\mathcal{H}|}{\varepsilon})不允许标签噪声不可知PAC否(\frac{\ln|\mathcal{H}|}{\varepsilon^2})允许任意标签噪声不可知PAC VC维否(\frac{d}{\varepsilon^2})允许任意标签噪声可以看到不可知设定只是让“保证”更容易成立但没有让“保证”更容易达成。它付出的代价就是需要更多的样本。4. 一个具体例子带噪声的线性分类为了把上面的理论落到代码里我们构造一个最简单的不可知学习场景二维平面上的点真实标签由 (x_1 0) 决定。但标签有30%的概率被随机翻转也就是说存在噪声。假设类是一组法向量角度不同的线性分类器候选角度从0到(\pi)均匀采样。在这个场景下假设类中并不存在一个完美分类器。即使选到最优角度0度真实风险也会是0.3。因为标签本身有30%被随机翻转了任何分类器都无法做到100%正确。我们要验证的是随着训练样本 (m) 增大ERM选择的分类器的测试误差是否逐渐逼近0.3并且误差下降的趋势符合不可知PAC的样本复杂度结论。5. 环境准备与演示代码本文的代码只需要标准Python数据科学库。建议创建一个虚拟环境然后安装依赖mkdir agnostic_pac_demo cd agnostic_pac_demo python -m venv venv source venv/bin/activate pip install numpy matplotlib5.1 计算有限假设空间的理论样本数先写一个函数计算有限假设空间下不可知PAC所需样本数的上界。这个函数的依据是Hoeffding不等式加并集界。import numpy as np def sample_complexity_finite(M: int, eps: float, delta: float) - int: 有限假设空间下不可知PAC学习所需样本数的上界。 M: 假设个数 eps: 泛化误差允许的最大差距 delta: 失败概率 return int(np.ceil((np.log(M) np.log(2.0 / delta)) / (2.0 * eps**2))) # 示例100个假设期望误差差距不超过0.1置信度0.95 m_needed sample_complexity_finite(M100, eps0.1, delta0.05) print(f理论上需要的样本数: {m_needed})这里使用了并集界代价是假设个数 (M) 进入对数项。也就是假设类越大需要样本越多但是增长速度只是对数量级。5.2 生成带噪声的合成数据接下来定义一个数据生成函数。注意这里故意引入了标签噪声使场景变为不可知。def make_data(n_samples: int, noise: float 0.3, seed: int None): 生成二维数据真实标签为 x1 0但以 noise 概率翻转标签。 返回 X (n, 2) 和 y (n,)y 取值为 0 或 1。 rng np.random.default_rng(seed) X rng.uniform(-1, 1, size(n_samples, 2)) y_true (X[:, 0] 0).astype(int) flip rng.random(n_samples) noise y_noisy np.where(flip, 1 - y_true, y_true) return X, y_noisy在这个设定中真正的标签生成函数是“看第一维是否大于0”。但由于噪声数据分布中已经有30%的标签是错的。任何分类器在完美边界上的期望误差都不低于0.3这就是“最优假设”的风险。5.3 实现ERM并评估泛化误差我们实现一个简单的ERM在候选角度里选择训练集误差最小的那个分类器然后用独立的测试集估算它的真实风险。def evaluate_erm(sample_sizes, M60, noise0.3, trials50): 对每个样本量重复 trials 次实验返回平均测试误差。 # 候选角度不包括 pi避免与 0 表示同一决策面 thetas np.linspace(0, np.pi, M, endpointFalse) def risk_of_theta(theta, X, y): pred (X[:, 0] * np.cos(theta) X[:, 1] * np.sin(theta) 0).astype(int) return np.mean(pred ! y) results [] for m in sample_sizes: er_risks [] for trial in range(trials): X_train, y_train make_data(m, noise, seed1000 trial) # ERM选择训练误差最小的角度 best_theta min(thetas, keylambda th: risk_of_theta(th, X_train, y_train)) # 独立测试集 X_test, y_test make_data(5000, noise, seed2000 trial) test_risk risk_of_theta(best_theta, X_test, y_test) er_risks.append(test_risk) results.append(np.mean(er_risks)) return results sample_sizes [10, 20, 50, 100, 200, 500, 1000] avg_risks evaluate_erm(sample_sizes, M60, noise0.3, trials20) for m, risk in zip(sample_sizes, avg_risks): print(fm{m:4d}, 平均测试误差{risk:.4f})运行这段代码你会看到当训练样本很少时比如10个ERM选出的角度可能不稳定测试误差明显高于0.3。随着样本量增大测试误差逐渐接近0.3。逼近速度在样本量较小时增快随后变缓这与 (\frac{1}{\varepsilon^2}) 的样本复杂度曲线形状一致。这就是不可知PAC学习在实践中的体现ERM在有限假设类上虽然没有找到完美分类器但确实在朝最优分类器收敛。6. 运行结果与效果验证上面的实验可以用输出结果判断是否成功如果每个样本量下运行多次后平均误差稳定在0.30左右说明ERM在接近最优假设。如果样本量很小如10平均误差明显高于0.35不需要担心这是样本不足导致的正常波动。如果样本量到了1000平均误差仍然高于0.35则说明代码或候选角度范围有问题。建议先跑sample_complexity_finite函数确认理论样本数与实验样本量在同一量级。比如当 (M60, \varepsilon0.1, \delta0.05) 时理论上需要几百个样本。实验中的样本量覆盖10到1000正好可以看到“不足”和“足够”两个阶段。如果运行失败按下面顺序依次检查是否安装了numpy和matplotlib。是否在虚拟环境中运行。代码缩进是否正确。如果np.random.default_rng报错需要numpy版本在1.17以上。7. 常见问题与排查思路问题现象可能原因排查方式解决方案样本量增大但测试误差不下降标签噪声过大最优风险本身很高计算训练集标签翻转比例用无噪声数据对比确认是否是噪声导致的理论下界ERM在样本小时非常不稳定训练样本太少候选假设过多打印每个角度的经验误差观察是否有多解增加样本量或减少候选角度M测试误差始终高于理论最优测试集中的噪声导致无法达到零误差设置 noise0 运行实验如果 noise0 时误差接近0说明代码正确运行需要很长时间候选角度过多或trials过大降低M和trials观察趋势先用 M20, trials10 跑通再加大这些问题的共同核心是不可知PAC只能保证“接近最优”不能保证“达到最优”。实验里看到误差停在0.3附近不是模型坏了而是问题本身的最优风险就是0.3。8. 从理论到工程这些结论对实际项目意味着什么理论结论看起来和“调参、训练、上线”的日常相隔很远但仔细想想它其实在解释很多工程现象。第一模型容量的选择决定了“假设类”的大小。在有限假设空间里ERM有明确的泛化界但如果把假设类无限扩大比如不加限制地使用超大规模神经网络VC维很大样本复杂度也会变得非常大。这时就需要依赖隐式正则化、数据增强、预训练等手段等效地缩小假设类。第二验证集的本质是“在更大的假设类上做ERM”。如果你把验证集反复用于模型选择其实相当于把候选模型集合扩大最终选择的模型可能过度拟合验证集。这是为什么需要单独的测试集也是为什么嵌套交叉验证更可靠的原因。第三噪声并不是“坏数据”那么简单。在不可知PAC框架下噪声决定了最优风险的下界。即使把模型调到最好误差也不可能低于数据本身的噪声水平。因此当线上表现接近某个平台期时与其一味调模型不如回头检查数据标注质量和特征区分度。第四ERM最优并不意味着“训练误差最小就一定最好”。注意最优性成立的前提是固定假设类并且样本量足够。如果样本量不足ERM依然可能过拟合。实际工程中样本量、模型容量和正则化需要一起考虑。这些都是不可知PAC理论给我们的工程启示它没有给出一个神奇的算法却给出了判断算法是否可靠的标尺。9. 总结与后续学习方向这篇文章从头梳理了不可知PAC学习的最核心结论不可知设定不假设存在完美函数只要求逼近最优假设。经验风险最小化在有限假设类上是最优的不可知PAC算法。样本复杂度为 (O((\ln|\mathcal{H}|\ln(1/\delta))/\varepsilon^2))比可实现设定多付出 (1/\varepsilon) 的代价。通过带噪声数据的实验可以看到ERM确实在样本量增加时逼近最优风险。如果还想继续深入可以先从两个方向入手。一是学习VC维与泛化误差界的推导理解为什么“假设类复杂度”会进入样本复杂度公式。二是阅读Valiant的PAC学习原始论文和Vapnik的统计学习理论相关章节了解理论结果成立的基础假设。理解不可知PAC之后再去看Boosting、正则化、迁移学习等话题时你会更容易判断一个方法在什么条件下有效在什么条件下只是经验上的“碰巧有效”。
返回列表