平行的贝叶斯优化
并行优化
并行运行贝叶斯优化可以节省时间。在并行运行需要并行计算工具箱™。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
与标签)显示的总运行时间实时和总目标函数评价时间,对所有工人求和,标签客观评价时间(所有员工)。客观评价包括时间开始一个工人在工作。
另请参阅
parallel.pool.Constant
(并行计算工具箱)|spmd
(并行计算工具箱)