并行运行贝叶斯优化可以节省时间。并行运行需要并行计算工具箱™。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.
)显示挂起点(在并行工作线程上执行的点)。点的高度取决于并行方法
名称值对。
经过时间图(@绘图时间
)显示标签的总经过时间即时的和总目标函数的评估时间,总结了所有工人,与标签目标评估时间(所有工人).目标评估时间包括员工开始工作的时间。