¿Cuál es el truco del núcleo?

Comencemos por entender qué es el núcleo. Si lees la respuesta de Nikhil Garg a ¿Qué son los núcleos en el aprendizaje automático y SVM y por qué los necesitamos ?, entenderías que el núcleo es esencialmente una función de mapeo, una que transforma un espacio dado en otro (generalmente de muy alta dimensión) espacio.

Como resultado, al resolver la SVM, solo necesitamos conocer el producto interno de los vectores en el espacio de coordenadas. Digamos que elegimos un núcleo [matemática] K [/ matemática] y [matemática] P1 [/ matemática] y [matemática] P2 [/ matemática] son ​​dos puntos en el espacio original. [math] K [/ math] correlacionaría estos puntos con [math] K (P1) [/ math] y [math] K (P2) [/ math] en el espacio transformado. Para encontrar la solución usando SVM, solo necesitamos calcular el producto interno de los puntos transformados [math] K (P1) [/ math] y [math] K (P2) [/ math].

Si denotamos [math] S [/ math] como la función de similitud en el espacio transformado (como se expresa en los términos del espacio original), entonces:

[matemáticas] S (P1, P2) [/ matemáticas] = [matemáticas] [/ matemáticas]

El truco de Kernel es esencialmente definir [matemática] S [/ matemática] en términos del espacio original en sí mismo sin siquiera definir (o incluso saber) cuál es la función de transformación [matemática] K [/ matemática].

Permítanme ilustrar con un ejemplo. Digamos que el espacio original es un espacio cartesiano bidimensional. Digamos que definimos la función de similitud de la siguiente manera:

[matemáticas] S (P (x_1, y_1), P (x_2, y_2)) [/ matemáticas] = [matemáticas] x_1 ^ 2x_2 ^ 2 + y_1 ^ 2y_2 ^ 2 + 2x_1y_1 * x_2y_2 [/ matemáticas]

y luego resuelve el problema SVM. Sin darnos cuenta, hemos proyectado nuestros puntos en un espacio dimensional superior (en este caso tridimensional) y luego hemos tomado el producto interno habitual en ese espacio. Intentemos ver cuál era la función del núcleo [math] K [/ math] en este caso.

[matemáticas] x_1 ^ 2x_2 ^ 2 + y_1 ^ 2y_2 ^ 2 + 2x_1y_1 * x_2y_2 [/ matemáticas]
= [matemáticas] [/ matemáticas]

Entonces [matemáticas] K (x, y) = (x ^ 2, y ^ 2, \ sqrt2 xy) [/ matemáticas]


Entonces, ¿por qué es útil? ¿Por qué incluso se llama un truco?

Para que un núcleo sea útil, normalmente necesitaría tener una gran cantidad de dimensiones (en los núcleos más populares, incluso infinitos). Pero transformar los datos de entrada en un espacio dimensional tan grande puede requerir mucha potencia de cálculo. Aquí es donde entra en juego el truco Kernel: podemos elegir un kernel [1] donde el espacio transformado es de alta dimensión y, sin embargo, es fácil calcular la puntuación de similitud en el espacio original.

Por ejemplo, si definimos nuestra función de similitud como:

[matemáticas] S (P1, P2) [/ matemáticas] = [matemáticas] e ^ {- || P1 – P2 ||} [/ matemáticas]

La función del núcleo es un espacio dimensional infinito, pero aún así la similitud es fácil de calcular.

También para que lo sepas, la mayoría de las personas usan [math] K [/ math] para denotar la función de similitud en lugar de [math] S [/ math] porque aclara que la similitud está en el espacio transformado aunque se exprese en términos del original espacio. Además, gracias al truco del kernel, ya no necesitamos hablar sobre la función de transformación, por lo que [math] K [/ math] es gratuito para que lo usemos.


[1] Como puede adivinar ahora, vamos al revés: elegimos una función de similitud y esperamos que represente una transformación donde los datos sean separables. Además, hay algunas restricciones en la función de similitud [matemáticas] K [/ matemáticas] para que este truco funcione. Aunque conocerlos no es crucial para comprender cuál es realmente el truco.

Las otras respuestas son buenas, pero siento que hablan más sobre por qué el Truco del Kernel es genial. Aquí hablaré sobre lo que es y llegaré a los detalles más pequeños para ayudarlo a comprender mejor el concepto subyacente. Comenzaré con el ejemplo más común y luego expandiré al caso general. Esta respuesta debería aclarar todas las razones por las cuales el truco de Kernel funciona, incluyendo ¿qué significa trabajar en una dimensión infinita?

