Ottimizzazione minima sequenziale

Da testwiki.
Versione del 19 nov 2024 alle 16:25 di imported>Fabio Carassio (growthexperiments-addlink-summary-summary:3|0|0)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

L'Ottimizzazione minima sequenziale (in inglese: Sequential minimal optimization, in sigla SMO) è un algoritmo per risolvere efficientemente il problema di ottimizzazione che emerge durante l'addestramento di una Macchine a vettori di supporto. Fu inventato da John Platt nel 1998 al laboratorio Microsoft Research di Redmond. L'Ottimizzazione minima sequenziale è implementata nella famosa libreria software libsvm.

Il problema

Consideriamo il problema della classificazione binaria con un insieme di dati (dataset) (x1,y1),...,(xn,yn), dove xi è un vettore d'ingresso e yi{1,+1} è la corrispondente etichetta binaria. Una macchina a vettori di supporto si addestra risolvendo un problema di programmazione quadratica vincolato. Tale problema si può esprimere in forma duale come segue:

maxαi=1nαi12i=1nj=1nyiyjK(xi,xj)αiαj,
vincolato a:
0αiC, for i=1,2,,n,
i=1nyiαi=0

dove C è un iperparametro e K(xi, xj) è la funzione kernel, l'uno e l'altra stabilite dall'utente; le variabili αi sono moltiplicatori di Lagrange.

L'algoritmo

SMO è un algoritmo iterativo che risolve il problema appena descritto. La strategia di SMO consiste nel decomporre il problema in un insieme di sottoproblemi minimali, che possono poi essere risolti analiticamente. Per via della presenza dei vincoli lineari di uguaglianza che includono i moltiplicatori di Lagrange, αi, il problema minimo possibile contiene due moltiplicatori. Quindi per una data coppia di moltiplicatori α1 e α2, i vincoli si riducono a:

0α1,α2C,
y1α1+y2α2=k.

Questo problema ridotto si può risolvere analiticamente: occorre trovare il minimo di una funzione quadratica monodimensionale, cioè una parabola. k è l'opposto della somma su tutti i termini rimanenti nel vincolo di uguaglianza, che in ogni iterazione è fissato.

L'algoritmo procede così:

  1. Trovare un moltiplicatore di Lagrange α1 che viola le condizioni di Karush–Kuhn–Tucker (KKT) per questo problema.
  2. Trovare un secondo moltiplicatore α2 e ottimizzare la coppia (α1,α2).
  3. Ripetere i passi 1 e 2 fino a convergenza.

Quando tutti i moltiplicatori di Lagrange soddisfano le condizioni KKT (entro una tolleranza prestabilita), il problema è risolto.

Per questo algoritmo è garantita la convergenza; tuttavia, per accelerarla, vengono utilizzate euristiche per scegliere coppie favorevoli di moltiplicatori. Questo accorgimento è criticamente importante per insiemi di dati di grandi dimensioni n, in quanto esistono n(n1) scelte possibili di αi e αj.

Collegamenti esterni