并行运行的贝叶斯优化可以节省时间。并行运行需要并行计算工具箱™。bayesopt
执行并行目标函数的评估同时并行的工人。
并行优化:
bayesopt
- 设置UseParallel
名称 - 值对,以真正
。例如,
结果= bayesopt(乐趣,乏,'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-观察'
可导致bayesopt
更广泛地搜索全局最优。这种选择可能会导致在更短的时间更好的解决方案。然而,默认值“截取模型预测”
往往是最好的。
设置MinWorkerUtilization
选项为较大的值可能会导致较高的并行利用率。然而,这种设置会导致更彻底进行评估随机点,这可能会导致不准确的解决方案。万博 尤文图斯一个较大的值,在这种情况下,取决于你有多少工人。默认值是地板(0.8 * 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(FUN);结果1 = bayesopt(C,[拆分,minleaf]'UseParallel',真正);结果2 = bayesopt(C,[拆分,minleaf]'UseParallel',真正,...'MaxObjectiveEvaluations',50);结果3 = bayesopt(C,[拆分,minleaf]'UseParallel',真正,...'AcquisitionFunction',“预计-改善”);
在这个例子中,copyFunctionHandleToWorkers
发送功能句柄工人只有一次。
3.创建对工人的目标函数如果你有数据大量派遣工人,你能避免使用在客户端加载数据SPMD
加载在工人中的数据。用一个综合
同parallel.pool.Constant
访问分布式目标函数。
%makeFun在这个脚本结束SPMD有趣= makeFun();结束%ObjectiveFunction现在是一个复合。获得parallel.pool.Constant%在引用它,没有它复制到客户端:C = parallel.pool.Constant(FUN);%你也可以使用该行%C = parallel.pool.Constant(@MakeFun);%在这种情况下,您不使用SPMD%呼叫bayesopt,传递常量拆分= optimizableVariable(“分裂”[1100]);minleaf = optimizableVariable('minleaf'[1100]);博= 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
)所示的总的经过时间与标签即时的总的目标函数的评估时间,总结了所有的工人,与标签客观评价时间(所有工人)。客观评价时间包括开始作业工人的时间。