Ottimizzazione quando la funzione di costo è lenta da valutare


59

La discesa gradiente e molti altri metodi sono utili per trovare minimi locali nelle funzioni di costo. Possono essere efficienti quando la funzione di costo può essere valutata rapidamente in ogni punto, sia numericamente che analiticamente.

Ho quella che mi sembra una situazione insolita. Ogni valutazione della mia funzione di costo è costosa. Sto tentando di trovare una serie di parametri che minimizzino una superficie 3D contro superfici di verità del suolo. Ogni volta che modifico un parametro, devo eseguire l'algoritmo sull'intera coorte campione per misurarne l'effetto. Per calcolare un gradiente, devo modificare tutti e 15 i parametri in modo indipendente, il che significa che devo rigenerare tutte le superfici e confrontarle con la coorte del campione troppe volte per gradiente e decisamente troppe volte nel corso dell'ottimizzazione.

Ho sviluppato un metodo per aggirare questo problema e lo sto attualmente valutando, ma sono sorpreso di non aver trovato molto in letteratura riguardo alle costose valutazioni delle funzioni di costo. Questo mi fa chiedere se sto rendendo il problema più difficile di quello che è e che potrebbe esserci un modo migliore già disponibile.

Quindi le mie domande sono sostanzialmente queste: qualcuno conosce metodi per ottimizzare le funzioni di costo, convesse o meno, quando la valutazione è lenta? Oppure sto facendo qualcosa di stupido in primo luogo riesaminando l'algoritmo e confrontando così tante volte con la coorte di esempio?


5
Hai mai sentito parlare della discesa gradiente stocastica? Per le reti neurali profonde applicate a grandi set di allenamento hai un problema simile (ma puoi valutare il gradiente analiticamente) e la soluzione standard è quella di effettuare la discesa del gradiente basata solo su un singolo campione (stocastico) rispetto all'intera coorte (batch)
seanv507

3
Ho solo vagamente familiarità con l'area, quindi quindi questo è un commento piuttosto che una risposta. Ma quello che stai discutendo suona molto come l'argomento della quantificazione dell'incertezza, spesso affrontato dagli ingegneri, in cui una singola valutazione della funzione target ha richiesto settimane per essere valutata (almeno nei problemi affrontati dai miei colleghi di ingegneria). La mia comprensione molto limitata di come questo viene gestito è facendo un'approssimazione surrogata che è molto più facile da valutare sulla base di valutazioni passate e modelli ingegneristici più semplici e quindi uso questi modelli surrogati per scegliere la valutazione successiva ...
Cliff AB

2
... della funzione target più costosa. Odio dirlo, ma al momento non so più dell'argomento; Mi è stato detto solo brevemente mentre discutevo argomenti di ricerca con detti ingegneri. È interessante notare che sembra un'area di ricerca molto stimolante: credo che i buoni modelli richiedano sia una buona comprensione della fisica che delle statistiche.
Cliff AB,

1
@ seanv507 Sì, grazie, ma l'ho evitato per un motivo simile. Sono necessari circa 30 secondi a un minuto per eseguire un campione. Se ho 15 parametri, sto cercando quasi 8 minuti per calcolo del gradiente anche se uso solo un campione. Se lo spazio è grande, potrebbe richiedere molto tempo. Per favore, correggimi se avevi in ​​mente altre idee.
Jared Becksfort,

5
"quella che mi sembra essere una situazione insolita. Ogni valutazione della mia funzione di costo è costosa". Questa non è affatto una situazione insolita, in generale. Viene visualizzato ovunque , ad esempio ogni volta che la tua funzione di costo deriva dall'esecuzione di una simulazione (ad esempio in questo documento: white.ucc.asn.au/publications/White2015PsoTransistorSizing.pdf simuliamo un circuito in SPICE prendendo 10s). Più a fondo, nella scienza sperimentale, le valutazioni possono richiedere secoli. Uno dei miei amici, il progetto Masters, sta sostanzialmente ottimizzando 5 parametri per trovare il modo migliore di inserire il DNA. Ogni valutazione richiede 24 ore.
Lyndon White,

