Mucho asombro y misticismo están asociados con los núcleos, pero creemos que no son tan importantes. Los granos son una combinación de dos buenas ideas, tienen una propiedad importante y están sujetos a una limitación importante. También es lamentable que las máquinas de vectores de soporte y los núcleos estén tan unidos entre sí. Los núcleos son la idea de sumar funciones que imitan la similitud (inducen una codificación positiva de proximidad) y las máquinas de vectores de soporte son la idea de resolver un problema dual inteligente para maximizar una cantidad llamada margen. Cada uno es una herramienta útil incluso sin el otro.
Las dos buenas ideas están relacionadas y desafortunadamente tratadas como si fueran lo mismo. Las dos buenas ideas que prometimos son:
- El “truco del núcleo”. Agregar nuevas características / variables que son funciones de sus otras variables de entrada puede cambiar problemas linealmente inseparables en problemas linealmente separables. Por ejemplo, si nuestros puntos se codificaron no como u (i) = (x (i), y (i)) sino como u (i) = (x (i), y (i), x (i) * x ( i), y (i) * y (i), x (i) * y (i))
- A menudo no necesitas las coordenadas de u (i). Solo le interesan las funciones de distancias || u (i) -u (j) | ^ 2 y, en muchos casos, puede obtenerlas mediante productos internos y relaciones como || u (i) -u (j) || ^ 2 = + – 2 .
Nos expandiremos sobre estos temas más adelante.
La propiedad importante es que los núcleos se ven como productos internos en un espacio transformado. La definición de un núcleo es: existe una función mágica phi () tal que para todo u, v:
.
Esto significa que k (.,.) Se comporta como un producto interno en algún espacio (posiblemente desconocido). La consecuencia importante es la semi-definición positiva, que implica k (u, u) ≥0 para todo u (y esto se deduce del hecho sobre los productos internos sobre los números reales que ≥0 para todo z) . Esta es la razón por la cual los problemas de optimización que usan el núcleo como su codificación están bien formados (como el problema de optimización de maximizar el margen, que es cómo funcionan las máquinas de vectores de soporte). Puede “regularizar” los problemas de optimización con una penalización del núcleo porque se comporta como una norma. Sin la propiedad semidefinida positiva, todos estos problemas de optimización podrían “ejecutarse hasta el infinito negativo” o utilizar términos negativos (que no son posibles desde un núcleo) para ocultar altas tasas de error. Los límites de las funciones del núcleo (no poder convertir las penalizaciones de distancia en bonos) ayudan a garantizar que el resultado de la optimización sea realmente útil (y no solo una falla en nuestra codificación problemática).
Y esto nos lleva a las principales limitaciones de los núcleos. La transformación phi () puede ser arbitrariamente mágica, excepto cuando se transforma un vector que no sabe cuál es el otro vector y phi () ni siquiera sabe qué lado del producto interno está codificando. Es decir, los núcleos no son tan potentes como cualquiera de las siguientes formas:
- husmeando (conociendo al otro):
- posicional (saber a qué parte del mapeo interno del producto):
- totalmente general:
No todo es un núcleo.
Algunos no núcleos son:
- k (u, v) = -c para cualquier c> 0
- k (u, v) = || uv ||
Esto se puede demostrar de la siguiente manera. Supongamos que k (u, v) es un núcleo con k (u, u) = 0 para todos los u (lo cual es necesario para hacer coincidir || uv || como || uu || = 0 para todos los u). Por definición
de núcleos k (u, u) = para alguna función real con valor vectorial phi (.). Pero, por las propiedades del producto interno real interno <.,.>, Esto significa que phi (u) es
el vector cero para todos ustedes. Entonces k (u, v) = 0 para todo u, v y no coincide con || uv || para cualquier u, v tal que u ≠ v.
Hay algunos núcleos obvios:
- k (u, v) = c para cualquier c ≥ 0 (núcleos constantes no negativos)
- k (u, v) = (el núcleo de identidad)
- k (u, v) = f (u) f (v) para cualquier función con valor real f (.)
- k (u, v) = para cualquier función con valor vectorial real f (.) (de nuevo, la definición de un núcleo)
- k (u, v) = transponer (u) B v donde B es cualquier matriz simétrica positiva simétrica
Y hay varias formas sutiles de construir nuevos núcleos a partir de viejos. Si q (.,.) Yr (.,.) Son núcleos, entonces también lo son:
- k (u, v) = q (u, v) + r (u, v)
- k (u, v) = cq (u, v) para cualquier c ≥ 0
- k (u, v) = q (u, v) r (u, v)
- k (u, v) = q (f (u), f (v)) para cualquier función con valor vectorial real f (.)
- k (u, v) = lim_ {k-> infinito} q_k (u, v) donde q_k (u, v) es una secuencia de núcleos y el límite existe.
- k (u, v) = p (q (u, v)) donde p (.) es cualquier polinomio con todos los términos no negativos.
- k (u, v) = f (q (u, v)) donde f (.) es cualquier función con una serie de Taylor absolutamente convergente con todos los términos no negativos.
La mayoría de estos hechos están tomados del excelente libro: John Shawe-Taylor y Nello Cristianini “Kernel Methods for Pattern Analysis”, Cambridge 2004. Estamos permitiendo
núcleos de la forma k (u, v) = donde phi (.) se mapea en un espacio vectorial de dimensiones infinitas (como una serie). La mayoría de estos hechos pueden ser verificados por
imaginando cómo alterar la función phi (.). Por ejemplo, para agregar dos núcleos, simplemente construya un vector más grande con suficientes ranuras para todas las coordenadas para la codificación de vectores
los phi (.) de los dos núcleos que está intentando agregar. Para escalar un núcleo por c, multiplique todas las coordenadas de phi () por sqrt (c).
Multiplicar dos granos es lo más complicado. Sin pérdida de generalidad, suponga q (u, v) = y r (u, v) = yf (.) Y g ( .) se mapean en el mismo espacio vectorial de dimensiones finitas R ^ m (cualquier otra situación se puede simular o aproximar rellenando con ceros y / o tomando límites). Imagine una nueva función vectorial p (.) Que se correlaciona con R ^ {m * m} de manera que p (z) _ {m * (i-1) + j} = f (z) _i g (z) _j. Es fácil comprobar que k (u, v) =
es un núcleo yk (u, v) = q (u, v) r (u, v). (La prueba de referencia usa la notación tensorial y el producto Schur, pero estos son grandes martillos que usan los matemáticos cuando no quieren perder el tiempo con los índices de re-codificación).
Tenga en cuenta que uno de los atractivos de los métodos de kernel es que nunca tiene que implementar ninguna de las construcciones anteriores. Lo que haces es pensar en términos de subrutinas (fácil para los informáticos, desagradable para los matemáticos). Por ejemplo: si tuviera acceso a dos funciones q (.,.) Yr (.,.) Que afirman ser núcleos y desea el núcleo del producto, simplemente, cuando se le pida que evalúe el núcleo, simplemente obtenga los resultados para los dos sub-núcleos y se multiplican (por lo que nunca necesita ver el espacio en el que phi (.) está trabajando implícitamente).
Esta implicidad puede ser importante (aunque se hace demasiado). Por ejemplo, los gaussianos que hemos estado utilizando en todo momento son núcleos, pero núcleos de dimensión infinita, por lo que no podemos representar directamente el espacio en el que viven. Para ver el gaussiano es un núcleo, tenga en cuenta lo siguiente:
Y para todos los c ≥ 0, cada uno de los tres términos de la derecha es un núcleo (el primero porque la serie Taylor de exp () es absolutamente convergente y no negativa y los dos últimos son la forma f (u) f (v) enumeramos como núcleos obvios). El truco es mágico, pero la idea es utilizar el hecho de que la distancia al cuadrado euclidiana se divide muy bien en productos de punto (|| uv || ^ 2 = ) y exp () convierte la suma a la multiplicación. Es bastante notable que los núcleos (que son una generalización de productos internos que inducen espacios medio abiertos) pueden codificar conceptos acotados (más sobre esto más adelante cuando analicemos la dimensión VC del gaussiano).
El gran beneficio de la máquina de vectores de soporte es que con acceso solo a las etiquetas de datos y la función del kernel (de hecho, solo la función de kernel evaluada en pares de datos de entrenamiento) la máquina de vectores de soporte puede resolver rápidamente el margen óptimo y el peso de los datos logrando este margen
Por diversión, conectemos un nuevo núcleo llamado núcleo coseno:
(c ≥ 0).
Se puede pensar que este núcleo tiene una función phi (.) Que toma un vector z y agrega una coordenada adicional de sqrt (c) y luego proyecta el vector resultante en la esfera de la unidad. Este núcleo induce conceptos que se parecen a parábolas, como se ve en la figura 1.
Figura 1: concepto de ejemplo de coseno
La Figura 2 muestra el modelo de suma de conceptos (agregar todas las funciones de descuento con el mismo peso). En este caso, es demasiado amplio (promediar los conceptos de coseno que no son conceptos acotados como los gaussianos) crea un modelo demasiado amplio. El modelo no solo se generaliza mal (no coincide con la forma del diagrama de verdad) sino que también se equivoca con algunos de sus propios datos de entrenamiento.
Figura 2: Modelo de suma de núcleo de coseno
Y la figura 3 muestra el excelente ajuste devuelto por la máquina de vectores de soporte. En realidad, un ajuste excelente determinado por 4 vectores de soporte (indicados por etiquetas más grandes). Observe también que la máquina de vectores de soporte que utiliza conceptos ilimitados generó un modelo ilimitado muy bueno (ilimitado en el sentido de que las regiones azul y roja son infinitas). Al cambiar el núcleo o las funciones / conceptos de descuento, cambiamos el sesgo inductivo. Por lo tanto, cualquier conocimiento de qué tipo de modelo queremos (una clase limitada o no) debería influir en gran medida en nuestra elección de las funciones del núcleo (ya que la máquina de vectores de soporte solo puede elegir pesos para las funciones del núcleo, no ajustar sus formas o anchos de banda).
Figura 3: Modelo de vector de soporte de coseno
Otra familia de núcleos (que considero aflicciones) son los núcleos de “algo por nada”. Estos son núcleos de la forma:
o potencias superiores u otras funciones de acabado. La idea es que si observara la expansión de estos núcleos, vería muchos términos de orden superior (potencias de u_i y v_j)
y si estos términos estuvieran disponibles para la máquina de vectores de soporte, podría usarlos. Se afirma además que, además de obtener nuevas funciones de forma gratuita, no usa grados
de libertad explotándolos (para que los valide de forma cruzada y para modelos más simples). Ambas afirmaciones son falaces: no puede usar completamente los términos de orden superior porque están enredados con otros términos que no son ortogonales como resultado y la complejidad de un núcleo no es tan simple como los grados de libertad (pruebas sobre máquinas de vectores de soporte se expresan en términos de margen, no en términos de grados de libertad o incluso en términos de dimensión VC). El optimizador en el SVM se esfuerza por hacer una buena hipótesis utilizando los términos de orden superior, pero debido a las relaciones forzadas entre los términos, obtienes mejores ajustes como en la figura 4.
Figura 4: Modelo de vector de soporte de kernel mágico cuadrado
Si desea términos de orden superior, creo que es mucho mejor realizar una transformación primaria, por lo que los términos están disponibles en su forma más general. Es decir, volver a codificar el vector u = (x, y) como el vector más grande (x, y, x * y, x * x, y * y). Debe ser honesto: si está tratando de ajustar funciones más complicadas, está buscando un espacio de hipótesis más grande, por lo que necesita más datos para falsificar las hipótesis erróneas. Puede ser eficiente (no agregue términos que no cree que pueda usar, ya que dificultan la generalización), pero no puede obtener algo por nada (incluso con los métodos del núcleo).
Red neuronal y computadoras
crédito: John Mount