超参数调节概览

本页面描述了超参数调节涉及到的概念,超参数调节是 AI Platform Training 提供的自动模型增强功能。超参数调节利用 Google Cloud 的处理基础架构在训练模型时测试不同的超参数配置。它可以为超参数提供优化值,从而最大限度地提高模型的预测准确率。

什么是超参数?

超参数包含监管训练过程本身的数据。

在您的训练应用训练模型时,会处理三类数据:

  • 您的输入数据(也称为训练数据)是一种记录集合,其中的每条记录(实例)都包含对于您的机器学习问题至关重要的特征。此数据用于在训练过程中配置模型,以准确地预测类似数据的新实例。但是,输入数据中的值永远不会直接成为模型的一部分。

  • 模型的参数是您选定的机器学习技术用于调整数据的变量。例如,深度神经网络 (DNN) 由处理节点(神经元)组成,每个处理节点都具有在数据通过网络时对数据执行的操作。在您的 DNN 经过训练后,每个节点都带有一个权重值,告知模型该节点对最终预测的影响程度。这些权重值是模型参数的一个示例。从许多方面来看,模型的参数本身也是模型 - 它们将您的特定模型与处理类似数据的同类其他模型区分开来。

  • 超参数是管理训练过程本身的变量。例如,设置深度神经网络的部分工作是决定在输入层与输出层之间要使用多少个隐藏的节点层,以及每层应该使用多少个节点。这些变量与训练数据没有直接关系。它们属于配置变量。 请注意,参数在训练作业执行期间会发生变化,而超参数在作业执行期间通常保持不变。

您的模型参数由训练过程进行优化(也可以说“调节”):您通过操控模型来运行数据,将所得到的预测与各数据实例的实际值比较,评估准确性,并进行调节,直至找到最佳值为止。超参数通过您的整个训练作业的运行进行调节,它会关注聚合准确度并做出相应调整。在两种情况下,您都要修改模型的组成,以便找到最佳组合来处理您的问题。

如果没有 AI Platform Training 超参数调节等自动化技术,您需要在非常多次的训练运行过程中手动调节超参数,才能使其达到最优值。超参数调节使确定最佳超参数设置的过程更容易、不繁琐。

超参数调节的工作原理

超参数调节通过在单个训练作业中运行多次试验来实现。每次试验都会完整执行一次您的训练应用,使用由您选定的超参数以及在您指定的限制范围内设置的超参数值。AI Platform Training 训练服务会跟踪每次试验的结果,并针对后续试验进行调整。在作业完成后,您可以根据指定标准获得所有试验的摘要以及最有效的值配置。

超参数调节需要在 AI Platform Training 训练服务与您的训练应用之间进行明确通信。您的训练应用定义了模型所需的全部信息。 您必须定义要调节的超参数(变量),以及每个超参数的目标值。

如需了解 AI Platform Training 如何使用贝叶斯优化进行超参数调节,请参阅博客文章:使用贝叶斯优化在 Cloud Machine Learning Engine 中进行超参数调节

除了贝叶斯优化之外,AI Platform Training 也会优化超参数调节作业。如果您正在针对类似模型进行超参数调节,从而仅更改目标函数或添加新的输入列,则 AI Platform Training 可以随着时间的推移而实现改进,使超参数调节更加有效。

什么超参数调节优化

超参数调节可以优化单个目标变量(也称为超参数指标)。通过评估过程计算得出的模型准确度就是一项常见的指标。指标必须是数字值,您可以指定是否要调节模型以最大化或最小化指标。

使用超参数调节启动作业时,可以为超参数指标指定名称。这是您为添加到训练应用的标量摘要指定的名称。

指标的默认名称是 training/hptuning/metric。我们建议您指定自定义名称。唯一的功能区别在于,如果您使用自定义名称,则必须在作业请求的 HyperparameterSpec 对象中设置 hyperparameterMetricTag 值,使其与您选择的名称匹配。

AI Platform Training 如何获取您的指标

对于 TensorFlow 模型,AI Platform Training 服务会监视由您的训练应用生成的 TensorFlow 摘要事件并检索指标。如果您的模型是使用其他框架构建的或者它使用自定义容器,则需要使用 cloudml-hypertune Python 文件包将训练指标报告给 AI Platform Training。

超参数值流

如果不使用超参数调节,您可以在训练应用中通过自己喜爱的任何方法设置超参数。例如,您可以将命令行参数传递给主应用模块来配置超参数,或者在配置文件中将超参数提供给应用。

使用超参数调节时,您必须使用以下过程设置用于调节的超参数值:

  • 在主训练模块中为每个经过调节的超参数定义命令行参数。

  • 使用这些参数中传递的值,在应用的 TensorFlow 代码中设置相应的超参数。

使用超参数调节配置训练作业时,可以定义要调节的每个超参数、其类型以及要尝试的值范围。使用与主模块中定义的相应参数相同的名称标识每个超参数。训练服务包括运行应用时使用这些名称的命令行参数。

选择要调节的超参数

关于应如何选择要调节的超参数,可以提供的普遍性建议少之又少。如果您对自己所使用的机器学习技术有经验,那么可能十分了解其超参数的行为方式。您也可以在机器学习社区中找到建议。

无论您作出怎样的选择,了解其含义都很重要。您选择调节的每个超参数都有可能导致成功的调节作业所需的试验次数增加。当您在 AI Platform Training 上训练时,您需要根据作业的持续时间付费;如果您能谨慎选择要调节的超参数,则可以降低训练模型所需的时间和成本。

超参数类型

作业参考文档中列出了支持的超参数类型。 在 ParameterSpec 对象中,您可以指定每个超参数的类型以及相关的值范围,如下表所示:

类型 值范围 值数据
DOUBLE minValuemaxValue 浮点值
INTEGER minValuemaxValue 整数值
CATEGORICAL categoricalValues 类别字符串列表
DISCRETE discreteValues 按升序排列的值列表

超参数扩缩

您可以指定要在超参数上执行的扩缩类型。推荐对 DOUBLE 和 INTEGER 类型执行扩缩。可用的扩缩类型如下:

  • UNIT_LINEAR_SCALE
  • UNIT_LOG_SCALE
  • UNIT_REVERSE_LOG_SCALE

搜索算法

您可以在 HyperparameterSpec 对象中指定搜索算法。 如果您不指定算法,则您的作业将使用默认的 AI Platform Training 算法,它通过在参数空间内执行更有效的搜索,推动参数搜索找到最佳解决方案。

可用的值包括:

  • ALGORITHM_UNSPECIFIED:与未指定搜索算法时的行为方式相同。AI Platform Training 使用默认算法,该算法运用贝叶斯优化来搜索可能的超参数值空间,从而为您的超参数集提供最有效的技术。

  • GRID_SEARCH:在可行空间内执行简单的网格搜索。如果您要指定的试验次数超过可行空间中的点数,则此选项特别有用。这种情况下,如果您未指定网格搜索,AI Platform Training 默认算法可能会生成重复的建议。要使用网格搜索,所有参数都必须是 INTEGERCATEGORICALDISCRETE 类型。

  • RANDOM_SEARCH:在可行空间内执行的简单随机搜索。

后续步骤