¿Por qué las personas usan técnicas de programación cuadrática (como SMO) cuando se trata de SVM kernelized? ¿Qué hay de malo en el descenso de gradiente? ¿Es imposible de usar con los núcleos o es demasiado lento (y por qué?).
Aquí hay un poco más de contexto: tratando de entender un poco mejor los SVM, usé Gradient Descent para entrenar un clasificador lineal de SVM usando la siguiente función de costo:
Estoy usando las siguientes anotaciones:
- b es el peso de las características del modelo y es su parámetro de sesgo.
- es el vector de características de la instancia de entrenamiento .
- es la clase objetivo (-1 o 1) para la instancia .
- es el número de instancias de entrenamiento.
- es el hiperparámetro de regularización.
I derivado de un vector (sub) gradiente (con respecto a y ) de esta ecuación, y pendiente de descenso funcionaba bien.
Ahora me gustaría abordar problemas no lineales. ¿Puedo reemplazar todos los productos de punto con en la función de costo, donde es la función del núcleo (por ejemplo el RBF gaussiano, ), luego use el cálculo para obtener un vector (sub) gradiente y seguir con Gradient Descent?
Si es demasiado lento, ¿por qué es eso? ¿La función de costo no es convexa? ¿O es porque el gradiente cambia demasiado rápido (no es Lipschitz continuo) por lo que el algoritmo sigue saltando a través de los valles durante el descenso, por lo que converge muy lentamente? Pero incluso entonces, ¿cómo puede ser peor que la complejidad de tiempo de la programación cuadrática, que es ? Si se trata de mínimos locales, ¿no puede el GD estocástico con recocido simulado superarlos?