Figura 1: Ejemplo de datos etiquetados inseparables en 2-Dimension es separable en 3-Dimension. Fuente: [ 4 ]

En el ejemplo anterior, los datos originales están en 2 dimensiones. Supongamos que lo denotamos como, [math] \ mathbf {x} = \ {x_1, x_2 \} [/ math]. Podemos ver en la Fig. [Math] ~ [/ math] 1 (izquierda) que [math] \ mathbf {x} [/ math] es inseparable en su espacio. Pero son separables en este espacio transformado (ver Fig. [Matemáticas] ~ [/ matemáticas] 1, derecha),

[matemáticas] \ Phi (\ mathbf {x}) \ rightarrow {x_1 ^ 2, x_2 ^ 2, \ sqrt {2} x_1x_2} [/ math]

donde, [math] \ Phi [/ math] es una función de transformación de 2-D a 3-D aplicada en [math] \ mathbf {x} [/ math]. Estos puntos se pueden separar con la transformación [math] \ Phi (\ mathbf {x}) \ rightarrow {x_1 ^ 2, x_2 ^ 2} [/ math] también, pero el anterior ayudará a explicar el uso de una dimensión superior espacio. El [math] \ sqrt {2} [/ math] no es necesario pero hará que nuestras explicaciones adicionales sean matemáticamente convenientes .

Ahora podemos tener un límite de decisión en este espacio tridimensional de [matemáticas] \ Phi [/ matemáticas] que se verá así,

[matemáticas] \ beta_0 + \ beta_1x_1 ^ 2 + \ beta_2x_2 ^ 2 + \ beta_3 \ sqrt {2} x_1x_2 = 0 ~~~~ (2) [/ matemáticas]

Si estuviéramos haciendo una regresión logística, nuestro modelo se vería así: Ecuación [matemática] ~ 2 [/ matemática]. En SVM, se puede encontrar un límite de decisión similar (un clasificador) utilizando el Truco del kernel en su función objetivo. En resumen, para eso necesitamos encontrar los productos de punto de [math] \ langle \ Phi (\ mathbf {x} _ {i}), \ Phi (\ mathbf {x} _ {j}) \ rangle [/ math ] (ver Ec. 13 en [6]). (Tenga en cuenta que el producto punto también es una medida de similitud). Hagamos eso. Lo haré así

Mi manera:

[matemáticas] \ langle \ Phi (\ mathbf {x} _ {i}), \ Phi (\ mathbf {x} _ {j}) \ rangle \\ [/ math]

[matemáticas] = \ langle \ {x_ {i1} ^ {2}, x_ {i2} ^ {2}, \ sqrt {2} x_ {i1} x_ {i2} \}, \ {x_ {j1} ^ { 2}, x_ {j2} ^ {2}, \ sqrt {2} x_ {j1} x_ {j2} \} \ rangle ~~~~ (3.1) \\ [/ math]

[matemáticas] = x_ {i1} ^ {2} x_ {j1} ^ {2} + x_ {i2} ^ {2} x_ {j2} ^ {2} + 2x_ {i1} x_ {i2} x_ {j1} x_ {j2} ~ (3.2) [/ matemáticas]

En cambio, mi amigo Sam, que es más inteligente, hizo lo siguiente:

La manera de Sam:

[matemáticas] \ langle \ mathbf {x} _ {i}, \ mathbf {x} _ {j} \ rangle ^ {2} \\ [/ math]

[matemáticas] = \ langle \ {x_ {i1}, x_ {i2} \}, \ {x_ {j1}, x_ {j2} \} \ rangle ^ {2} ~~~~ \\ [/ math]

[matemáticas] = (x_ {i1} x_ {j1} + x_ {i2} x_ {j2}) ^ {2} ~~~~ (4.1) \\ [/ matemáticas]

[matemáticas] = x_ {i1} ^ {2} x_ {j1} ^ {2} + x_ {i2} ^ {2} x_ {j2} ^ {2} + 2x_ {i1} x_ {i2} x_ {j1} x_ {j2} ~ (4.2) [/ matemáticas]

¿Qué es diferente?

