并行优化贝叶斯

优化并行

并行运行的贝叶斯优化可以节省时间。并行运行需要并行计算工具箱™。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)所示的总的经过时间与标签即时的总的目标函数的评估时间,总结了所有的工人,与标签客观评价时间(所有工人)。客观评价时间包括开始作业工人的时间。

也可以看看

|

相关话题