主要内容

并行贝叶斯优化

并行优化

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

要并行优化:

  • Bayesopt.-设定使用并行名称-值对到真的.例如,

    结果=bayesopt(乐趣、变量、,'使用指平行',真的);
  • 适合功能 - 设置使用并行场面的领域超参数优化选项结构到真的.例如,

    mdl = fitcsvm(x,y,'OptimizeHyperParameters''汽车'......'hyperparameteroptimizationoptions',结构('使用指平行',真的))

并行贝叶斯算法

并行贝叶斯优化算法类似于串行算法,其描述于贝叶斯优化算法。两者的分别是:

  • Bayesopt.分配点以评估并行工人,一般一次一定点。Bayesopt.在客户端上计算以确定要分配的点。

  • Bayesopt.评估初始随机点,它通过拟合高斯过程(GP)模型选择要评估的点。要在某些工人仍在评估点时拟合GP模型,Bayesopt.对仍在工人身上的每个点输入一个值。输入的值是其评估点处GP模型值的平均值,或由工程师指定的其他值Bayesopt.“并行方法”名称值对。有关FIT功能的并行优化,Bayesopt.使用默认值并行方法估算值。

  • Bayesopt.分配一个点来评估,并且在计算新点之前分配,它会检查太多的工人是否空闲。积极工作者的阈值由此确定minworkerutilization名称-值对。如果有太多的工作线程处于空闲状态,则Bayesopt.分配随机点,统一地选择界限,对所有闲置的工作者均匀。这一步骤使工人更快地活跃,但工人有随机分数而不是装配点。如果空闲工人的数量不超过阈值,那么Bayesopt.通过拟合GP模型并最大化采集函数,像往常一样选择要评估的点。

笔记

由于并行计时的不可再现性,并行贝叶斯优化不一定产生可再现的结果。

最佳并行性能设置

FIT功能没有特殊设置,可用于更好的并行性能。相比之下,几个Bayesopt.设置有助于加快优化速度。

求解器选项

设置GPActiveSetSize较小值的选项比默认值较小(300)可以加速解决方案。成本在潜在的不准确性Bayesopt.选择评估,因为目标函数的GP模型可能比具有更大的值更准确。将选项设置为更大的值可能导致更准确的GP模型,但需要更多时间来创建模型。

设置并行方法选择“观察到的最大值”能领导Bayesopt.以全球最佳搜索更广泛。这种选择可以在更短的时间内导致更好的解决方案。但是,默认值“剪裁模型预测”往往是最好的。

设置minworkerutilization选择较大的值可能会导致更高的并行利用率。但是,此设置会导致计算更完全的随机点,这可能导致不太准确的解决方案。在此上下文中,较大的值取决于您有多少工人。默认值为金宝搏官方网站地板(0.8 * N),在哪里N是平行工人的数量。将选项设置为较低的值可以给出较低的并行利用,但具有更高质量点的好处。

将客观职能放在工人身上

您可以通过三种方式之一在平行工人上放置客观函数。有些具有更好的性能,但需要更复杂的设置。

1.自动如果将函数句柄作为目标函数,Bayesopt.在运行开始时将句柄发送给所有并行工作进程。例如,

加载电离层splits=optimizableviable(“分裂”,[1,100],“类型”“整数”);minleaf=optimizableviable(“明利夫”,[1,100],“类型”“整数”);fun=@(参数)kfoldLoss(fitcree(X,Y,“Kfold”,5,......“MaxNumSplits”,params.splits,“明利夫”,params.minleaf));结果= Bayesopt(乐趣,[分裂,MINLEAF],'使用指平行',真的);

如果手柄很小,或者如果您只运行一次,则此方法是有效的。但是,如果您计划多次运行优化,则可以使用其他两种技术之一来节省时间。

2.平行常数如果您计划多次运行优化,请通过仅将目标函数转移到工人一次来节省时间。当功能处理包含大量数据时,该技术特别有效。通过将功能句柄设置为a,转移目标一次并行池常数(并行计算工具箱)构造,如在这个例子中。

加载电离层splits=optimizableviable(“分裂”,[1,100],“类型”“整数”);minleaf=optimizableviable(“明利夫”,[1,100],“类型”“整数”);fun=@(参数)kfoldLoss(fitcree(X,Y,“Kfold”,5,......“MaxNumSplits”,params.splits,“明利夫”,params.minleaf);C=copyFunctionHandleToWorkers(fun);results1=bayesopt(C[splits,minleaf],'使用指平行',true);结果2=bayesopt(C,[splits,minleaf],'使用指平行',真的,......“MaxObjectiveEvaluations”,50); 结果3=bayesopt(C,[splits,minleaf],'使用指平行',真的,......'收集功能'“预期改善”);

在这个例子中,copyFunctionHandleToWorkers只将函数句柄发送给工人一次。

3.为工人创造目标职能如果您有大量的数据要发送到工人,可以避免使用客户端加载数据SPMD.(并行计算工具箱)要将数据加载到辅助对象上,请使用合成的(并行计算工具箱)并行池常数访问分布式目标函数。

%makefun位于此脚本的末尾SPMD.fun=makeFun();结尾%目标是现在是一个复合材料。获取并行.Pool.Constant.百分比是指它的,而不将其复制到客户端:c = parallel.Pool.Constant(乐趣);%您也可以使用该行%C=parallel.pool.Constant(@MakeFun);在这种情况下%,您不使用spmd%call bayesopt,传递常数splits=optimizableviable(“分裂”, [1 100]); minleaf=optimizableviable(“明利夫”,[1100]);bo=bayesopt(C,[splits minleaf],'使用指平行',真的);功能f = makefun()加载('电离层'“X”“是的”);f=乐趣;功能L=fun(参数)L=kfoldLoss(fitctree(X,Y,......'kfold', 5,......“MaxNumSplits”,params.splits,......“明利夫”,params.minleaf));结尾结尾

在本例中,函数句柄仅存在于worker上。句柄从未出现在客户端上。

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

什么时候?Bayesopt.贝叶斯优化输出并行运行,包括这些差异。

  • 迭代显示-迭代显示包括一列,显示活动工作人员的数量。这是之后的数字Bayesopt.将作业分配给下一个工人。

  • 绘图函数

    • 目标函数模型图(@plotobjectiveModel.)显示挂起点(在并行工作线程上执行的点)。点的高度取决于并行方法名称值对。

    • 经过时间图(@绘图时间)显示标签的总经过时间即时的和总目标函数的评估时间,总结了所有工人,与标签目标评估时间(所有工人).目标评估时间包括员工开始工作的时间。

也可以看看

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

相关话题