exponenta event banner

Параллельная байесовская оптимизация

Оптимизация параллельно

Параллельная байесовская оптимизация может сэкономить время. Для параллельного выполнения требуется Toolbox™ параллельных вычислений. bayesopt выполняет параллельные оценки объективных функций параллельно с параллельными работниками.

Для параллельной оптимизации:

  • bayesopt - Установите UseParallel пара имя-значение к true. Например,

    results = bayesopt(fun,vars,'UseParallel',true);
  • Fit functions (Подогнать функции) - UseParallel области HyperparameterOptimizationOptions структура для true. Например,

    Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto',...
        'HyperparameterOptimizationOptions',struct('UseParallel',true))

Параллельный байесовский алгоритм

Алгоритм параллельной байесовской оптимизации аналогичен последовательному алгоритму, который описан в Bayesian Optimization Algorithm. Различия заключаются в следующем:

  • bayesopt назначает точки для оценки параллельным работникам, как правило, по одной точке за раз. bayesopt вычисляет на клиенте, чтобы определить, какую точку назначить.

  • После bayesopt вычисляет начальные случайные точки, выбирает точки для оценки, подгоняя модель гауссова процесса (GP). Чтобы подогнать модель GP, пока некоторые работники все еще оценивают точки, bayesopt вычисляет значение для каждой точки, которая все еще находится на работнике. Вмененное значение является средним значением модели GP в точках, которые она оценивает, или некоторым другим значением, указанным в bayesopt 'ParallelMethod' пара имя-значение. Для параллельной оптимизации функций посадки, bayesopt использует значение по умолчанию ParallelMethod вмененное значение.

  • После bayesopt назначает точку для вычисления и перед вычислением новой точки для назначения проверяет, не простаивает ли слишком много работников. Порог для активных работников определяется MinWorkerUtilization пара имя-значение. Если слишком много работников простаивают, то bayesopt присваивает случайные точки, выбираемые равномерно в пределах, всем холостым работникам. Этот шаг заставляет работников быть активными быстрее, но рабочие имеют случайные точки, а не подогнанные точки. Если количество холостых работников не превышает порог, то bayesopt выбирает точку для оценки как обычно, подгоняя модель GP и максимизируя функцию сбора.

Примечание

Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно дает воспроизводимые результаты.

Параметры для лучшей параллельной производительности

Функции подгонки не имеют специальных настроек для лучшей параллельной производительности. Напротив, несколько bayesopt настройки могут помочь ускорить оптимизацию.

Параметры решателя

Установка GPActiveSetSize значение параметра меньше значения по умолчанию (300) может ускорить решение. Стоимость - это потенциальная неточность в пунктах, которые bayesopt выбирает оценку, поскольку модель GP целевой функции может быть менее точной, чем при большем значении. Установка для опции большего значения может привести к более точной модели GP, но требует больше времени для создания модели.

Установка ParallelMethod опция для 'max-observed' может привести bayesopt более широкий поиск глобального оптимума. Этот выбор может привести к лучшему решению за меньшее время. Однако значение по умолчанию: 'clipped-model-prediction' часто бывает лучше.

Установка MinWorkerUtilization большое значение параметра может привести к более высокой степени параллельного использования. Однако эта настройка вызывает оценку более полностью случайных точек, что может привести к менее точным решениям. В этом контексте большое значение зависит от того, сколько у вас работников. Значение по умолчанию: floor(0.8*N), где N - количество параллельных работников. Установка опции на более низкое значение может обеспечить более низкое параллельное использование, но с преимуществом более высокого качества.

Возложение целевой функции на работников

Можно поместить целевую функцию на параллельных работников одним из трех способов. Некоторые из них имеют более высокую производительность, но требуют более сложной настройки.

1. Автоматически (Automatic) Если в качестве целевой функции указан дескриптор функции, bayesopt отправляет дескриптор всем параллельным работникам в начале его выполнения. Например,

