Discesa coordinata vs. pendenza


23

Mi chiedevo quali sono i diversi casi d'uso per i due algoritmi, Coordinate Descent e Gradient Descent .

So che la discesa delle coordinate ha problemi con funzioni non fluide, ma è utilizzata in algoritmi popolari come SVM e LASSO.

Penso che la discesa gradiente sia usata più ampiamente, specialmente con la rinascita delle ANN e per molte altre attività di apprendimento automatico.

La mia domanda è: che tipo di problemi si adattano l'uno ma non l'altro, e in tal senso cosa rende adattamento della discesa delle coordinate per SVM e LASSO, ma adattamento della discesa del gradiente per le ANN?

Come si dovrebbe scegliere tra i due quando si sceglie un algoritmo di ottimizzazione?

Risposte:


7

Penso che di solito si tratti di quanto sia semplice / facile elaborare il gradiente della parte liscia della funzione e / o l'operatore prossimale della penalità.

1/K2K

Tali cose influenzeranno, ad esempio, la scelta della discesa coordinata rispetto a ISTA / FISTA.


Quindi quali sono i casi in cui la discesa delle coordinate (CD) sarà più veloce? Esistono alcuni tipi specifici di funzioni su quale CD sarà un candidato migliore?
Bar

Non posso dire che una specifica classe di funzioni sarà più veloce con il CD che con altri metodi, come ad esempio FISTA. Per quanto ne so, dipende molto dalla tua funzione e da quanto è costoso valutare il gradiente e cose del genere. Dalla mia esperienza, il CD è più veloce di FISTA sul problema del lazo quando ci sono poche variabili nel modello (non ricordo, ma meno di alcune migliaia). Nota che sto solo confrontando CD con ISTA e FISTA qui, altri algoritmi (come Newton o Pseudo-Newton) saranno probabilmente molto più veloci; ma questo dipende interamente dal problema attuale.
Tommy L

Come mai il CD è più veloce di GD? Sembra contro logica.
Royi,

3

La discesa coordinata aggiorna un parametro alla volta, mentre la discesa gradiente tenta di aggiornare tutti i parametri contemporaneamente.

È difficile specificare esattamente quando un algoritmo farà meglio dell'altro. Ad esempio, sono rimasto molto scioccato nell'apprendere che la discesa coordinata era all'avanguardia per LASSO. E non ero il solo; vedere la diapositiva 17 .

Detto questo, ci sono alcune caratteristiche che possono rendere un problema più modificabile per coordinare la discesa:

(1) Aggiornamenti condizionali rapidi. Se, per qualche motivo, il problema consente di ottimizzare i parametri individualmente molto rapidamente, la discesa delle coordinate può farne uso. Ad esempio, si potrebbe essere in grado di aggiornare determinati parametri utilizzando solo un sottoinsieme dei dati, riducendo notevolmente il costo computazionale di questi aggiornamenti. Un altro caso è se esiste una soluzione in forma chiusa per un singolo parametro, subordinata ai valori di tutti gli altri parametri.

(2) Modalità relativamente indipendenti per i parametri. Se il valore ottimale di un parametro è completamente indipendente dagli altri valori dei parametri, un giro di discesa delle coordinate porterà alla soluzione (supponendo che ciascun aggiornamento di coordinate trovi la modalità corrente). D'altra parte, se la modalità per un dato parametro è fortemente dipendente da altri valori di parametro, è molto probabile che la discesa delle coordinate proceda con il pollice, con aggiornamenti molto piccoli ad ogni giro.

Sfortunatamente, per la maggior parte dei problemi, (2) non regge, quindi è raro che la discesa delle coordinate sia ben comparata con algoritmi alternativi. Credo che la ragione per cui funziona bene per LASSO sia che ci sono molti trucchi che si possono usare per mettere in atto la condizione (1).

α


0

Mi rendo conto che questa è una vecchia domanda e ha delle risposte molto buone. Vorrei condividere qualche esperienza personale pratica.

K

  • Tutte le probabilità devono essere positive.
  • Tutti gli elementi del set di probabilità devono essere sommati a uno

Questo in realtà sta chiedendo molto. Con la discesa del gradiente di solito si affrontano i vincoli tramite una funzione di penalità. Qui non funzionerà. Non appena un valore viola uno di questi vincoli, il codice genererà in genere un errore numerico. Quindi bisogna affrontare i vincoli non permettendo mai all'algoritmo di ottimizzazione di attraversarlo.

Esistono numerose trasformazioni che è possibile applicare al problema per soddisfare i vincoli al fine di consentire la discesa gradiente. Tuttavia, se stai cercando il modo più semplice e pigro per implementarlo, coordinare la discesa è la strada da percorrere:

pio

  • pioK+1=pioK-ηJpio
  • pio=min(max(pio,0),1)
  • Pj+1=Pj1Σio=1npio

Per qualcuno come me che lavora in Python, questo di solito significa che devo usare un for-loop aggiuntivo che influisce negativamente sulle prestazioni. La discesa gradiente mi consente di usare Numpy che è ottimizzato per le prestazioni. Si può ottenere un'ottima velocità con esso, tuttavia, ciò non è realizzabile con la discesa delle coordinate, quindi di solito uso una tecnica di trasformazione.

Quindi la conclusione è che la discesa delle coordinate è l'opzione più semplice per gestire vincoli molto rigidi come il parametro rate nella distribuzione di Poisson. Se diventa negativo, il codice si lamenta ecc.

Spero che questo abbia aggiunto un po 'di intuizione.

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.