Por que as pessoas usam técnicas de programação quadrática (como SMO) ao lidar com SVMs kernelizados? O que há de errado com a descida do gradiente? É impossível usar com kernels ou é muito lento (e por quê?).
Aqui está um pouco mais de contexto: tentando entender um pouco melhor os SVMs, usei o Gradient Descent para treinar um classificador SVM linear usando a seguinte função de custo:
Estou usando as seguintes notações:
- é o peso do recurso do modelo é seu parâmetro de viés.
- é o vector recurso da instância de treinamento.
- é a classe de destino (-1 ou 1) para a instância.
- é o número de instâncias de treinamento.
- é o hiperparâmetro de regularização.
I derivado de um vector de (sub) gradiente (no que diz respeito a e ) a partir desta equação, e Gradiente Descida funcionou muito bem.
Se é muito lento, por que isso? A função de custo não é convexa? Ou é porque o gradiente muda muito rápido (não é contínuo em Lipschitz) para que o algoritmo continue pulando através dos vales durante a descida e converja muito lentamente? Mas mesmo assim, como pode ser pior que a complexidade de tempo da programação quadrática, que é ? Se é uma questão de mínimos locais, a GD Estocástica com recozimento simulado não pode superá-los?