历史文档

【历史文档】算子样例-自动超参搜索模块使用文档

由qxiao创建,最终由small_q 被浏览 254 用户

更新

本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明

新版量化开发IDE(AIStudio):

https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW

新版模版策略:

https://bigquant.com/wiki/doc/demos-ecdRvuM1TU

新版数据平台:

https://bigquant.com/wiki/doc/dai-PLSbc1SbZX

新版表达式算子:

https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS

新版因子平台:

https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5

\

使用场景

对于超参数的搜索在机器学习应用当中是非常常见的。正如我们之前已有的超参搜索模块中介绍的那样,对超参数的搜索本质上是对损失函数的优化,从而寻找整个问题的最优解的过程。对于超参数搜索的相关概念在这里不做过多的赘述,大家可以参考超参搜索模块中的相关介绍。

在之前的超参搜索模块里,最明显的短板就是参数的定义只能是离散的、无法设置停止搜索的条件,以及参数搜索性能较低。所以,此模块是建立在平台FaaS集群的基础之上进行自动地超参数搜索,用户只需要传入参数空间和停止条件即可对超参数进行更加详尽地搜索,拥有更卓越的性能和更灵活的搜索功能。

接下来我们会对相关模块使用进行详细的介绍。

模块介绍

模块概览

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}模块使用方式:将模块放在用户需要进行超参数搜索的模型画布内,并对此模块内相关参数定义和搜索方式进行定义,之后整体运行画布来执行超参数的搜索功能。

(该功能暂时仅对VIP用户开放)

模块详细设置

模块具有多种参数定义:

  • FaaS集群ID/并行模式/分布式机器数量/单机资源规格 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

    • FaaS集群ID:可选参数,填写已有集群ID,并且传入该参数的时候会覆盖下面的并行模式和资源规格等参数
    • 并行模式分为:单机和集群。单机模式指使用本地机器资源进行多进程任务运行;集群模式指使用集群上多机器进行并行任务运行
    • 分布式机器数量:设定集群模式中分布式任务运行时所起机器数量
    • 单机资源规格:设定集群模式中单个机器的资源规格
  • 超参数输入 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}在此部分对所需要进行搜索的超参数进行定义,比如图中所定义的是以特征'close_1/close_0'代入模型,需要搜索的超参数为m6模块(即stockranker训练模块)中的”树的数量“(搜索范围为5,10,20)和”叶节点数量“(搜索范围为5到10之间的整数);

    其中,FaasFunc是用于定义搜索数组的方法,所有可调用方法如下:

    "uniform": FaasFunc.uniform(-5, -1),  # Uniform float between -5 and -1
    "quniform": FaasFunc.quniform(3.2, 5.4, 0.2),  # Round to increments of 0.2
    "loguniform": FaasFunc.loguniform(1e-4, 1e-1),  # Uniform float in log space
    "qloguniform": FaasFunc.qloguniform(1e-4, 1e-1, 5e-5),  # Round to increments of 0.00005
    "randn": FaasFunc.randn(10, 2),  # Normal distribution with mean 10 and sd 2
    "qrandn": FaasFunc.qrandn(10, 2, 0.2),  # Round to increments of 0.2
    "randint": FaasFunc.randint(-9, 15),  # Random integer between -9 and 15
    "qrandint": FaasFunc.qrandint(-21, 12, 3),  # Round to increments of 3 (includes 12)
    "lograndint": FaasFunc.lograndint(1, 10),  # Random integer in log space
    "qlograndint": FaasFunc.qlograndint(1, 10, 2),  # Round to increments of 2
    "choice": FaasFunc.choice(["a", "b", "c"]),  # Choose one of these options uniformly
    "func": FaasFunc.sample_from(lambda spec: spec.config.uniform * 0.01), # Depends on other value
    "grid": FaasFunc.grid_search([32, 64, 128])  # Search over all these values
    
  • 评分函数 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}评分函数部分是用于定义超参数搜索的评价标准。此处模板是以StockRanker模板为例,超参数搜索的评价标准则是以m19模块(即回测模块)的结果中“sharpe”和“returns”,即最终评判哪一组超参数效果最好,是以这两个指标(或其中一个)为标准来判断的。

    当然,这里只是以回测模块为例,用户仍然可以以其他模块得到的结果为评判标准,比如因子分析模块、模型预测模块等等;

  • 优化目标 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}优化目标和上面的评分函数密不可分。其所需要填写的是用户在评分函数部分所定义的观测指标,比如此处填写的“sharpe”,即最终在评价超参数组性能时是以“sharpe”的结果作为标准;

  • 提前停止条件 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}提前停止类似于深度学习中对于callback函数定义的EarlyStopping,即在设定条件到达某个条件之后停止搜索;并且提前停止的选择条件也应以评分函数中所定义的方法为准;

  • 优化方向 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}优化方向的定义是指上述设置好的评分函数和优化目标以何种方向进行优化,max则为以最大化评分函数为目标,min则为最小化评分函数为目标;

  • 参数搜索算法 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

    此次自动超参搜索模块提供了更多种的参数搜索方法,其中包括之前已有的网格搜索和随机搜索之外,加入更强大的HyperOpt超参搜索;

    (后续还会持续更新迭代更多的调参方法)

    • 网格搜索:使用网格搜索的时候需要注意参数定义的方式需要以FaasFunc.grid_search()的方式来定义;并且在选择网格搜索之后无需再对搜索次数进行更改,会默认进行所有参数的遍历
    • 随机搜索:其搜索方式是在参数定义中随机选取参数来搜索,其搜索次数则为搜索次数中所填写的数字
    • HyperOpt超参优化:HyperOpt是现在该领域较为火热的一个基于分布式异步构成的超参搜索算法,用户可以通过此种方法达到在繁杂的超参数优化过程中自动获取最佳的超参数的目的,使用方式更简单搜索涵盖面更广;
  • 搜索次数 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}搜索次数设置为-1时表示不限制搜索次数,直到满足到提前停止的条件;当参数搜索算法选择为网格搜索时,该值默认不会执行;

  • 超参搜索停止时间 {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}同搜索次数,其作用是在时间(单位:秒)超过设定参数后停止搜索。

\

策略案例

网格超参搜索(集群运行)

https://bigquant.com/experimentshare/3d8e5e35fc25411ca9e8c686470c680b

\

标签

机器学习
评论
  • * 这个模块是找参数,“以特征'close_1/close_0'代入模型,这个参数有什么用? \
{link}