发布日期:2024 年 7 月 23 日
作者: Ivan Belcic、Cole Stryker
超参数调整是指确定和选择用于训练机器学习模型的最佳超参数。如果操作得当,超参数调整可使机器学习模型的损失函数最小化,这意味着模型的性能会被训练得尽可能精确。
超参数调整是一种实验性实践,每次迭代都要测试不同的超参数值,直到确定最佳值。此过程对于模型的性能至关重要,因为超参数控制着模型的学习过程。Neural Networks 中的神经元数量、生成式 AI 模型的学习率和支持向量机的内核大小都是超参数的例子。
超参数调整得好,意味着机器学习模型根据其目标任务的衡量标准,整体性能更强。因此,超参数调整也被称为超参数优化。
超参数与数据科学中的模型参数之间的主要区别在于,模型是从所摄取的训练数据集中学习或估计参数,而数据科学家则是在训练过程开始之前就为模型算法定义超参数。模型在工作过程中不断更新参数,而模型超参数的最佳值则是提前确定和设定的。
超参数调整之所以很重要,是因为能为模型的结构、训练效率和性能奠定基础。最优超参数配置可使得模型在实际应用中发挥出强大性能。大语言模型运维 (LLMOps) 强调的是良好调整的效率方面,重点是最大限度降低计算能力要求。
超参数调整的目的是平衡偏差与方差之间的权衡。偏差是模型预测与现实之间的偏差。调整不足或拟合不足的模型无法辨别数据点之间的关键关系,也就无法得出准确性能所需的结论。
方差是模型对新数据的敏感度。可靠的模型在从训练数据迁移到其他数据集时,应能提供一致的结果。然而,方差较大的模型过于复杂——它们与原始训练数据集过度拟合,难以适应新数据。
偏差小的模型是准确的,而方差小的模型是一致的。良好的超参数调整可以优化这两方面,以创建最合适的模型,同时在训练过程中最大限度地提高计算资源效率。
每种机器学习算法都倾向于使用各自的超参数集,而且没有必要在所有情况下都将其最大化。有时,在调整超参数时采用更保守的方法会带来更好的性能。
Neural Networks 的灵感来源于人类的大脑,由相互发送信号的互连节点组成。一般来说,以下是 Neural Networks 模型训练中最常用的一些超参数:
学习率设定了模型在每次迭代中调整参数的速度。这些调整被称为 步骤。高学习率意味着模型的调整速度更快,但也存在性能不稳定和数据漂移的风险。同时,虽然低学习率更耗时,需要的数据也更多,但它也使数据科学家更有可能找出模型的最小损失。 梯度下降 优化是一个需要设定学习率的训练指标的例子。
学习率衰减设定了网络学习率随时间下降的速率,从而使模型能够更快地学习。算法从初始激活到具备理想性能的训练过程称为收敛。
批量大小设定了模型在更新参数前要计算的样本量。它对训练过程的计算效率和准确性都有重要影响。就其本身而言,批量大小越大,整体性能越差,但调整学习率和批量大小可以减少这种损失。
Neural Networks 中的隐藏层的数量决定了其深度,从而影响其复杂性和学习能力。层数越少,模型越简单、速度越快,但层数越多(例如深度学习网络),输入数据的分类效果就越好。要从所有可能的组合中确定最佳超参数值,就必须在速度和准确性之间做出权衡。
每层节点或神经元的数量决定了模型的宽度。每层的节点或神经元越多,模型的宽度就越大,描述数据点之间复杂关系的能力就越强。
动量是指模型更新参数的方向与之前迭代的方向相同,而不是相反的程度。大多数数据科学家一开始都会降低动量的超参数值,然后根据需要向上调整,使模型在获取训练数据时保持正确的方向。
Epochs 是一个超参数,用于设定模型在训练过程中接触整个训练数据集的次数。更多的接触可以提高性能,但也存在过度拟合的风险。
激活函数在模型中引入了非线性,使模型能够处理更复杂的数据集。非线性模型可以泛化并适应更多数据类型。
支持向量机 (SVM) 是一种机器学习算法,专门用于数据分类、回归和异常值检测。它有自己的基本超参数:
C 是模型作为数据分类器时可接受的误差范围与由此产生的误差数量之间的比率。较低的 C 值可以建立一个平滑的决策边界,具有更高的容错性和更通用的性能,但也存在数据分类错误的风险。同时,高 C 值可以创建一个整齐的决策边界,从而获得更准确的训练结果,但也有可能造成过度拟合。
核函数是一种函数,用于确定数据点之间关系的性质,并据此将数据点分成若干组。数据点显示的关系会因使用的核函数不同而有所差异,这会大大影响 SVM 模型的整体性能。线性、多项式、径向基函数 (RBF) 和 sigmoid 是一些最常用的核函数。线性核函数更简单,最适合用于易分离的数据,而非线性核函数更适合更复杂的数据集。
Gamma 设定了支持向量对决策边界的影响程度。支持向量是最接近超平面的数据点:数据组之间的边界。数值越大,附近向量的影响就越大,而数值越小,远处向量的影响就越小。设置过高的伽玛值会导致过度拟合,而过低的伽玛值则会模糊决策边界。
learning_rate 类似于 Neural Networks 使用的学习率超参数。此功能可控制每轮训练期间的修正程度。潜能值从 0 到 1 不等,默认值为 0.3。
n_estimators 用于设置模型中树的数量。此超参数在原始 XGBoost 中称为 num_boost_rounds,而流行的 Python API scikit-learn 引入了 n_estimators 这一名称。
max_depth 决定了 Decision Trees 的结构,设定了从 Decision Trees 到每个叶子(最终分类器)的最大节点数。节点越多,数据分类就越细微,而树越小,就越容易避免过度拟合。
min_child_weight 是生成一棵新树所需的最小权重,即给定类对于整个模型训练过程的重要性。最小权重越低,创建的树就越多,但可能会出现过拟合;权重越高,就需要越多数据来拆分树,从而降低复杂性。
subsample 用于设置每轮训练期间使用的数据样本百分比,colsample_bytree 则用于设定树构建中使用的特征百分比。
超参数调整以目标函数为中心,目标函数用于分析一组或一元组超参数并计算预计损失。最佳超参数调整可根据所选指标最大限度地减少损失。通过交叉验证对结果进行确认,交叉验证可以衡量结果对特定训练实例之外的其他数据集的泛化程度。
数据科学家可以使用多种超参数调整方法,每种方法都有各自的优缺点。超参数调整可以手动进行,也可以作为 AutoML(自动机器学习)策略的一部分自动进行。
网格搜索是一种全面详尽的超参数调整方法。数据科学家确定了每个超参数的可能值后,网格搜索会针对这些离散超参数值的每种可能配置构建模型。这些模型会经过性能评估和相互比较,最终选出最佳模型进行训练。
这样一来,网格搜索就与暴力破解 PIN 很相似:输入每种可能的数字组合,直到找到正确序列。虽然网格搜索确实能让数据科学家考虑到超参数空间中的所有可能配置,但这种方法效率低下且会消耗大量计算资源。
随机搜索与网格搜索的不同之处在于,数据科学家为每个超参数提供的是统计分布,而不是离散值。随机搜索从每个范围抽取样本,并为每个组合构建模型。在多次迭代的过程中,模型之间会相互权衡,直到找到最佳模型。
在超参数搜索空间包含较大分布的情况下,随机搜索比网格搜索更可取。因为测试每个离散值需要花费的精力实在太多。随机搜索算法可以在更短的时间内返回与网格搜索相当的结果,但不能保证找到最优超参数配置。
贝叶斯优化是一种基于序列模型的优化 (SMBO) 算法,其中每次测试迭代都会改进下一次测试的采样方法。网格搜索和随机搜索可以同时执行,但每个测试都独立进行,数据科学家无法利用所学知识来指导后续测试。
根据先前的测试结果,贝叶斯优化方法从概率上选择了一组新的超参数值,这组参数值可能会带来更好的结果。概率模型被称为原始目标函数的代理模型。由于代用模型的计算效率很高,因此通常在每次执行目标函数时都会对其进行更新和改进。
代理参数在预测最佳超参数方面的能力越强,过程就越快,所需的目标函数测试次数就越少。这使得贝叶斯优化比其他方法更有效率,因为没有时间浪费在不合适的超参数值组合上。
用统计学方法确定结果(本例中为最佳模型性能)与一组变量之间的关系,这个过程称为回归分析。高斯过程就是一种深受数据科学家喜爱的 SMBO。
超频道(链接位于 ibm.com 以外)于 2016 年推出,旨在通过截断使用无法提供强大结果的训练配置的使用并向积极配置分配更多资源来改进随机搜索。
这种“提前停止”是通过连续减半来实现的,即在每一轮训练后去掉性能最差的一半,从而减少配置池的数量。每次迭代的前 50% 都会进入下一次迭代,直到剩下一个最佳超参数配置。
新一代企业级开发平台现已上线,专供 AI 构建器训练、验证、调整和部署 AI 模型
深入了解 watsonx 平台上的 IBM 基础模型库,从容自信地为您的业务扩展生成式 AI。
IBM Granite 是一系列专为企业构建的人工智能 (AI) 模型,从头开始设计,有助于确保 AI 驱动型应用程序的可信度和可扩展性。开源 Granite 模型现已上市。