Operaciones de computación:

  • Mi manera : para llegar a la ecuación [math] ~ [/ math] 3.1, realizamos [math] 3 \ times2 [/ math] cálculos para transformar cada una de [math] \ mathbf {x} _i [/ ​​math] y [ math] \ mathbf {x} _j [/ math] en el espacio tridimensional de [math] \ Phi [/ math]. Después de eso, realizamos un producto de punto entre [math] \ Phi (\ mathbf {x} _i) [/ math] y [math] \ Phi (\ mathbf {x} _j) [/ math] que tiene [math] 3 [ / math] operaciones adicionales (en la ecuación [math] ~ [/ math] 3.2). Total: 9 operaciones.
  • La manera de Sam : Hasta la ecuación [matemáticas] ~ [/ matemáticas] 4.1, Sam realizó 2 operaciones de computación. Finalmente, en la ecuación [matemáticas] ~ [/ matemáticas] 4.2, hizo un cálculo más. Total: 3 operaciones. Tenga en cuenta que en la ecuación [math] ~ [/ math] 4.1 estamos cuadrando un escalar, por lo tanto, solo una operación.

Espacio de cómputo:

  • A mi manera : apliqué la función de transformación de mapeo [math] \ Phi [/ math] en mis datos [math] \ mathbf {x} [/ math] ‘s. Y luego realicé mis operaciones en el espacio [math] \ Phi [/ math] (un espacio 3-D).
  • La manera de Sam: Sam no aplicó la función de transformación. Se quedó en el espacio 2-D original y llegó al mismo resultado que obtuve de los cálculos en un espacio 3-D.

Sam es definitivamente más listo que yo. Lo que hizo resultó ser el truco de Kernel. Pero no te dejaré aquí. Vamos a guisar más con más ejemplos.

Supongamos que quisiera una expresión más grande para mi límite de decisión que la de la ecuación [math] ~ [/ math] 2 (porque espero que funcione mejor), que tiene términos de primer y segundo orden como,

[matemáticas] \ beta_0 + \ beta_1x_1 + \ beta_2x_2 + \ beta_3x_1 ^ 2 + \ beta_4x_2 ^ 2 + \ beta_5 \ sqrt {2} x_1x_2 = 0 ~~~~ (5) [/ matemáticas]

Veamos mi camino y el de Sam otra vez,

Mi manera:

Definir, [matemáticas] \ Phi (\ mathbf {x}) \ rightarrow {1, \ sqrt {2} x_1, \ sqrt {2} x_2, x_1 ^ 2, x_2 ^ 2, \ sqrt {2} x_1x_2} [/ mates].

[matemáticas] \ langle \ Phi (\ mathbf {x} _ {i}), \ Phi (\ mathbf {x} _ {j}) \ rangle \\ [/ math]

[matemáticas] = \ langle \ {1, \ sqrt {2} x_ {i1}, \ sqrt {2} x_ {i2}, x_ {i1} ^ 2, x_ {i2} ^ 2, \ sqrt {2} x_ {i1} x_ {i2} \}, \ {1, \ sqrt {2} x_ {j1}, \ sqrt {2} x_ {j2}, x_ {j1} ^ 2, x_ {j2} ^ 2, \ sqrt {2} x_ {j1} x_ {j2} \} \ rangle ~~ (6.1) [/ math]

[matemáticas] = 1 + 2x_ {i1} x_ {j1} + 2x_ {i2} x_ {j2} + x_ {i1} ^ 2x_ {j1} ^ 2 + x_ {i2} ^ 2x_ {j2} ^ 2 + 2x_ { i1} x_ {i2} x_ {j1} x_ {j2} ~ (6.2) [/ matemáticas]

La manera de Sam:

[matemáticas] (1 + \ langle \ mathbf {x} _ {i}, \ mathbf {x} _ {j} \ rangle) ^ {2} \\ [/ matemáticas]

[matemáticas] = (1 + x_ {i1} x_ {j1} + x_ {i2} x_ {j2}) ^ 2 ~~ (7.1) \\ [/ matemáticas]

[matemáticas] = 1 + 2x_ {i1} x_ {j1} + 2x_ {i2} x_ {j2} + x_ {i1} ^ 2x_ {j1} ^ 2 + x_ {i2} ^ 2x_ {j2} ^ 2 + 2x_ { i1} x_ {i2} x_ {j1} x_ {j2} ~ (7.2) [/ matemáticas]