load ionosphere
splits = optimizableVariable('splits',[1,100],'Type','integer');
minleaf = optimizableVariable('minleaf',[1,100],'Type','integer');
fun = @(params)kfoldLoss(fitctree(X,Y,'Kfold',5,...
    'MaxNumSplits',params.splits,'MinLeaf',params.minleaf));

results = bayesopt(fun,[splits,minleaf],'UseParallel',true);

Этот метод эффективен, если дескриптор мал или если оптимизация выполняется только один раз. Однако если планируется выполнить оптимизацию несколько раз, можно сэкономить время, используя один из двух других методов.

2. Параллельная константа Если планируется выполнить оптимизацию несколько раз, сэкономьте время, передав целевую функцию работникам только один раз. Этот метод особенно эффективен, когда дескриптор функции включает большое количество данных. Передайте цель один раз, установив дескриптор функции в parallel.pool.Constant (Панель параллельных вычислений), как в этом примере.

load ionosphere
splits = optimizableVariable('splits',[1,100],'Type','integer');
minleaf = optimizableVariable('minleaf',[1,100],'Type','integer');
fun = @(params)kfoldLoss(fitctree(X,Y,'Kfold',5,...
    'MaxNumSplits',params.splits,'MinLeaf',params.minleaf));

C = copyFunctionHandleToWorkers(fun);

results1 = bayesopt(C,[splits,minleaf],'UseParallel',true);
results2 = bayesopt(C,[splits,minleaf],'UseParallel',true,...
    'MaxObjectiveEvaluations',50);
results3 = bayesopt(C,[splits,minleaf],'UseParallel',true,...
    'AcquisitionFunction','expected-improvement');

В этом примере: copyFunctionHandleToWorkers отправляет дескриптор функции работникам только один раз.

3. Создание целевой функции для работников Если у вас есть много данных для отправки работникам, вы можете избежать загрузки данных в клиенте с помощью spmd(Панель инструментов параллельных вычислений) для загрузки данных на работников. Использовать Composite(Панель инструментов параллельных вычислений) с parallel.pool.Constant для доступа к распределенным целевым функциям.

% makeFun is at the end of this script
spmd
    fun = makeFun();
end

% ObjectiveFunction is now a Composite. Get a parallel.pool.Constant
% that refers to it, without copying it to the client:
C = parallel.pool.Constant(fun);

% You could also use the line
% C = parallel.pool.Constant(@MakeFun);
% In this case, you do not use spmd

% Call bayesopt, passing the Constant
splits = optimizableVariable('splits', [1 100]);
minleaf = optimizableVariable('minleaf', [1 100]);
bo = bayesopt(C,[splits minleaf],'UseParallel',true);

function f = makeFun()
load('ionosphere','X','Y');
f = @fun;
    function L = fun(Params)
        L = kfoldLoss(fitctree(X,Y, ...
            'KFold', 5,...
            'MaxNumSplits',Params.splits, ...
            'MinLeaf', Params.minleaf));
    end
end

В этом примере дескриптор функции существует только для работников. Дескриптор никогда не появляется на клиенте.

Различия в выводе параллельной байесовской оптимизации

Когда bayesopt выполняется параллельно, выходные данные байесовской оптимизации включают эти различия.

  • Итеративное отображение (Iterative Display) - итеративное отображение включает столбец, показывающий число активных работников. Это число после bayesopt назначает задание следующему работнику.

  • Функции графика

    • График модели целевой функции (@plotObjectiveModel) показывает ожидающие точки (те точки, которые выполняются на параллельных рабочих). Высота точек зависит от ParallelMethod пара имя-значение.

    • График прошедшего времени (@plotElapsedTime) показывает общее прошедшее время с меткой Real time и общее время оценки целевой функции, суммированное по всем работникам, с меткой Objective evaluation time (все работники). Время объективной оценки включает время начала работы работника.

См. также

(Панель инструментов параллельных вычислений) | (Панель инструментов параллельных вычислений)

Связанные темы