超参数优化
Ludwig 支持使用 Ray Tune 或本地执行器进行超参数优化。
超参数优化策略在 Ludwig 配置中指定,并使用 ludwig hyperopt
命令运行。配置中的每个参数都可以使用超参数优化进行调优。
超参数优化配置¶
Ludwig 配置中的大多数参数或嵌套参数都可以进行优化,包括 input_features
(输入特征)、output_features
(输出特征)、combiner
(组合器)、preprocessing
(预处理)、trainer
(训练器)和 defaults
(默认值)。支持的类型有 float
(浮点型)、int
(整型)和 category
(类别型)。
要启用超参数优化,请在 config.yaml 的顶层添加 hyperopt
字典。hyperopt
部分声明要优化的参数、搜索策略和优化目标。
hyperopt:
parameters:
title.num_filters:
space: choice
categories: [128, 256, 512]
training.learning_rate:
space: loguniform
lower: 0.0001
upper: 0.1
combiner.num_fc_layers:
space: randint
lower: 2
upper: 6
goal: minimize
metric: loss
默认超参数优化参数¶
除了为单个输入或输出特征(如上面示例中的 title
特征)定义超参数优化参数外,还可以为整个特征类型指定默认参数(例如,用于数据集中所有文本特征的编码器)。这些参数将遵循与 Ludwig 配置的 defaults section(默认值部分)相同的约定。这在数据集具有大量特征且您不想为每个特征单独定义参数的情况下特别有用。
默认超参数优化参数按顺序使用以下由 .
分隔的关键字定义
defaults
: 用于指示特征级别参数的默认关键字feature_type
: Ludwig 支持的任何输入或输出特征类型。可以是文本、数值、类别等。请参阅支持的特征类型完整列表 此处subsection
:preprocessing
(预处理)、encoder
(编码器)、decoder
(解码器)或loss
(损失),这是可以通过 Ludwig 默认值部分修改的 4 个部分之一parameter
: 属于subsection
的有效参数。例如,most_common
是text
特征类型preprocessing
子部分的有效参数。
对于每次超参数优化试验,将从参数空间中采样一个值,并将其应用于该特征类型的输入特征(与 preprocessing
或 encoder
相关的参数)或输出特征(与 decoder
或 loss
相关的参数)。此外,如果为单个特征定义的参数(如 title.preprocessing.most_common
)与默认参数(如 defaults.text.preprocessing.most_common
)共享相同的特征类型和参数,并且两个参数都在 Ludwig 超参数优化配置中定义,则前者将优先于后者。
...
hyperopt:
parameters:
title.num_filters:
space: choice
categories: [128, 256, 512]
defaults.text.preprocessing.most_common:
space: choice
categories: [100, 500, 1000]
goal: minimize
metric: loss
...
在本例中,defaults.text.preprocessing.most_common
是一个默认参数。这里
defaults
用于表示一个默认超参数优化参数text
指的是文本输入特征组,因为它是一个与preprocessing
相关的参数preprocessing
指的是 Ludwig 默认值部分中的文本预处理子部分。这意味着此参数将修改所有文本输入特征的预处理most_common
是preprocessing
中我们想要修改所有文本输入特征的参数
嵌套的 Ludwig 配置参数¶
Ludwig 还扩展了超参数优化参数的范围,以支持由部分或完整的 Ludwig 配置节块组成的参数选择。这允许用户在一个 Ludwig 配置集上进行搜索,而不是需要单独指定配置参数并在所有参数组合上进行搜索。
要提供代表 Ludwig 配置子部分的参数,可以使用 .
键名。
例如,可以定义如下所示的超参数优化搜索空间,并采样部分 Ludwig 配置
hyperopt:
parameters:
.: space: choice
categories:
- combiner: # Ludwig config subsection 1
type: tabnet
trainer:
learning_rate: 0.001
batch_size: 64
- combiner: # Ludwig config subsection 2
type: concat
trainer:
batch_size: 256
trainer.decay_rate:
space: loguniform
lower: 0.001
upper: 0.1
.
参数定义了具有两个选择的嵌套超参数优化参数。将对这些选择进行采样,并根据选择哪个选择来更新每次试验的 Ludwig 配置。
上述配置将创建如下所示的超参数优化样本
# Trial 1
combiner:
type: tabnet
trainer:
learning_rate: 0.001
batch_size: 64
decay_rate: 0.02
# Trial 2
combiner:
type: tabnet
trainer:
learning_rate: 0.001
batch_size: 64
decay_rate: 0.001
# Trial 3
combiner:
type: concat
trainer:
batch_size: 64
decay_rate: 0.001
运行超参数优化¶
使用 ludwig hyperopt
命令运行超参数优化。
ludwig hyperopt --dataset reuters-allcats.csv --config hyperopt_config.yaml
有关超参数搜索和执行选项的完整参考,请参阅 Ludwig 配置指南的超参数优化页面。