『机器学习』机器学习验证集为什么不再有新意?( 二 )


需要注意的是:虽然损失可以根据数据和模型参数显式计算 , 但损失与模型超参数之间联系更不直接 。 如果你对此感到困惑 , 不妨回顾下生物学家使用适应度曲面( Fitness Landscapes)将繁殖成功作为遗传因素的函数 。 必要时你可将超参数函数(和数据)的损失和“模型适应度曲面”的损失 , 视作相同的 。
现在要意识到的关键是 , 每个数据集分区都会有独立的损失曲面 , 而训练集、验证集和测试集的损失曲面完全不同 。 如果数据已经被很好地分割 , 那么每一组数据就都是一个有代表性但不相同的样本 。
最重要的是 , 所有现有数据的损失曲面与真实环境中的潜在“总体”数据的损失曲面不同 。 我们之所以同时需要验证集和测试集 , 是因为如果随着时间的推移验证集确实泄漏了信息 , 那么我们仍需要一些数据来无偏估计模型在真实环境中的性能 。
一种考虑超参数调整的方法是 , 将遍历验证集数据的损失曲面作为超参数函数 。 让我们从假设一个“理想”曲面来开始建立直觉 。
二、面向心理模型:假设独立的超参数 对于理想的损失曲面 , 超参数当然是“独立的” , 意思是超参数与损失的之间没有相互作用项 。 这类函数的等高线不会对角突出 , 如下图所示:
『机器学习』机器学习验证集为什么不再有新意?
本文插图
这类的损失曲面之所以理想 , 是因为在处理它们时 , 可以将调整许多超参数的问题分解为一次单独调整一个超参数 。 由于任意一个超参数的最佳值与其他超参数无关 , 因此我们可以按顺序而不是并行地进行超参数调整 。
换句话说 , 就是将每个超参数视为一个旋钮 。 我们要做的就是不断调整每个特定旋钮 , 直到找到最佳位置 。
然后关联每个旋钮 , 就可以得到损失曲面的投影 。 我们的这部分函数将只有一个自变量:正在不断调整的超参数 。
『机器学习』机器学习验证集为什么不再有新意?
本文插图
这就是变得有趣的地方:回想一下 , 每个数据集都有自己的损失曲面 。 现在想象在调节的每个旋钮之后叠加这些函数的投影 。 然后让我们选择用于确定最佳超参数值的验证数据的损失曲面 , 和全部总体数据的假设损失曲面 , 它是我们期望的模型最优结果 , 也是测试集的估计(如果采样正确) 。
当我们根据验证集数据每次都将旋钮调至最佳值后 , 会发生什么呢?
可能的结果是验证集和“总体”损失曲面不太一致 。 当每次我们调整一个超参数值使验证集的损失曲面达到峰值时 , 我们可能已经越过“总体”损失曲面的峰值 。 调整得越多 , 越过的峰值就越多 。 这将导致验证集和实际性能(由测试集估计)之间的差距越来越大 。
『机器学习』机器学习验证集为什么不再有新意?
本文插图
就像这样!这就是验证集会变得过时和泄漏信息的原因 , 或者至少是一种有用的思考方式 。
在这里 , 特别细心的读者可能会问:“如果验证和总体损失曲面没有全部重合 , 那为什么峰值的重合要少于其他点的重合呢?”这是一个很好的问题 , 并且开始测试我们开发的心理模型的局限性 。
为了回答这个问题 , 考虑单个超参数的验证性能 。 现在 , 将目标函数的每个值都视为获得了来自泛化特征和验证集数据异常的贡献 。
随着获得更多的最优值 , 每一个部分做出贡献的机会就会增加 。 为了在不降低测试集和真实环境性能的情况下提升验证性能 , 要求提高验证性能的贡献只来自泛化特征部分 。
作为反馈 , 在这里向大家提出以下问题:如果你要优化的一个超参数实际上不能从数据(例如 random_state)中学习泛化特征 , 针对这种情况优化验证损失会产生什么影响?


推荐阅读