Comparando mi camino y el de Sam otra vez:

  • Tuve que definir explícitamente [matemáticas] \ Phi [/ matemáticas]. Si bien se podría argumentar que Sam también tenía que saber explícitamente agregar un [math] 1 [/ math] al producto punto de [math] \ mathbf {x} _ {i}, \ mathbf {x} _ {j} [/ matemáticas], pero como veremos pronto, el enfoque de Sam puede generalizarse fácilmente.
  • Mi camino tomó 16 operaciones, el camino de Sam solo tomó 3 operaciones. (Nuevamente, tenga en cuenta que en la ecuación [matemáticas] ~ 7 [/ matemáticas] .1 estamos cuadrando un escalar, por lo tanto, solo una operación).
  • Sam nuevamente no dejó el espacio 2-D original para encontrar la misma medida de similitud que encontré en el espacio 5-D.

Del mismo modo, podemos seguir yendo a dimensiones más altas. Si fuera para Sam, puede encontrar fácilmente la medida de similitud que tiene términos de tercer orden en un espacio 9-D al,

La manera de Sam:

[matemáticas] \ langle \ mathbf {x} _ {i}, \ mathbf {x} _ {j} \ rangle ^ {3} \\ [/ math]

[matemáticas] = (x_ {i1} x_ {j1} + x_ {i2} x_ {j2}) ^ {3} ~~~~ (8.1) \\ [/ matemáticas]

[matemáticas] = 1 + 3x_ {i1} x_ {j1} + 3x_ {i2} x_ {j2} + 3x_ {i1} ^ 2x_ {j1} ^ 2 + 3x_ {i2} ^ 2x_ {j2} ^ 2 + x_ { i1} ^ 3x_ {j1} ^ 3 + x_ {i2} ^ 3x_ {j2} ^ 3 + 3x_ {i1} ^ 2x_ {j1} ^ 2x_ {i2} x_ {j2} + 3x_ {i1} x_ {j1} x_ {i2} ^ 2x_ {j2} ^ 2 + 6x_ {i1} x_ {j1} x_ {i2} x_ {j2} ~ (8.2) [/ matemáticas]

En este punto, ni siquiera me molestaré en seguir mi camino. Espero que entiendas por qué el camino de Sam es claramente mejor que el mío. Simplemente está calculando el producto punto en el espacio original y elevando el resultado (un escalar) a una potencia. Y esta es exactamente la medida de similitud en un espacio dimensional superior.

