Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Optimización bayesiana paralela

Optimizar en paralelo

Ejecutar la optimización bayesiana en paralelo puede ahorrar tiempo. Ejecutar en paralelo requiere. realiza simultáneamente evaluaciones de funciones objetivas paralelas en los trabajadores paralelos.Parallel Computing Toolbox™bayesopt

Para optimizar en paralelo:

  • — Establezca el par nombre-valor en.bayesoptUseParalleltrue Por ejemplo,

    results = bayesopt(fun,vars,'UseParallel',true);
  • Funciones de ajuste (Fit): permite definir el campo de la estructura.UseParallelHyperparameterOptimizationOptionstrue Por ejemplo,

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

Algoritmo Bayesiano paralelo

El algoritmo de optimización Bayesiano paralelo es similar al algoritmo de serie, que se describe en.Algoritmo de optimización bayesiana Las diferencias son:

  • asigna puntos para evaluar a los trabajadores paralelos, generalmente un punto a la vez. calcula en el cliente para determinar qué punto se asignará.bayesoptbayesopt

  • Después de evaluar los puntos aleatorios iniciales, elige los puntos que se evaluarán mediante el ajuste de un modelo de proceso Gaussiano (GP).bayesopt Para ajustar un modelo de GP mientras algunos trabajadores siguen evaluando puntos, imputa un valor a cada punto que todavía está en un trabajador.bayesopt El valor imputado es la media del valor del modelo GP en los puntos que está evaluando, o algún otro valor especificado por el par nombre-valor.bayesopt 'ParallelMethod' Para la optimización paralela de las funciones de ajuste, utiliza el valor predeterminado imputado.bayesoptParallelMethod

  • Después asigna un punto para evaluar y, antes de calcular un nuevo punto para asignar, comprueba si demasiados trabajadores están inactivos.bayesopt El umbral para los trabajadores activos viene determinado por el par nombre-valor.MinWorkerUtilization Si hay demasiados trabajadores inactivos, entonces asigna puntos aleatorios, elegidos uniformemente dentro de los límites, a todos los trabajadores inactivos.bayesopt Este paso hace que los trabajadores estén activos más rápidamente, pero los trabajadores tienen puntos aleatorios en lugar de puntos ajustados. Si el número de trabajadores inactivos no excede el umbral, a continuación, elige un punto para evaluar como de costumbre, mediante el ajuste de un modelo GP y maximizar la función de adquisición.bayesopt

Configuración de mejor rendimiento paralelo

Las funciones de ajuste no tienen ajustes especiales para un mejor rendimiento paralelo. Por el contrario, varios ajustes pueden ayudar a acelerar una optimización.bayesopt

Opciones de Solver

Establecer la opción en un valor menor que el predeterminado () puede acelerar la solución.GPActiveSetSize300 El costo es una inexactitud potencial en los puntos que elige evaluar, porque el modelo GP de la función objetiva puede ser menos preciso que con un valor mayor.bayesopt Establecer la opción en un valor mayor puede dar como resultado un modelo de GP más preciso, pero requiere más tiempo para crear el modelo.

Establecer la opción para que pueda conducir a la búsqueda más ampliamente para un óptimo global.ParallelMethod'max-observed'bayesopt Esta elección puede conducir a una mejor solución en menos tiempo. Sin embargo, el valor predeterminado es a menudo mejor.'clipped-model-prediction'

Establecer la opción en un valor grande puede dar lugar a una mayor utilización paralela.MinWorkerUtilization Sin embargo, esta configuración provoca que se evalúen los puntos más completamente aleatorios, lo que puede dar lugar a soluciones menos precisas. Un valor grande, en este contexto, depende de cuántos trabajadores tenga. El valor predeterminado es, donde es el número de trabajadores paralelos.floor(0.8*N)N Establecer la opción en un valor inferior puede dar una utilización paralela más baja, pero con el beneficio de puntos de mayor calidad.

La colocación de la función objetiva sobre los trabajadores

Puede colocar una función objetiva en los trabajadores paralelos de una de estas tres formas. Algunos tienen un mejor rendimiento, pero requieren una configuración más compleja.

Si se da un identificador de función como la función objetiva, envía el identificador a todos los trabajadores paralelos al principio de su ejecución.1. Automaticbayesopt Por ejemplo,

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);

Este método es eficaz si el identificador es pequeño o si se ejecuta la optimización una sola vez. Sin embargo, si planea ejecutar la optimización varias veces, puede ahorrar tiempo utilizando una de las otras dos técnicas.

Si planea ejecutar una optimización varias veces, Ahorre tiempo transfiriendo la función objetiva a los trabajadores solo una vez.2. Parallel constant Esta técnica es especialmente eficaz cuando el manejador de la función incorpora una gran cantidad de datos. Transfiera el objetivo una vez estableciendo el identificador de función en una construcción, como en este ejemplo.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');

En este ejemplo, envía el identificador de función solo a los trabajadores una vez.copyFunctionHandleToWorkers

Si tiene una gran cantidad de datos para enviar a los trabajadores, puede evitar cargar los datos en el cliente utilizando para cargar los datos en los trabajadores.3. Create objective function on workersspmd Utilice una con para acceder a las funciones objetivo distribuidas.Compositeparallel.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

En este ejemplo, el identificador de función solo existe en los trabajadores. El identificador nunca aparece en el cliente.

Diferencias en la salida de optimización bayesiana paralela

Cuando se ejecuta en paralelo, la salida de optimización bayesiana incluye estas diferencias.bayesopt

  • — La visualización iterativa incluye una columna que muestra el número de trabajadores activos.Iterative Display Este es el número después de asigna un trabajo al siguiente trabajador.bayesopt

  • Plot Functions

    • El modelo de función objetivo Plot () muestra los puntos pendientes (esos puntos que se ejecutan en los trabajadores paralelos).@plotObjectiveModel La altura de los puntos depende del par nombre-valor.ParallelMethod

    • El trazado de tiempo transcurrido () muestra el tiempo total transcurrido con la etiqueta y el tiempo total de evaluación de la función objetiva, sumado a todos los trabajadores, con la etiqueta.@plotElapsedTimeReal timeObjective evaluation time (all workers) El tiempo de evaluación objetiva incluye el tiempo para iniciar un trabajador en un trabajo.

Consulte también

|

Temas relacionados