Risposte:


60

TL; DR

Consiglio di usare LIPO. È decisamente corretto e decisamente migliore della pura ricerca casuale (PRS). È anche estremamente semplice da implementare e non ha iperparametri. Non ho condotto un'analisi che paragona LIPO a BO, ma la mia aspettativa è che la semplicità e l'efficienza di LIPO implichino che supererà BO.

(Vedi anche: quali sono alcuni degli svantaggi dell'ottimizzazione dei parametri iper bayesiani? )

Ottimizzazione bayesiana

I metodi del tipo di ottimizzazione bayesiana costruiscono modelli surrogati del processo gaussiano per esplorare lo spazio dei parametri. L'idea principale è che le tuple di parametri che sono più vicine avranno valori di funzione simili, quindi l'assunzione di una struttura di co-varianza tra i punti consente all'algoritmo di fare ipotesi ponderate su quale sia la migliore tupla di parametro che valga la pena di provare. Questa strategia aiuta a ridurre il numero di valutazioni delle funzioni; in effetti, la motivazione dei metodi BO è quella di mantenere il numero di valutazioni delle funzioni il più basso possibile mentre "si utilizza l'intero bufalo" per fare buone ipotesi su quale punto testare successivamente. Esistono diverse figure di merito (miglioramento atteso, miglioramento quantico atteso, probabilità di miglioramento ...) che vengono utilizzati per confrontare i punti da visitare successivamente.

Confrontalo con qualcosa come una ricerca in griglia, che non utilizzerà mai alcuna informazione delle precedenti valutazioni delle funzioni per informare su dove andare dopo.

Per inciso, questa è anche una potente tecnica di ottimizzazione globale , e come tale non fa ipotesi sulla convessità della superficie. Inoltre, se la funzione è stocastica (ad esempio, le valutazioni hanno un certo rumore casuale intrinseco), questo può essere spiegato direttamente nel modello GP.

D'altra parte, dovrai adattare almeno un GP ad ogni iterazione (o diversi, scegliere il "migliore", o fare la media su alternative o metodi completamente bayesiani). Quindi, il modello viene utilizzato per fare (probabilmente migliaia) di previsioni, di solito sotto forma di ottimizzazione locale multistart, con l'osservazione che è molto più economico valutare la funzione di previsione GP rispetto alla funzione in fase di ottimizzazione. Ma anche con questo sovraccarico computazionale, tende ad essere il caso che anche le funzioni non convesse possano essere ottimizzate con un numero relativamente piccolo di chiamate di funzione.

Un articolo ampiamente citato sull'argomento è Jones et al , "Efficienza globale efficiente delle costose funzioni della scatola nera". Ma ci sono molte varianti su questa idea.

Ricerca casuale

Anche quando la funzione di costo è costosa da valutare, la ricerca casuale può essere comunque utile. La ricerca casuale è semplice da implementare. L'unica scelta che un ricercatore deve fare è impostare la probabilità che si desidera che i risultati si trovino in qualche quantile ; il resto procede automaticamente utilizzando i risultati della probabilità di base.pq q

Supponiamo che il tuo quantile sia e desideri una probabilità che i risultati del modello siano tra i primi percento di tutte le tuple dell'iperparametro. La probabilità che tutte le tuple tentate non si trovino in quella finestra è (perché sono state scelte indipendentemente dalla stessa distribuzione in modo casuale), quindi la probabilità che almeno una tupla si trovi in ​​quella regione è . Mettendo tutto insieme, abbiamoq=0.95p=0.95100×(1-q)=5nq n = 0,95 n 1 - 0,95 nqn=0.95n1-0.95n

1-qnpnlog(1-p)log(q)

che nel nostro caso specifico produce .n59

Questo risultato è il motivo per cui molte persone raccomandano tuple tentate per la ricerca casuale. Vale la pena notare che è paragonabile al numero di esperimenti richiesti per ottenere buoni risultati con i metodi basati sul processo gaussiano quando esiste un numero moderato di parametri. A differenza dei processi gaussiani, il numero di tuple di query non cambia con il numero di iperparametri su cui cercare; in effetti, per un gran numero di iperparametri, un metodo gaussiano basato sul processo può richiedere molte iterazioni per fare progressi.n=60n=60

Dato che hai una caratterizzazione probabilistica di quanto siano buoni i risultati, questo risultato può essere uno strumento persuasivo per convincere il tuo capo che eseguire ulteriori esperimenti produrrà rendimenti marginali decrescenti.

LIPO e le sue varianti

Questo è un arrivo emozionante che, se non è nuovo , è sicuramente nuovo per me. Procede alternando il posizionamento dei limiti informati sulla funzione, il campionamento dal limite migliore e l'utilizzo di approssimazioni quadratiche. Sto ancora lavorando su tutti i dettagli, ma penso che questo sia molto promettente. Questo è un bel post-blog , e l'articolo è Cédric Malherbe e Nicolas Vayatis " Ottimizzazione globale delle funzioni di Lipschitz ".


1
Questa sembra una variante moderna dei metodi della superficie di risposta!
kjetil b halvorsen,

1
In realtà, la ricerca casuale può funzionare molto bene: argmin.net/2016/06/20/hypertuning
Tim

1
@Tim Sì, il tuo punto è ben ripreso. Non volevo "decidere" quale sia il problema migliore in questo post, dal momento che ci sono essenzialmente infinite permutazioni su BO, ognuna delle quali afferma di essere il "miglior" ottimizzatore della scatola nera, rendendo impossibile essere definitivi. Sono d'accordo che la ricerca casuale può funzionare abbastanza bene, ma in realtà consiglierei LIPO su PRS. LIPO è decisamente corretto e supera fortemente il PRS (in media) in tutti i miei esperimenti. LIPO ha anche un costo di stima minimo: se puoi minimizzare un QP, puoi usare LIPO e LIPO ha zero iperparametri (al contrario di BO).
Ripristina Monica il

Sono contento di aver ricontrollato questa domanda. LIPO sembra fantastico.
Jared Becksfort,

LIPO è fantastico. Quando avrò un momento, amplierò la mia risposta per dare una migliore contabilità di LIPO.
Ripristina Monica il

40

f(X)X

Direi che l'attuale gold standard per la valutazione della funzione (molto) costosa della scatola nera è l'ottimizzazione bayesiana (BO) (globale ). Sycorax ha già descritto alcune funzionalità di BO, quindi sto solo aggiungendo alcune informazioni che potrebbero essere utili.

Come punto di partenza, potresti voler leggere questo documento di sintesi 1 . Ce n'è anche uno più recente [2].

L'ottimizzazione bayesiana è cresciuta costantemente come un campo negli ultimi anni, con una serie di seminari dedicati (ad esempio BayesOpt , e guarda questi video dal seminario di Sheffield su BO), dal momento che ha applicazioni molto pratiche nell'apprendimento automatico, come per ottimizzare gli iperparametri degli algoritmi ML - vedi ad esempio questo documento [3] e la relativa cassetta degli attrezzi, SpearMint . Esistono molti altri pacchetti in varie lingue che implementano vari tipi di algoritmi di ottimizzazione bayesiana.

Come ho già detto, il requisito fondamentale è che ogni valutazione delle funzioni è molto costosa, quindi i calcoli relativi alla BO aggiungono un costo trascurabile. Per dare un campo da baseball, BO può essere sicuramente utile se la tua funzione valuta in un tempo dell'ordine di minuti o più. Puoi anche applicarlo per calcoli più rapidi (ad esempio decine di secondi), ma a seconda dell'algoritmo che usi potresti dover adottare varie approssimazioni. Se la tua funzione viene valutata nella scala dei secondi , penso che tu stia colpendo i confini della ricerca attuale e forse altri metodi potrebbero diventare più utili. Inoltre, devo dire che raramente BO è davvero una scatola nera e spesso devi modificare gli algoritmi, a volte molto , per farlo funzionare al massimo potenziale con uno specifico problema del mondo reale.

BO a parte, per una revisione dei metodi generali di ottimizzazione senza derivati ​​è possibile dare un'occhiata a questa recensione [4] e verificare la presenza di algoritmi con buone proprietà di convergenza rapida. Ad esempio, la ricerca coordinata a più livelli (MCS) di solito converge molto rapidamente in un vicinato di un minimo (non sempre il minimo globale, ovviamente). MCS è pensato per l'ottimizzazione globale, ma è possibile renderlo locale impostando vincoli rilegati appropriati.

Infine, sei interessato a BO per le funzioni target che sono sia costose che rumorose , vedi la mia risposta a questa domanda .


Riferimenti:

1 Brochu et al., "Un tutorial sull'ottimizzazione bayesiana di costose funzioni di costo, con applicazione alla modellazione di utenti attivi e apprendimento gerarchico di rinforzo" (2010).

[2] Shahriari et al., "Togliere l'umano dal ciclo: una revisione dell'ottimizzazione bayesiana" (2015).

[3] Snoek et al., "Ottimizzazione bayesiana pratica degli algoritmi di apprendimento automatico", NIPS (2012).

[4] Rios e Sahinidis, "Ottimizzazione senza derivati: una revisione degli algoritmi e un confronto delle implementazioni del software", Journal of Global Optimization (2013).


4
+1 Questa è un'ottima risposta. In particolare, questi articoli sono una grande aggiunta a questo thread; in effetti, non sapevo che il metodo generale che ho descritto si chiama Bayesian Optimization. Ma sono preoccupato che i collegamenti possano andare male nel tempo. Ti dispiacerebbe aggiungere informazioni di citazione più complete in modo che i futuri utenti possano accedere a questi documenti?
Ripristina Monica il

I documenti di ottimizzazione bayesiana sono piuttosto utili. Grazie per aver risposto.
Jared Becksfort,

1
@ user777: buon punto. Aggiunto un elenco di riferimenti espliciti alla fine che dovrebbe essere sufficiente per recuperare i documenti.
Lacerbi,

6

Non conosco gli algoritmi, ma credo che il tipo di algoritmo di ottimizzazione che stai cercando sia l'ottimizzazione senza derivati , che viene utilizzata quando l'obiettivo è costoso o rumoroso .

Ad esempio, dai un'occhiata a questo documento (Björkman, M. & Holmström, K. "Ottimizzazione globale di costose funzioni non convesse utilizzando funzioni di base radiale." Ottimizzazione e ingegneria (2000) 1: 373. doi: 10.1023 / A: 1011584207202) il cui abstract sembra indicare questo è esattamente quello che vuoi:

Il documento prende in considerazione l'ottimizzazione globale delle costose funzioni oggettive, ovvero il problema di trovare il minimo globale quando ci sono diversi minimi locali e ogni valore di funzione richiede un tempo CPU considerevole per il calcolo. Tali problemi sorgono spesso in applicazioni industriali e finanziarie, in cui un valore di funzione potrebbe essere il risultato di una simulazione al computer che richiede tempo o ottimizzazione. I derivati ​​sono spesso difficili da ottenere e gli algoritmi presentati non fanno uso di tali informazioni.


2
Si prega di includere informazioni di citazione complete per i documenti collegati e altre risorse. Vogliamo creare un archivio duraturo di informazioni e i collegamenti tendono a peggiorare nel tempo.
Ripristina Monica

Björkman, M. & Holmström, K. "Ottimizzazione globale di costose funzioni non convesse utilizzando funzioni di base radiale." Optimization and Engineering (2000) 1: 373. doi: 10.1023 / A: 1011584207202
jkdev

4

Non sei solo.

I sistemi costosi da valutare sono molto comuni in ingegneria, come i modelli con metodo agli elementi finiti (FEM) e i modelli di fluidodinamica computazionale (CFD). L'ottimizzazione di questi costosi modelli computazionali è molto necessaria e sfidante perché gli algoritmi evolutivi spesso richiedono decine di migliaia di valutazioni del problema, che non è un'opzione per problemi costosi da valutare. Fortunatamente, ci sono molti metodi (algoritmi) disponibili per risolvere questo problema. Per quanto ne so, la maggior parte di essi si basa su modelli surrogati (metamodelli). Alcuni sono elencati di seguito.

  • Efficient Global Optimization (EGO) [1]. L'algoritmo EGO è stato menzionato sopra e potrebbe essere l'algoritmo di ottimizzazione basato su surrogati più famoso. Si basa sul modello di Kriging e su un criterio di riempimento chiamato funzione di miglioramento atteso (EI). I pacchetti R incluso l'algoritmo EGO sono DiceOptim e DiceKriging.
  • Metodo di campionamento che persegue la modalità (MPS) [2]. L'algoritmo MPS è basato sul modello RBF e viene utilizzata una strategia di campionamento attivo per raccogliere punti candidati. Il codice MATLAB è pubblicato dagli autori su http://www.sfu.ca/~gwa5/software.html . L'algoritmo MPS potrebbe richiedere più valutazioni per ottenere l'ottimale, ma può gestire problemi più complicati rispetto all'algoritmo EGO dalla mia esperienza personale.
  • Ensemble surrogate models di Juliane Müller [3]. Ha usato più surrogati per migliorare la capacità di ricerca. La toolbox MATLAB MATSuMoTo è disponibile su https://github.com/Piiloblondie/MATSuMoTo .

In sintesi, questi algoritmi di ottimizzazione basati su surrogati cercano di trovare l'ottimale globale del problema utilizzando il minor numero di valutazioni possibile. Ciò si ottiene sfruttando appieno le informazioni fornite dal surrogato (surrogati). Recensioni su ottimizzazione di problemi compuazionalmente costosi sono in [4-6].


Riferimento:

  1. DR Jones, M. Schonlau e WJ Welch, "Efficienza globale efficiente delle costose funzioni della scatola nera", Journal of Global Optimization, vol. 13, pagg. 455-492, 1998.
  2. L. Wang, S. Shan e GG Wang, "Metodo di campionamento che persegue la modalità per l'ottimizzazione globale delle costose funzioni della scatola nera", Engineering Optimization, vol. 36, pagg. 419-438, 2004.
  3. J. Müller, "Algoritmi di modello surrogato per problemi di ottimizzazione globale computazionalmente costosi della scatola nera", Università di Tecnologia di Tampere, 2012.
  4. GG Wang e S. Shan, "Revisione delle tecniche di metamodellizzazione a supporto dell'ottimizzazione della progettazione ingegneristica", Journal of Mechanical Design, vol. 129, pagg. 370-380, 2007.
  5. AI Forrester e AJ Keane, "Recenti progressi nell'ottimizzazione basata sulle surrogate", Progress in Aerospace Sciences, vol. 45, pagg. 50-79, 2009.
  6. FAC Viana, TW Simpson, V. Balabanov e V. Toropov, "Metamodellizzazione dell'ottimizzazione del design multidisciplinare: fino a che punto siamo veramente arrivati?", AIAA Journal, vol. 52, pagg. 670-690, 2014/04/01 2014.

3

Le due semplici strategie che ho usato con successo in passato sono:

  1. Se possibile, prova a trovare una funzione surrogata più semplice che si avvicini alla valutazione della funzione di costo completo, tipica di un modello analitico che sostituisce una simulazione. Ottimizza questa funzione più semplice. Quindi convalidare e ottimizzare la soluzione risultante con la funzione di costo esatto.
  2. Se possibile, prova a trovare un modo per valutare una funzione esatta "delta-cost" - esatta invece di essere un'approssimazione dall'uso del gradiente. Cioè, da un punto iniziale tridimensionale per il quale è stato valutato l'intero costo, trovare un modo per derivare come il costo cambierebbe apportando una piccola modifica a uno (o più) dei 15 componenti del punto corrente. Dovresti sfruttare le proprietà di localizzazione di una piccola perturbazione nel tuo caso particolare e probabilmente dovrai definire, memorizzare nella cache e aggiornare una variabile di stato interna lungo la strada.

Queste strategie sono molto specifiche del caso, non so se possano essere applicabili nel tuo caso o meno, scusami se non lo sono. Entrambi potrebbero essere applicabili (come nei miei casi d'uso): applicare la strategia "delta-cost" a un modello analitico più semplice - le prestazioni possono migliorare di diversi ordini di grandezza.

Un'altra strategia sarebbe quella di utilizzare un metodo del secondo ordine che tende in genere a ridurre il numero di iterazioni (ma ogni iterazione è più complessa), ad esempio l' algoritmo di Levenberg-Marquardt . Ma considerando che non sembra che tu abbia un modo per valutare direttamente ed efficacemente il gradiente, questa probabilmente non è un'opzione praticabile in questo caso.


3

Come altre persone hanno detto, un modello surrogato (chiamato anche superficie di risposta) è un approccio potente. A mio avviso, una cosa cruciale che la gente dimentica è che è possibile eseguire diverse valutazioni delle funzioni in parallelo , se si utilizzano CPU multicore.

Suggerirei di guardare questo codice , usa un modello di risposta semplice, ma si ridimensiona su CPU multicore, il che dà una velocità pari alla quantità di core utilizzati. Una matematica dietro il metodo è descritta in questo documento .


Suppongo che tu sia il primo autore del documento - dovresti probabilmente menzionarlo se è il caso. L'articolo non ha paragoni con metodi all'avanguardia come l'ottimizzazione bayesiana o altri metodi surrogati (in realtà, non fornisce alcun punto di riferimento). Puoi forse dire qualcosa di più?
Lacerbi,

Non sto dicendo che il modello usato lì sia migliore. Sto solo dicendo che le persone sono troppo preoccupate per la qualità del modello e talvolta dimenticano il parallelismo, che può essere un grosso problema quando sono coinvolti molti core ..
Paul,

Si prega di includere informazioni di citazione complete per i documenti collegati e altre risorse. Vogliamo creare un archivio duraturo di informazioni e i collegamenti tendono a peggiorare nel tempo.
Ripristina Monica

2
Non sono sicuro di quanto la terminologia vari in base alla comunità, ma comunemente qui superficie di risposta usata come sinonimo di "modello surrogato polinomiale" (tipicamente quadratico). Quindi tendo a pensare alla modellazione surrogata come un superset della modellazione della superficie di risposta. (Questo potrebbe non essere corretto, però.)
GeoMatt22

0

Ci sono molti trucchi usati nella discesa del gradiente stocastico che possono essere applicati anche alla valutazione obiettiva della funzione. L'idea generale sta provando ad approssimare la funzione oggettiva usando un sottoinsieme di dati .

Le mie risposte in questi due post discutono del perché la discesa del gradiente stocastico funziona: l'intuizione che sta dietro è approssimare il gradiente usando un sottoinsieme di dati.

In che modo la discesa gradiente stocastica può far risparmiare tempo rispetto alla discesa gradiente standard?

Come eseguire la regressione lineare in modo parallelo / distribuito per l'impostazione dei big data?

Lo stesso trucco si applica alla funzione obiettivo.

UNX-B2UNUNB

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.