在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
中文名超参数外文名hyperparameter归属学科机器学习解 释在开始学习过程之前设置值的参数相 关优化问题领 域自动控制
定义
在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数。 相反,其他参数的值通过训练得出。
超参数:
- 定义关于模型的更高层次的概念,如复杂性或学习能力。
- 不能直接从标准模型培训过程中的数据中学习,需要预先定义。
- 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定
超参数的一些示例:
- 树的数量或树的深度
- 矩阵分解中潜在因素的数量
- 学习率(多种模式)
- 深层神经网络隐藏层数
- k均值聚类中的簇数
超参数的优化问题
学习率可能是最重要的超参数。 超参数优化或模型选择是为学习算法选择一组最优超参数时的问题,通常目的是优化算法在独立数据集上的性能的度量。 通常使用交叉验证来估计这种泛化性能。 超参数优化与实际的学习问题形成对比,这些问题通常也被转化为优化问题,但是优化了训练集上的损失函数。 实际上,学习算法学习可以很好地建模/重建输入的参数,而超参数优化则是确保模型不会像通过正则化一样通过调整来过滤其数据。
网格搜索
执行超参数优化的传统方法是网格搜索或参数扫描,这仅仅是通过学习算法的超参数空间的手动指定子集的详尽搜索。 网格搜索算法必须由某些性能度量指导,通常通过训练集合 上的交叉验证或对被保留验证集进行评估来衡量。
由于机器学习者的参数空间可能包括某些参数的实值或无界值空间,因此在应用网格搜索之前可能需要手动设置边界和离散化。
贝叶斯优化
贝叶斯优化包括从超参数值到在验证集上评估的目标的功能的统计模型。直观上,该方法假设有一些平滑但嘈杂的功能,作为从超参数到目标的映射。在贝叶斯优化中,一个目的是收集观察结果,以便尽可能少地显示机器学习模型的次数,同时尽可能多地显示关于该功能的信息,特别是最佳位置。贝叶斯优化依赖于假设一个非常普遍的先验函数,当与观察到的超参数值和相应的输出结合时,产生函数分布。该方法通过迭代地选择超参数来观察(实验运行),以抛售(结果最不确定的超参数)和利用(预期具有良好结果的超参数)的方式。实际上,贝叶斯优化已经被证明 ,因为在实验的质量运行之前,能够对网格搜索和随机搜索进行更少的实验获得更好的结果。
随机搜索
由于网格搜索是一种穷尽且潜在昂贵的方法,因此已经提出了几种替代方案。 特别地,已经发现,简单地对参数设置进行固定次数的随机搜索,比在穷举搜索中的高维空间更有效。 这是因为事实证明,一些超参数不会显着影响损失。 因此,随机分散的数据给出了比最终不影响损失的参数的详尽搜索更多的“纹理”数据。
基于梯度的优化
对于特定的学习算法,可以计算相对于超参数的梯度,然后使用梯度下降优化超参数。 这些技术的第一次使用集中在神经网络 从那时起,这些方法已经扩展到其他模型,如支持向量机 或逻辑回归 。
超参数调节概览
本页面描述了超参数调节涉及到的概念,超参数调节是由 AI Platform 提供的自动模型增强功能。超参数调节利用 Google Cloud Platform 的处理基础架构,在训练模型时测试不同的超参数配置。它可以为超参数提供优化值,从而最大限度地提高模型的预测准确率。
什么是超参数?
超参数包含监管训练过程本身的数据。
在您的训练应用训练模型时,会处理三类数据:
- 您的输入数据(也称为训练数据)是一种记录集合,其中的每条记录(实例)都包含对于您的机器学习问题至关重要的特征。此数据用于在训练过程中配置模型,以准确地预测类似数据的新实例。但是,输入数据中的值永远不会直接成为模型的一部分。
- 模型的参数是您选定的机器学习技术用于调整数据的变量。例如,深度神经网络 (DNN) 由处理节点(神经元)组成,每个处理节点都具有在数据通过网络时对数据执行的操作。在您的 DNN 经过训练后,每个节点都带有一个权重值,告知模型该节点对最终预测的影响程度。这些权重值是模型参数的一个示例。从许多方面来看,模型的参数本身也是模型 - 它们将您的特定模型与处理类似数据的同类其他模型区分开来。
- 超参数是管理训练过程本身的变量。例如,设置深度神经网络的部分工作是决定在输入层与输出层之间要使用多少个隐藏的节点层,以及每层应该使用多少个节点。这些变量与训练数据没有直接关系。它们属于配置变量。请注意,参数在训练作业执行期间会发生变化,而超参数在作业执行期间通常保持不变。
您的模型参数由训练过程进行优化(也可以说“调节”):您通过操控模型来运行数据,将所得到的预测与各数据实例的实际值比较,评估准确性,并进行调节,直至找到最佳值为止。超参数通过您的整个训练作业的运行进行调节,它会关注聚合准确度并做出相应调整。在两种情况下,您都要修改模型的组成,以便找到最佳组合来处理您的问题。
如果没有 AI Platform 超参数调节等自动化技术,您需要在非常多次的训练运行过程中手动调节超参数,才能使其达到最优值。超参数调节使确定最佳超参数设置的过程更容易、不繁琐。
超参数调节的工作原理
超参数调节通过在单个训练作业中运行多次试验来实现。每次试验都会完整执行一次您的训练应用,使用由您选定的超参数以及在您指定的限制范围内设置的超参数值。AI Platform 训练服务跟踪每次试验的结果,并针对后续试验进行调整。在作业完成后,您可以根据指定标准获得所有试验的摘要以及最有效的值配置。
超参数调节需要 AI Platform 训练服务与您的训练应用之间进行显式通信。您的训练应用定义了模型所需的全部信息。您必须定义要调节的超参数(变量),以及每个超参数的目标值。
如需了解 AI Platform 如何使用贝叶斯优化进行超参数调节,请阅读博文 使用贝叶斯优化在 Cloud Machine Learning Engine 中进行超参数调节。
除了贝叶斯优化之外,AI Platform 还可以优化超参数调节作业。如果您正在针对类似模型进行超参数调节,仅更改目标函数或添加新输入列,则 AI Platform 可以随着时间的推移而实现改进,使超参数调节更加有效。
超参数调节优化哪些方面
超参数调节可以优化单个目标变量(也称为超参数指标)。通过评估过程计算得出的模型准确度就是一项常见的指标。指标必须是数字值,您可以指定是否要调节模型以最大化或最小化指标。
使用超参数调节启动作业时,可以为超参数指标指定名称。这是您为添加到训练应用的标量摘要指定的名称。
指标的默认名称是 training/hptuning/metric。我们建议您指定自定义名称。唯一的功能区别在于,如果您使用自定义名称,则必须在作业请求的 HyperparameterSpec 对象中设置 hyperparameterMetricTag 值,以与您选择的名称匹配。
AI Platform 如何获取您的指标
您可能会注意到,本文档中并没有说明如何将超参数指标传递给 AI Platform 训练服务。这是因为该服务会监视您的训练应用生成的 TensorFlow 摘要事件并检索该指标。
超参数值流
如果不使用超参数调节,您可以在训练应用中通过自己喜爱的任何方法设置超参数。例如,您可以将命令行参数传递给主应用模块来配置超参数,或者在配置文件中将超参数提供给应用。
使用超参数调节时,您必须使用以下过程设置用于调节的超参数值:
- 在主训练模块中为每个经过调节的超参数定义命令行参数。
- 使用这些参数中传递的值,在应用的 TensorFlow 代码中设置相应的超参数。
使用超参数调节配置训练作业时,可以定义要调节的每个超参数、其类型以及要尝试的值范围。使用与主模块中定义的相应参数相同的名称标识每个超参数。训练服务包括运行应用时使用这些名称的命令行参数。
选择要调节的超参数
关于应如何选择要调节的超参数,可以提供的普遍性建议少之又少。如果您对自己所使用的机器学习技术有经验,那么可能十分了解其超参数的行为方式。您也可以在机器学习社区中找到建议。
无论您作出怎样的选择,了解其含义都很重要。您选择调节的每个超参数都有可能导致成功的调节作业所需的试验次数增加。当您在 AI Platform 上训练时,您需要根据作业的持续时间付费;如果您能谨慎选择要调节的超参数,则可以降低训练模型所需的时间和成本。
超参数类型
作业参考文档中列出了支持的超参数类型。在 ParameterSpec 对象中,您可以指定每个超参数的类型以及相关的值范围,如下表所示:
| 类型 | 值范围 | 值数据 |
|---|---|---|
DOUBLE |
minValue 和 maxValue |
浮点值 |
INTEGER |
minValue 和 maxValue |
整数值 |
CATEGORICAL |
categoricalValues |
类别字符串列表 |
DISCRETE |
discreteValues |
按升序排列的值列表 |
超参数扩缩
您可以指定要在超参数上执行的扩缩类型。推荐对 DOUBLE 和 INTEGER 类型执行扩缩。可用的扩缩类型如下:
UNIT_LINEAR_SCALEUNIT_LOG_SCALE-
搜索算法
您可以在 HyperparameterSpec 对象中指定搜索算法。如果您不指定算法,则您的作业将使用默认的 AI Platform 算法,通过在参数空间内执行更有效的搜索,推动参数搜索找到最佳解决方案。
可用的值包括: ALGORITHM_UNSPECIFIED:与未指定搜索算法时的行为方式相同。AI Platform 使用默认算法,该算法运用贝叶斯优化来搜索可能的超参数值空间,从而为您的超参数集提供最有效的技术。GRID_SEARCH:在可行空间内执行简单的网格搜索。如果您要指定的试验次数超过可行空间中的点数,则此选项特别有用。这种情况下,如果您未指定网格搜索,AI Platform 默认算法可能会生成重复的建议。要使用网格搜索,所有参数都必须是INTEGER、CATEGORICAL或DISCRETE类型。RANDOM_SEARCH:在可行空间内执行的简单随机搜索。
