Perché le persone usano tecniche di programmazione quadratica (come SMO) quando hanno a che fare con SVM con kernel? Cosa c'è di sbagliato nella discesa del gradiente? È impossibile da usare con i kernel o è troppo lento (e perché?).
Ecco un po 'più di contesto: cercando di capire un po' meglio le SVM, ho usato la Discesa a gradiente per addestrare un classificatore SVM lineare usando la seguente funzione di costo:
Sto usando le seguenti notazioni:
- è la funzione pesi del modello è il suo parametro di polarizzazione.
- è il vettore di funzionalità dell'istanza di training .
- è la classe target (-1 o 1) per l' istanza .
- è il numero di istanze di addestramento.
- è l'iperparametro di regolarizzazione.
Ho ricavato un vettore (sub) gradiente (per quanto riguarda e ) da questa equazione, e Gradient Descent funzionato bene.
Se è troppo lento, perché? La funzione di costo non è convessa? O è perché il gradiente cambia troppo velocemente (non è Lipschitz continuo) quindi l'algoritmo continua a saltare attraverso le valli durante la discesa, quindi converge molto lentamente? Ma anche in questo caso, come può essere peggio della complessità temporale della Programmazione quadratica, che è ? Se si tratta di minimi locali, lo stocastico GD con ricottura simulata non può superarli?