¿Es posible el Descenso de degradado para SVM kernelized (si es así, ¿por qué las personas usan la programación cuadrática)?

21

¿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:

J(w,b)=Ci=1mmax(0,1y(i)(wtx(i)+b))+12wtw

Estoy usando las siguientes anotaciones:

  • bw es el peso de las características del modelo y es su parámetro de sesgo.b
  • x(i) es el vector de características de la instancia de entrenamiento .ith
  • y(i) es la clase objetivo (-1 o 1) para la instancia .ith
  • m es el número de instancias de entrenamiento.
  • C 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.wb

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?utvK(u,v)KK(u,v)=eγuv2

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 O(nsamples2×nfeatures) ? Si se trata de mínimos locales, ¿no puede el GD estocástico con recocido simulado superarlos?

MiniQuark
fuente

Respuestas:

6

Establezca para que y , con , donde es un mapeo de la matriz de entrada original , . Esto permite resolver el SVM a través de la formulación primaria. Usando su notación para la pérdida:w t ϕ ( x ) = u tK w t w = u t K u K = ϕ ( x ) t ϕ ( x ) ϕ ( x ) xw=ϕ(x)uwtϕ(x)=utKwtw=utKuK=ϕ(x)tϕ(x)ϕ(x)x

J(w,b)=Ci=1mmax(0,1y(i)(utK(i)+b))+12utKu

m × m u m × 1K es una matriz , y es una matriz . Tampoco es infinito.m×mum×1

De hecho, el dual generalmente es más rápido de resolver, pero el primal también tiene sus ventajas, como soluciones aproximadas (que no están garantizadas en la formulación dual).


Ahora, por qué el dual es mucho más prominente no es obvio en absoluto: [1]

Las razones históricas por las cuales la mayor parte de la investigación en la última década ha sido sobre la optimización dual no están claras . Creemos que se debe a que los SVM se introdujeron por primera vez en su formulación de margen duro [Boser et al., 1992], para lo cual una optimización dual (debido a las restricciones) parece más natural. Sin embargo, en general, se deben preferir los SVM de margen blando, incluso si los datos de entrenamiento son separables: el límite de decisión es más robusto porque se tienen en cuenta más puntos de entrenamiento [Chapelle et al., 2000]


Chapelle (2007) argumenta que la complejidad temporal de la optimización primaria y dual es , el peor de los casos es , pero analizaron las pérdidas de bisagra cuadráticas y aproximadas, por lo que no es una pérdida de bisagra adecuada, ya que no es diferenciable para usarse con el método de Newton. O ( n 3 )O(nnsv+nsv3)O(n3)


[1] Chapelle, O. (2007). Entrenamiento de una máquina de vectores de soporte en el primario. Cálculo neuronal, 19 (5), 1155-1178.

Firebug
fuente
1
+1 ¿Podría ampliar también la complejidad del tiempo?
seanv507
@ seanv507 gracias, de hecho debería haber abordado eso, pronto actualizaré esta respuesta.
Firebug
4

Si aplicamos una transformación a todos los vectores de peso de entrada ( ), obtenemos la siguiente función de costo:x ( i )ϕx(i)

J(w,b)=Ci=1mmax(0,1y(i)(wtϕ(x(i))+b))+12wtw

El truco del núcleo reemplaza por . Dado que el vector de peso es no transformado, el truco del núcleo no se puede aplicar a la función de coste superior .K ( u , v ) wϕ(u)tϕ(v)K(u,v)w

La función de costo anterior corresponde a la forma primaria del objetivo SVM:

minw,b,ζCi=1mζ(i)+12wtw

sujeto a y paraζ ( i )0 i = 1 , , my(i)(wtϕ(x(i))+b)1ζ(i))ζ(i)0i=1,,m

La forma dual es:

minα12αtQα1tα

sujeto a y para0 α iCi=1,2,,mytα=00αiCi=1,2,,m

donde es un vector lleno de 1s y es una matriz con elementos .Q m × m Q i j = y ( i ) y ( j ) ϕ ( x ( i ) ) tϕ ( x ( j ) )1Qm×mQij=y(i)y(j)ϕ(x(i))tϕ(x(j))

Ahora podemos usar el truco del kernel calculando así:Qij

Qyoj=y(yo)y(j)K(X(yo),X(j))

Por lo tanto, el truco del kernel solo se puede usar en la forma dual del problema SVM (además de algunos otros algoritmos como la regresión logística).

Ahora puede usar bibliotecas de programación cuadrática disponibles para resolver este problema, o usar multiplicadores lagrangianos para obtener una función sin restricciones (la función de doble costo), luego busque un mínimo usando Gradient Descent o cualquier otra técnica de optimización. Uno de los enfoques más eficientes parece ser el algoritmo SMO implementado por la libsvmbiblioteca (para SVM kernelized).

MiniQuark
fuente
1
No estoy seguro de por qué marcó su respuesta Community Wiki. Esto parece una respuesta perfectamente válida a su pregunta.
Sycorax dice Reinstate Monica
Gracias @GeneralAbrial. Marqué mi respuesta como Community Wiki para evitar cualquier sospecha de que sabía la respuesta antes de hacer la pregunta.
MiniQuark
1
Siempre debe hacer lo que cree que es correcto, pero es perfectamente kosher preguntar y responder su propia pregunta.
Sycorax dice Reinstate Monica
Espera, ¿no podrías transformar el vector de peso en para que y , con , y luego optimizar los pesos de muestra ? w t ϕ ( x ) = uK w t w = u t K u K = ϕ t ϕ uw=ϕ(X)tuwtϕ(X)=tuKwtw=tutKtuK=ϕtϕtu
Firebug
2

Podría estar equivocado, pero no veo cómo podemos reemplazar los productos de punto con núcleos sin convertirlo en el doble problema.

Los núcleos asignan la entrada implícitamente a algún espacio de características donde convierte en , la función de pérdida se convierte en Si se aplica el núcleo gaussiano, tendrá ifinite dimensiones, también lo hará .ϕ ( x ) J ( w , b ) = C m i = 1 m a x ( 0 , 1 - y ( i ) ( w tϕ ( x ( i ) ) + b ) )Xϕ(X)
ϕ(x(i))wJ(w,si)=doyo=1metrometrounaX(0 0,1-y(yo)(wtϕ(X(yo))+si))+12wtw
ϕ(X(yo))w

Parece difícil optimizar un vector de dimensiones infinitas usando el descenso de gradiente directamente.


La respuesta de Actualización de Firebug ofrece una forma de reemplazar los productos de punto con granos en la formulación primaria.

dontloo
fuente