Найдите что-либо подобное байесовой оптимизации

Оптимизируйте параллельно

Выполнение Байесовой оптимизации параллельно может сэкономить время. Выполнение параллельно требует Parallel Computing Toolbox™. bayesopt выполняет параллельные оценки целевой функции одновременно на параллельных рабочих.

Оптимизировать параллельно:

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

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

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

Найдите что-либо подобное байесовому алгоритму

Параллельный Байесов алгоритм оптимизации похож на последовательный алгоритм, который описан в Байесовом Алгоритме Оптимизации. Различия:

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

  • После bayesopt оценивает начальные случайные точки, это выбирает точки, чтобы оценить, подбирая модель Gaussian process (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. Автоматический, Если вы даете указатель на функцию как целевую функцию, 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 запуски параллельно, Байесова оптимизация выход включает эти различия.

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

  • Функции построения графиков

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

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

Смотрите также

|

Похожие темы