参数调整

与训练和评估模型相似,LibCity向研究者提供了一个脚本hyper_tune.py来自动搜索超参数。这个脚本是基于第三方开源库Ray Tune的实现。

run_model.py相同,hyper_tune.py也提供了一系列命令行参数,允许使用者来调整实验配置。除了run_model.py提供的命令行指令参数,hyper_tune.py也支持了下列独有参数。

  • space_file:指定超参数搜索空间的配置文件,默认为None

  • scheduler:将在ray.tune.run中使用的试验调度器, 默认值为FIFO,目前,LibCity 支持FIFOASHAMedianStoppingRule。(试验是从搜索空间中采样一次接着进行训练和评估。)

  • search_alg:将被用在ray.tune.run的搜索算法,默认值为BasicSearch。目前, LibCity支持BasicSearchBayesOptSearchHyperOpt。 LibCity 将使用损失函数作为搜索指标。

  • num_samples:从超参数空间的取样次数,默认值为5。

  • max_concurrent:同时运行试验的最大数,默认值为1。

  • cpu_per_trial:每次试验所分配的cpu数量,默认值为1。

  • gpu_per_trial:每次试验所分配的gpu数量,默认值为1。

    task, model, dataset, space_file 这三个参数必须在命令行中指定。例如,你可以按照下方格式运行超参数调整:

    python hyper_tune.py --task [task_name] --model=[model_name] --dataset=[dataset_name] --space_file=[file_name]
    

空间文件

空间文件应该使用JSON文件格式储存。空间文件的内容是一个字典,其键为参数名,其值为空间描述变量。

空间描述变量由空间类型和该类型对应的约束参数组成。支持的空间类型及其对应的约束参数如下:

  • uniform:取样空间是均匀分布的实数空间。

  • lower: 均匀分布的下限。

    • upper:均匀分布的上限。

  • randn:取样空间是正态分布的实数空间。

  • mean: 正态分布的数学期望。

    • sd: 正态分布的标准差。

  • randint:取样空间是均匀分布的整数空间。

  • lower: 均匀分布的下限(inclusive)。

    • upper: 均匀分布的上限 (exclusive)。

  • choice: 搜索空间是一组离散的分类变量的集合,超参数将从集合中随机选择。

    • list: 离散的分类变量的集合。

  • grid_search: 搜索空间是离散的分类变量。参数选择将采取网格搜索的方法,遍历所有可能的组合。

    • list: 离散的分类变量的集合。

一个空间文件的例子如下:

{
  "beta": {
    "type": "uniform",
    "lower": 0.1,
    "upper": 10.0
  },
  "learning_rate": {
    "type": "choice",
    "list": [0.01, 0.005, 0.001]
  }
}