La antigua forma de implementar máquinas de vectores de soporte (SVM) era usar el algoritmo de optimización mínima secuencial (SMO), pero el enfoque moderno actual es lanzar SVM como optimización de la función de pérdida de bisagra regularizada utilizando algoritmos de optimización basados en gradientes decentes. SMO también es fácil de implementar, pero si desea un SVM lineal rápidamente, este es el mejor enfoque.
Debe implementar el descenso de gradiente estocástico (SGD) porque esto realmente se puede usar con la regularización para entrenar SVM. De hecho, he hecho esto para un SVM lineal, pero también puedes extenderlo fácilmente a los métodos del núcleo.
Por lo tanto, la SVM puede verse como una minimización de la función de pérdida de bisagra dada por:
- ¿Cuáles son los casos de uso del uso del procesamiento del lenguaje natural (PNL) en diversas industrias?
- ¿Cuáles son algunos ejemplos de aprendizaje automático en operaciones de computación en la nube?
- ¿Cuál es la relación entre IA, aprendizaje automático y ciencias de la computación? ¿Hay especializaciones en IA o aprendizaje automático, o son especializaciones en informática?
- ¿Cómo se implementa una pila en hardware para subrutinas de nivel de código de máquina?
- ¿Cómo deberíamos acelerar el procesamiento de datos del lenguaje R?
[matemáticas] f (W, b) = \ frac {1} {n} \ sum_ {i = 1} ^ {n} max (0,1-y_i (W ^ {T} X_i + b)) + \ frac {\ lambda} {2} \ | W \ | ^ 2 [/ math]
La solución a la función de pérdida de bisagra da como resultado un hiperplano de margen máximo que es solo un SVM, esta es una interpretación moderna y encaja muy bien con la mayoría de los algoritmos de aprendizaje automático.
Aquí estoy usando la regularización [math] L_2 [/ math] pero también puedes probar esto con la regularización [math] L_1 [/ math]. El término de error en realidad no es diferenciable, por lo tanto, hay dos formas de minimizar la función de pérdida.
- Utilice la función de pérdida de registro diferenciable en su lugar: [matemática] L (x) = log (1 + e ^ {- x}) [/ matemática]
- O usa los sub-gradientes
Prefiero los sub-gradientes, en cuyo caso tendrá la siguiente regla de actualización SGD.
[matemáticas] W \ longleftarrow W- \ gamma_ {t} \ begin {cases} {\ lambda} W, & \ text {if} {y_t} W ^ {T} {X_i} + b> 1 \\ \ lambda { W} – {y_i} X_i, & \ text {de lo contrario} \ end {cases} [/ math]
Esto es realmente muy fácil, pero necesitarás jugar con [math] \ lambda [/ math] el factor de regularización para que esto funcione bien. También debe establecer la velocidad de aprendizaje [matemática] \ gamma_t [/ matemática], ya sea un valor constante [matemática] \ aprox [/ matemática] 0.02 o uno en decadencia con impulso. La elección es suya, puede hacer esto tan complejo como te gusta dependiendo de qué tan estable sea la optimización.
También puede regularizar el sesgo agregándolo al vector [math] W [/ math]. Luego deberá agregar una entrada correspondiente a todos los vectores de entrada, las X, con un valor de 1.
Entonces las ecuaciones se vuelven.
[matemáticas] f (W) = \ frac {1} {n} \ sum_ {i = 1} ^ {n} max (0,1-y_i (W ^ {T} X_i)) + \ frac {\ lambda} {2} \ | W \ | ^ 2 [/ matemáticas]
Y la regla de actualización SGD se convierte en
[matemáticas] W \ longleftarrow W- \ gamma_ {t} \ begin {cases} {\ lambda} W, & \ text {if} {y_t} W ^ {T} {X_i}> 1 \\ \ lambda {W} – {y_i} X_i, & \ text {de lo contrario} \ end {cases} [/ math]
Espero que esto ayude.