主要内容

平行的贝叶斯优化

并行优化

并行运行贝叶斯优化可以节省时间。在并行运行需要并行计算工具箱™。bayesopt对并行执行并行目标函数同时评估工人。

并行优化:

  • bayesopt——设置UseParallel名称-值参数真正的。例如,

    结果= bayesopt (var,有趣“UseParallel”,真正的);
  • 适应函数,设置UseParallel场的HyperparameterOptimizationOptions结构真正的。例如,

    Mdl = fitcsvm (X, Y,“OptimizeHyperparameters”,“汽车”,“HyperparameterOptimizationOptions”结构(“UseParallel”,真正的))

平行的贝叶斯算法

并行贝叶斯优化算法类似于串行算法中描述贝叶斯优化算法。的差异是:

  • bayesopt评估并行工人分配点,一般一个点。bayesopt在客户端计算,以确定哪些点分配。

  • bayesopt评估随机初始点,它选择点评估通过拟合高斯过程(GP)模型。适合一个GP模型虽然有些工人仍在评估点,bayesopt背景值,每一个点,仍然是一个工人。估算值的均值GP模型价值点评估,或其他指定的值bayesopt“ParallelMethod”名称-值参数。适合并行优化的功能,bayesopt使用默认的ParallelMethod估算值。

  • bayesopt分配一个点来评估,计算一个新的指向分配之前,它会检查是否太多工人闲置。活跃的工人是由阈值MinWorkerUtilization名称-值参数。如果有太多的工人闲置bayesopt分配随机点,选择统一在允许范围内,所有闲置劳动力。这个步骤使工人们活跃的更快,但是工人们随机点而不是安装点。如果闲置劳动力的数量不超过阈值,然后bayesopt选择一个点来评估和往常一样,通过拟合GP模型和最大化获取函数。

请注意

由于nonreproducibility平行的时机,平行贝叶斯优化不一定产生可重复的结果。

设置最佳的并行性能

适应函数没有特殊设置更好的并行性能。相比之下,几bayesopt设置可以帮助优化速度。

解算器选项

设置GPActiveSetSize选择一个较小的比默认值(300年)可以加速解决方案。成本是潜在的错误点bayesopt选择评估,因为GP模型的目标函数可以准确比更大的价值。设置选择一个较大的值会导致一个更精确的GP模型,但是需要更多的时间来创建模型。

设置ParallelMethod选项“max-observed”会导致bayesopt更广泛的搜索全局最优。这个选择可能会导致在更短的时间内更好的解决方案。然而,的默认值“clipped-model-prediction”往往是最好的。

设置MinWorkerUtilization选择一个较大的值会导致更高的并行的利用率。然而,这个设置会导致更多的完全随机的点被评估,从而导致不准确的解决方案。金宝搏官方网站一个较大的值,在这种情况下,取决于你有多少工人。默认值是地板(0.8 * N),在那里N是平行的工人的数量。的选项设置为一个较低的值可以给并行利用率较低,但随着更高质量的利益点。

将目标函数在工人

您可以将一个目标函数并行工人三种方式之一。一些有更好的性能,但需要更复杂的设置。

1。自动如果你给一个函数处理为目标函数,bayesopt将处理发送给所有的工人开始运行。例如,

负载电离层分裂= optimizableVariable (“分裂”[1100],“类型”,“整数”);minleaf = optimizableVariable (“minleaf”[1100],“类型”,“整数”);有趣= @ (params) kfoldLoss (fitctree (X, Y,“Kfold”5,“MaxNumSplits”params.splits,“MinLeaf”params.minleaf));结果= bayesopt(有趣,[分裂,minleaf],“UseParallel”,真正的);

这个方法是有效的,如果处理很小,或者如果你运行优化只有一次。然而,如果你计划多次运行优化,您可以使用另一个节省时间的两种技术。

2。平行的常数如果你计划多次运行的优化,节省时间,将目标函数的工人只有一次。这种技术尤其有效处理包含大量数据的函数。转移目标一旦通过设置函数句柄parallel.pool.Constant(并行计算工具箱)构造,在这个例子中。

负载电离层分裂= optimizableVariable (“分裂”[1100],“类型”,“整数”);minleaf = optimizableVariable (“minleaf”[1100],“类型”,“整数”);有趣= @ (params) kfoldLoss (fitctree (X, Y,“Kfold”5,“MaxNumSplits”params.splits,“MinLeaf”params.minleaf));C = copyFunctionHandleToWorkers(有趣的);其中回答= bayesopt (C[分裂,minleaf]“UseParallel”,真正的);results2 = bayesopt (C[分裂,minleaf]“UseParallel”,真的,“MaxObjectiveEvaluations”,50);results3 = bayesopt (C[分裂,minleaf]“UseParallel”,真的,“AcquisitionFunction”,“expected-improvement”);

在这个例子中,copyFunctionHandleToWorkers只向员工发送函数处理一次。

3所示。对工人产生了目标函数如果你有一个很大的数据发送到工人,可以避免加载数据在客户端使用spmd(并行计算工具箱)加载数据的工人。使用一个复合(并行计算工具箱)parallel.pool.Constant访问分布式目标函数。

% makeFun这个脚本的尽头spmd有趣= makeFun ();结束% ObjectiveFunction现在是一个组合。得到一个parallel.pool.Constant%,是指,没有复制到客户端:C = parallel.pool.Constant(有趣的);%你也可以用% C = parallel.pool.Constant (@MakeFun);%在这种情况下,你不使用spmd% bayesopt打电话,通过常数分裂= optimizableVariable (“分裂”100年[1]);minleaf = optimizableVariable (“minleaf”100年[1]);博= bayesopt (C[分裂minleaf]“UseParallel”,真正的);函数f = makeFun()负载(电离层的,“X”,“Y”);f = @fun;函数L =乐趣(Params) L = kfoldLoss (fitctree (X, Y,“KFold”5,“MaxNumSplits”Params.splits,“MinLeaf”Params.minleaf));结束结束

在这个例子中,函数处理只存在工人。处理从未出现在客户端。

贝叶斯优化并行输出的差异

bayesopt并行运行,贝叶斯优化输出包括这些差异。

  • 迭代显示——迭代显示包含一个列显示活动工人的数量。这是数量bayesopt分配一个工作到另一个工人。

  • 绘制函数

    • 目标函数模型图(@plotObjectiveModel)显示了等待点(这些点上执行并行的工人)。点的高度依赖ParallelMethod名称-值参数。

    • 运行时间图(@plotElapsedTime与标签)显示的总运行时间实时和总目标函数评价时间,对所有工人求和,标签客观评价时间(所有员工)。客观评价包括时间开始一个工人在工作。

另请参阅

(并行计算工具箱)|(并行计算工具箱)

相关的话题