Este es precisamente el truco de Kernel. Ahora hagamos coincidir los términos y afirmaciones del truco Kernel definido anteriormente con el método de Sam.

  • Kernel: en los ejemplos anteriores, las funciones de Kernel utilizadas por Sam son,
  • [matemáticas] K (\ mathbf {x} _i, \ mathbf {x} _ {j}) = \ langle \ mathbf {x} _i, \ mathbf {x} _ {j} \ rangle ^ 2 [/ math]
  • [matemáticas] K (\ mathbf {x} _i, \ mathbf {x} _ {j}) = (1+ \ langle \ mathbf {x} _i, \ mathbf {x} _ {j} \ rangle) ^ 2 [ /mates]
  • [matemáticas] K (\ mathbf {x} _i, \ mathbf {x} _ {j}) = \ langle \ mathbf {x} _i, \ mathbf {x} _ {j} \ rangle ^ 3 [/ math]
  • Función de mapeo: Sam no necesitaba conocer una función de mapeo de 3, 5 o 9 dimensiones, [matemática] \ Phi [/ matemática], para obtener la medida de similitud en estas dimensiones altas.
  • Resumen mágico : todo lo que Sam necesita hacer es darse cuenta de que hay un espacio dimensional más alto que puede separar los datos. ¡Elija un Kernel correspondiente y listo! Ahora está trabajando en la alta dimensión mientras realiza el cálculo en el espacio original de baja dimensión. Y aún está separando los datos inseparables anteriores. Los ejemplos de kernel que Sam ha usado hasta ahora son casos especiales de un kernel lineal, [math] K (\ mathbf {x} _i, \ mathbf {x} _j) = (a \ langle \ mathbf {x} _i, \ mathbf {x x } _j \ rangle + b) ^ n [/ math].

    ¿Cómo funciona el truco de Kernel en dimensión infinita?

    Bueno, este no es el final. Recuerde que me dijeron que Kernels puede encontrar las similitudes en espacios de dimensiones infinitas (y, por supuesto, no hacer cálculos en el espacio infinito). Si todavía estás conmigo hasta ahora, prepárate para este loco.

    Aquí está el truco detrás de esta magia. Mostraré el truco con un Kernel gaussiano (también llamado Función de base radial, RBF), y la misma lógica puede extenderse a otros Kernels de dimensiones infinitas, como Exponencial, Laplace, etc.

    Un núcleo gaussiano se define como,

    [matemáticas] K (\ mathbf {x} _i, \ mathbf {x} _j) = \ exp {\ left (- \ cfrac {|| \ mathbf {x} _i- \ mathbf {x} _j || ^ 2} {2 \ sigma ^ 2} \ right)} ~~~~ (9) [/ math]

    Por simplicidad, suponga [math] \ sigma = 1 [/ math]. El núcleo gaussiano en la ecuación [math] ~ [/ math] 9 puede entonces expandirse como,

    [matemáticas] \ exp {\ left (- \ cfrac {|| \ mathbf {x} _i- \ mathbf {x} _j || ^ 2} {2} \ right)} = C \ Big \ {1- \ underbrace {\ cfrac {\ langle \ mathbf {x} _ {i}, \ mathbf {x} _ {j} \ rangle} {1!}} _ {1er orden} + \ underbrace {\ cfrac {\ langle \ mathbf {x} _ {i}, \ mathbf {x} _ {j} \ rangle ^ {2}} {2!}} _ {2do orden} – \ underbrace {\ cfrac {\ langle \ mathbf {x} _ {i}, \ mathbf {x} _ {j} \ rangle ^ {3}} {3!}} _ {3er orden} + \ ldots \ Big \} [/ math]

    donde, [matemáticas] C = \ exp {\ left (- \ cfrac {1} {2} || \ mathbf {x} _i || ^ 2 \ right)} \ exp {\ left (- \ cfrac {1} {2} || \ mathbf {x} _j || ^ 2 \ right)} [/ math]

    Según el cálculo de Sam, ahora sabemos que [math] \ langle \ mathbf {x} _ {i}, \ mathbf {x} _ {j} \ rangle ^ n [/ math] producirá [math] n [/ math ] -terminos de pedido. Como el gaussiano tiene una expansión de series infinitas, obtenemos términos de todos los pedidos hasta el infinito. Y, por lo tanto, un núcleo gaussiano nos permite encontrar similitudes en una dimensión infinita. También en este caso, todo el cálculo que tenemos que hacer es encontrar la distancia euclidiana al cuadrado entre [math] \ mathbf {x} _i [/ ​​math] y [math] \ mathbf {x} _j [/ math], y encontrar su exponencial (los cálculos ocurren en el espacio original).

    ¿Entonces Sam no tiene nada de qué preocuparse mientras usa Kernels?

    Lo hace. Al final, él necesita

    • elegir cuál de las funciones de Kernel usar. [1] tiene una lista exhaustiva de Kernels para elegir. Y,
    • sintonice los hiperparámetros de un núcleo. Por ejemplo, en Gaussian Kernel necesitamos ajustar [math] \ sigma [/ math]. [5] tiene una lista de documentos que hablan de esto.

    Versión completa: The Kernel Trick por Chitta Ranjan en Data Science for Mortals

    En esta publicación, traté de explicar los detalles elementales del truco del kernel. Mi objetivo es que entiendas el truco del kernel. Por favor, deje un comentario si no entendió una parte o nada de eso.

    Actualizar:

    ¿Necesitamos conocer primero la función Kernel apropiada? (gracias, Sean Cascketta)

    Sí, necesitamos determinar qué función de Kernel será apropiada. Sin embargo, no necesitamos saberlo primero. Primero, tenemos que darnos cuenta de que un límite de decisión lineal no va a funcionar. Esto se logra cuando se ve una precisión deficiente del modelo, y se puede utilizar cierta visualización de datos (por ejemplo, la Figura 1), si es posible. Al darnos cuenta de que el límite lineal no va a funcionar, vamos por un truco de Kernel. Todos los núcleos conducirán a un límite de decisión no lineal, y posiblemente mejor. [1] da una lista exhaustiva de opciones. Pero no hay una forma directa de saber qué función de Kernel será la mejor opción. Los métodos de optimización del modelo de aprendizaje automático convencional, como la validación cruzada, se pueden utilizar para encontrar la función del núcleo que funcione mejor. Sin embargo, dado que con el truco Kernel no hay un cálculo adicional para separar los puntos de datos en alguna dimensión alta o infinita, las personas simplemente van con la dimensión infinita usando el Kernel Gaussiano (RBF). RBF es el kernel más utilizado. Tiene un hiperparámetro de ajuste [math] \ sigma [/ math] que está sintonizado para elegir entre un límite suave o con curvas. En resumen, como regla general, una vez que se dé cuenta de que el límite lineal no va a funcionar, pruebe con un límite no lineal con un núcleo RBF.

    Referencias

    [1] Funciones del núcleo para aplicaciones de aprendizaje automático

    [2] ¿Alguien puede explicar Kernel Trick intuitivamente?

    [3] El truco del grano

    [4] Berkeley CS281B Lecture: The Kernel Trick

    [5] Máquinas de vectores de soporte: parámetros

    [6] Máquinas de vectores de soporte: Conferencia (Stanford CS 229)

    ¿Qué es el “truco del kernel”?

    Hay muchas respuestas excelentes en este hilo que abordan las matemáticas de los núcleos, pero el “truco del núcleo” en sí mismo es bastante simple:

    Si un algoritmo se describe únicamente en términos de productos internos en el espacio de entrada, entonces puede elevarse al espacio de características reemplazando las ocurrencias de esos productos internos por k (x, x ‘); Esto a veces se llama el truco del núcleo.

    Rasmussen y Williams, “Procesos gaussianos para el aprendizaje automático”, MIT press, 2006.

    Reemplazar los productos internos [math] [/ math] en un algoritmo con un kernel [math] k (x, x’) [/ math] se llama “kernelizing” el algoritmo. Eso es todo lo que hay para el truco del núcleo.

    Bien, si todavía estás aquí, algunas advertencias:

    Un kernel de Mercer garantizará un algoritmo válido, pero algunos otros kernel también funcionarán. A menudo se usa un gaussiano como núcleo. Además de ser Mercer, se dice que los núcleos gaussianos son universales : cualquier función que cumpla con ciertos requisitos de suavidad se puede aproximar a un error arbitrariamente pequeño con los núcleos universales.

    Porque es esto importante

    Si kerneliza algunos algoritmos lineales de aprendizaje automático bien conocidos con un kernel gaussiano (por ejemplo), entonces se vuelven no lineales :

    El análisis de componentes principales (PCA) en características finitas se convierte en PCA no lineal en el espacio de características infinitas. En lugar de realizar PCA en coordenadas lineales ortogonales, ahora puede trabajar en características no lineales de dimensiones infinitas. Los clústeres que no pueden separarse por un plano lineal pero que son distintos ahora pueden separarse siempre que haya suficientes datos.

    Mínimos cuadrados ordinarios (OLS) en entidades finitas se convierte en OLS no lineales en espacios de entidades infinitas. Esto significa que y = f (x) donde f es no lineal ahora se puede expresar como una ecuación simple análoga a OLS, pero en características infinitas.

    Los mínimos cuadrados parciales (PLS) en entidades finitas se convierten en PLS no lineales en espacios de entidades infinitas.

    y así.

    Impacto en el campo del aprendizaje automático

    El truco del núcleo significa que puede escribir algoritmos de aprendizaje automático no lineales válidos (eficientes y rápidos) sin saber nada más que cómo escribir algoritmos de aprendizaje automático lineales. Este fue un gran problema

    El truco del kernel generó una industria artesanal que generaba documentos al tomar algoritmos bien conocidos, reescribirlos en forma interna del producto, sustituirlos en un kernel no lineal y demostrar cómo el algoritmo resultante se adapta mejor a las relaciones no lineales. Se necesitaron varios de estos documentos antes de que los estadísticos se dieran cuenta de que es una manera simple de escribir un artículo y obtener nuevos y mejores resultados.

    Limitaciones

    Observe que el truco del kernel solo hace que las variables de entrada X (potencialmente) no sean lineales, ey no se ve afectado. Esto significa que kernelizing un algoritmo como el Análisis de correlación canónica (CCA) en X e Y es más complicado. Aunque existen métodos que pueden usarse para abordar esto, el algoritmo resultante a menudo se complicará por iteraciones y proyecciones proximales.

    Además, los algoritmos kernelized generalmente funcionan en el espacio dual . Esto significa que en lugar de tratar con matrices de tamaño k X k, donde k es el número de características , tienen un tamaño n X n, donde n es el número de observaciones de referencia . Así es como pueden trabajar con espacios de características de dimensión infinita, pero también significa que no pueden manejar una gran cantidad de observaciones, por lo que los “datos grandes” generalmente necesitan algunos trucos adicionales, como la factorización de Nyström o la selección cuidadosa de las observaciones de referencia.

    Recursos

    Si desea aprender a usar los núcleos y el truco del núcleo, Rasmussen y Williams es un excelente recurso: puede leerlo en línea de forma gratuita aquí. Estudie el Capítulo 2, sección 2.2 cuidadosamente; tiene un algoritmo en esa sección para OLS kernelized. Otro libro que recomiendo es “Aprendiendo con los núcleos de Bernhard Schölkopf: Máquinas de vectores de soporte, regularización, optimización y más allá”. Este libro enfatiza la kernelización de SVM.

    1. Para un conjunto de datos con n características (~ n-dimensional), los SVM encuentran un hiperplano n-1 dimensional para separarlo (digamos para la clasificación)
    2. Por lo tanto, los SVM funcionan muy mal con conjuntos de datos que no son separables linealmente
    3. Pero, con bastante frecuencia, es posible transformar nuestro conjunto de datos no separable linealmente en un conjunto de datos de dimensiones superiores donde se vuelve separable linealmente, para que los SVM puedan hacer un buen trabajo
    4. Desafortunadamente, con bastante frecuencia, el número de dimensiones que tiene que agregar (mediante transformaciones) depende del número de dimensiones que ya tiene (y no linealmente 🙁)
    1. Para conjuntos de datos con muchas características, resulta casi imposible probar todas las transformaciones interesantes
  • Entra en el truco del kernel
    1. Afortunadamente, lo único que los SVM deben hacer en el espacio de características (de mayor dimensión) (durante el entrenamiento) es calcular los productos de punto por pares
    2. Para un par dado de vectores (en un espacio de características de dimensiones más bajas) y una transformación en un espacio de dimensiones más altas, existe una función (La Función Kernel) que puede calcular el producto escalar en el espacio de dimensiones más altas sin transformar explícitamente el vectores en el espacio de dimensiones superiores primero
    3. ¡Somos salvos!
  • SVM ahora puede funcionar bien con conjuntos de datos que no son linealmente separables
  • Nikhil Garg dio una muy buena explicación en profundidad, por lo que trataré de explicar esto más cerca de los términos simples, para cualquiera que no se sienta cómodo con las matemáticas involucradas y quiera obtener un catador simplificado.

    El truco del kernel es un concepto interesante, debido a cómo se desarrolló. Pero para entender eso, necesitamos ver cómo se desarrolló.

    Las máquinas de vectores de soporte (SVM) son una clase de técnicas de aprendizaje automático que tienen como objetivo encontrar el “plano de separación más alta” entre dos clases. Es más fácil visualizar esto en 2D: digamos que tiene una clase de puntos “rojos” en el primer cuadrante (coordenadas positivas) y una clase de puntos “azules” en el tercer cuadrante (coordenadas negativas). Claramente, hay infinitas líneas rectas que separan las dos clases (es decir, todos los puntos rojos están en un lado de la línea y todos los puntos azules están en el otro lado): por ejemplo, todas las líneas que cruzan el origen , y de lo contrario solo están en los cuadrantes II y IV. Ahora, algunos separadores serán mejores para clasificar un nuevo punto (adivinando su color según sus coordenadas) que otros. Lo que los SVM pretenden hacer es encontrar el “plano de mayor separación”, es decir, el separador que tiene la mayor distancia de sí mismo a los miembros más cercanos de cada clase, de acuerdo con alguna medida de distancia. (*) Entonces, en nuestro caso 2D, queremos ver todas las líneas de separación posibles, calcular la distancia mínima desde cualquier punto de nuestro conjunto de datos (independientemente de la clase) a esa línea, y elegir la línea para la cual esta distancia mínima es tan grande como sea posible.

    Si siguió hasta ahora, puede recordar cómo dije que hay infinitos candidatos. Ahora, las computadoras no son inteligentes, solo son rápidas. Sin embargo, no son infinitamente rápidos, por lo que simplemente pedirle a una computadora que resuelva el problema en esta formulación (*) no va a funcionar. En cambio, algunos matemáticos inteligentes pensaron cómo reformular este problema para que tenga una aproximación finita razonablemente precisa.

    En esta nueva formulación, todo estuvo bien y bien. Sin embargo, estamos hablando de matemáticos aquí, y a ellos les ENCANTA abstraer las cosas. ¿Recuerdas cómo dije antes “… según alguna medida de distancia”? Bueno, al reorganizar la formulación matemática del problema para que sea manejable (computacionalmente factible), resultó que puede enchufar cualquier función que tome dos “representaciones de vectores de características” (representaciones matemáticas de las características de sus puntos de datos, por ejemplo, el peso , altura, color de ojos, fumar / no fumar, etc.) y devuelve la “distancia” entre ellos, y puede definir “distancia” como desee.

    Para una idea más intuitiva de por qué varias definiciones de distancia podrían tener sentido, considere Manhattan, con su cuadrícula de calles. Digamos que desea entregar un paquete de 4 km al este y 3 km al norte. Ahora, como tienes que caminar por las calles, caminarías 7 km. Sin embargo, si pudieras usar un dron, necesitaría viajar solo 5 km. Tanto 5 km como 7 km son distancias válidas entre los 2 puntos, y ambos tienen sus usos.

    De todos modos, volvamos a la distancia entre los vectores de características. Algunos investigadores inteligentes descubrieron que si bien se puede llamar distancia a cualquier cosa, una clase particularmente útil de funciones de distancia son aquellas que toman los dos vectores y devuelven su producto interno en un espacio de alta dimensión (posiblemente infinita). Ahora, este bit en particular es bastante difícil de explicar a cualquiera que solo esté familiarizado con la geometría euclidiana (la “única” geometría, en lo que respecta a los no matemáticos *). Pero piénselo de esta manera: ¿qué pasa si, en otra “dimensión” (en el sentido de la ciencia ficción), hay más de una forma de dibujar una línea a través de un punto dado, de modo que sea paralela a una línea dada? En ese mundo, claramente las reglas de geometría tal como las conocemos no se aplican, por lo que el concepto de distancia bien podría ser diferente. Ahora, acabamos de llegar a un uso práctico (quizás inesperado) de estos conceptos “extraños”: dado que el producto interno en el espacio euclidiano (también conocido como espacio tal como lo conocemos, excepto quizás con 2,3,4,100, o dimensiones infinitas) es nuestro definición de distancia, mire otros “tipos” de espacio y use el producto interno como una medida de distancia, lo que resulta que da buenos resultados cuando se busca resolver el problema de SVM (a veces).

    Ahora, ¿por qué tanto alboroto sobre el “truco del núcleo”? Bueno, resulta que podemos inventar algunas funciones arbitrarias, y si obedecen las condiciones del Teorema de Mercer, entonces podemos decir que la función que acabamos de inventar es un producto interno de * algún * espacio. La ventaja aquí es que tenemos una fórmula (con suerte) concisa y fácil de calcular para algo que bien podría suceder en un espacio de alta dimensión, o incluso de dimensión infinita. Y este es el truco del núcleo: se te ocurrió una manera rápida de hacer un cálculo potencialmente infinito, abstrayendo varios niveles y dejando atrás a muchos matemáticos confundidos, que no entienden cómo o por qué reorganizaste los números HACER EL INFINITO FINITO!

    Ah, y como una ventaja adicional, las computadoras son bastante buenas para resolver el problema en el que acabamos de transformar nuestra declaración inicial.

    * sí, los físicos, ingenieros y otros estarán al tanto de las geometrías no euclidianas, y tal vez incluso las usen, pero en aras de la discusión, permítanme esta frase

    El truco del núcleo consiste en tomar un conjunto de datos que posiblemente implique un espacio curvo e incrustarlo en un espacio de dimensiones superiores para “aplanarlo”, ya que muchos métodos de aprendizaje automático luchan con múltiples curvas.

    Kernels Parte 1: ¿Qué es un Kernel RBF? De Verdad?

    Granos Parte 2: Gravedad Cuántica Afina

    Granos y gravedad cuántica Parte 3: Estados coherentes


    Para obtener más datos divertidos y respuestas increíbles, consulte mi canal de YouTube https://www.youtube.com/channel/

    y sígueme en Twitter https://twitter.com/CalcCon