Saltar al contenido principal

Repaso de métodos relevantes de Machine Learning

En esta sección repasaremos algunos términos y métodos importantes del Machine Learning clásico que nos ayudarán a comprender mejor los flujos de trabajo del Quantum Machine Learning. Comenzaremos con conceptos fundamentales generales y luego profundizaremos en dos tipos de Machine Learning: métodos de kernel (particularmente en el contexto de Support Vector Machines) y redes neuronales. Existen conexiones entre estos métodos, pero los trataremos como campos separados, ya que los flujos de trabajo cuánticos difieren aquí y en lecciones posteriores. Este es solo un resumen general, y omitiremos muchos matices. Para una introducción más completa al Machine Learning, recomendamos recursos como [1-3].

Tipos de Machine Learning

Como definición sencilla: el Machine Learning es un conjunto de algoritmos que analizan patrones y relaciones en datos y extraen conclusiones de ellos. A grandes rasgos, los algoritmos de Machine Learning pueden clasificarse en tres categorías principales, según el tipo de datos utilizados y cómo los algoritmos aprenden sin ser programados explícitamente:

  1. Aprendizaje supervisado (Supervised Learning): En el aprendizaje supervisado, los datos utilizados para entrenar el modelo están etiquetados. El objetivo de estos algoritmos es aprender la relación entre los datos y sus etiquetas o salidas correspondientes, y generalizar a datos no vistos. Las tareas típicas en esta categoría incluyen clasificación y regresión.
  2. Aprendizaje no supervisado (Unsupervised Learning): A diferencia del aprendizaje supervisado, el aprendizaje no supervisado utiliza datos no etiquetados para entrenar el modelo de Machine Learning. El objetivo de estos algoritmos es descubrir patrones y estructuras ocultas en los datos. Esta categoría incluye algoritmos de clustering y reducción de dimensionalidad. Algunos modelos generativos como las redes generativas adversariales y los autoencoders variacionales también pueden asignarse a esta categoría.
  3. Aprendizaje por refuerzo (Reinforcement Learning): Los algoritmos de esta categoría se definen por un agente que interactúa con un entorno. El agente ejecuta acciones y recibe retroalimentación de su entorno en forma de recompensas y penalizaciones. A través de este mecanismo de retroalimentación, el agente aprende eventualmente a ejecutar las acciones correctas para cumplir una tarea determinada.

Una representación esquemática del aprendizaje supervisado y no supervisado.

La imagen izquierda muestra dos categorías de datos etiquetados, como en el aprendizaje supervisado. En este caso, las categorías son linealmente separables. La imagen derecha muestra clústeres de datos. En una tarea de aprendizaje no supervisado, estos datos inicialmente no estarían etiquetados, y el algoritmo examinaría la distribución y posiblemente buscaría clústeres. Para visualizar los clústeres identificados por el algoritmo a modo de ejemplo, los puntos de datos se han etiquetado ahora. Una diferencia fundamental entre ambos es que el proceso de aprendizaje supervisado comienza con datos ya etiquetados, mientras que el proceso no supervisado comienza con datos no etiquetados, aunque los datos pueden terminar con etiquetas al final.

Introducir lo "cuántico" en el Machine Learning

Ahora podemos comenzar a explorar cómo se introduce lo "cuántico" en el Machine Learning. En esta categorización general, consideramos tanto el tipo de modelo/algoritmo en el dispositivo de procesamiento como el tipo de datos proporcionados. La imagen anterior resume estas posibles combinaciones.

Un diagrama con cuadrantes, donde un eje representa algoritmos y el otro datos, cada uno siendo cuántico o clásico.

CC significa, por ejemplo, que tenemos un conjunto de datos clásico —como imágenes, audio o texto, que puede almacenarse en computadoras clásicas— y que también utilizamos una computadora clásica para ejecutar un algoritmo de Machine Learning. Este es exactamente el escenario clásico de Machine Learning. QQ, por otro lado, significa que usamos una computadora cuántica para procesar datos cuánticos. "Datos cuánticos" puede tener varios significados y depende del contexto. Los datos cuánticos podrían entenderse como un conjunto de resultados de medición de un dispositivo cuántico o referirse a estados producidos en una computadora cuántica por otro algoritmo. En el futuro, podrían incluso referirse a datos almacenados en QRAM (Quantum Random Access Memory), que actualmente no existe. Cuando los investigadores hablan de Quantum Machine Learning, generalmente se refieren al régimen CQ, donde el conjunto de datos presente es clásico y el dispositivo de procesamiento en el que se ejecuta el algoritmo de Machine Learning es una computadora cuántica. En las siguientes partes del curso nos centraremos en tales algoritmos.

Support Vector Machines

Ahora resumiremos una clase de algoritmos llamada Support Vector Machines desde la perspectiva del Machine Learning clásico. Más adelante mostraremos cómo la computación cuántica puede incorporarse a este algoritmo.

Un diagrama de una Support Vector Machine.

Imaginemos una tarea de clasificación binaria en un conjunto de datos con un espacio de características bidimensional, como se muestra en el diagrama. Una forma de clasificar este conjunto de datos consiste en encontrar una línea o, más generalmente, un hiperplano que separe las dos clases. En la práctica, hay infinitos hiperplanos separadores, por lo que surge la pregunta: ¿Cómo definimos el óptimo? La idea es que un buen límite de decisión debería maximizar el margen, definido como la distancia a los puntos más cercanos de cada clase. En este contexto, los puntos de datos con la menor distancia al límite de decisión se denominan vectores de soporte.

Un límite de decisión lineal puede describirse de varias maneras; en cierto sentido, la más directa es la siguiente, representada en f1f_1. Aquí, Θ\Theta es el conjunto de parámetros que definen el hiperplano, x\vec{x} es tu conjunto de datos y bb es un desplazamiento constante. Φ\Phi es un mapeo desde el espacio de los puntos de datos de entrada, frecuentemente (pero no necesariamente) a un espacio de mayor dimensión. Volveremos a este mapeo más adelante.

En el modelo f1f_1, Θ\Theta es el vector de parámetros ajustables que el modelo aprendería. A esto lo llamamos la "formulación primal". Mediante algunas transformaciones matemáticas, se puede demostrar que existe una segunda forma de formular el mismo problema. A esto lo llamamos la "formulación dual", representada por la ecuación f2f_2 a continuación. Para esta formulación, debemos optimizar sobre los parámetros alfa. La diferencia clave es que la formulación primal contiene un producto interno entre el vector de características y los parámetros aprendibles, mientras que en la formulación dual el producto interno se forma entre vectores de características. Aunque la forma dual contiene tanto las características de entrenamiento como las etiquetas correspondientes, veremos en la siguiente sección cómo resulta más útil que la forma primal.

f1(x)=ΘTΦ(x)+bf_1(\vec{x}) = \Theta^T \Phi(\vec{x})+b f2(x)=i=1nαiyiΦT(xi)Φ(x)+bf_2(\vec{x}) = \sum_{i=1}^n \alpha_i y_i \Phi^T(\vec{x}_i)\Phi(\vec{x})+b

Métodos de kernel y el papel de la computación cuántica

El siguiente video motiva cómo la computación cuántica puede desempeñar un papel en los clasificadores lineales. El texto lo describe con más detalle.

Transición a espacios de mayor dimensión

En esta y la siguiente subsección se trata de mapeos a dimensiones más altas. El objetivo es explicar el "truco del kernel" en el contexto de mapeos entre espacios y así preparar el terreno para los kernels cuánticos. Explícitamente, no se trata de que las dimensiones más altas en las funciones de onda cuánticas resuelvan todos nuestros problemas. Como se menciónó en la introducción, los mapeos de características gaussianos clásicos ya son de dimensión infinita. La dimensionalidad de las características de datos es importante, pero los estados cuánticos de alta dimensión por sí solos no son suficientes para superar los métodos clásicos.

Gráficamente es fácil ver cómo podemos generalizar el enfoque SVM a casos donde los datos originales no son linealmente separables, siempre que tengamos el mapeo correcto a dimensiones más altas. Consideremos los datos bidimensionales a la izquierda: no existe un límite de decisión lineal que pueda separar las dos clases. Sin embargo, podemos añadir una tercera característica al espacio de características. Si esta nueva característica es, por ejemplo, la distancia al origen de las dos características anteriores x1x_1 y x2x_2, los datos se vuelven linealmente separables. Esto también significa que ahora podemos ejecutar exitosamente el algoritmo de Support Vector Machine en este espacio de características de mayor dimensión.

Un diagrama que muestra un anillo de un tipo de datos, donde un segundo tipo de datos llena el centro del anillo. Una segunda celda muestra los datos proyectados en 3D, en forma de cuenco. Ahora los datos son linealmente separables.

A este "mapeo de características" lo denominamos también Φ\Phi. El mapeo de características frecuentemente mapea desde el espacio de datos de entrada a una dimensión más alta, como se muestra aquí, pero también existen modelos y algoritmos que utilizan mapeos a dimensiones más bajas. El mapeo a dimensiones más altas es simplemente un ejemplo fácil de visualizar y comprender.

x=(x1x2)\vec{x} = \begin{pmatrix}x_1 \\ x_2 \end{pmatrix} Φ(x)=(x1x2x12+x22)\vec{\Phi}(\vec{x}) = \begin{pmatrix}x_1 \\ x_2 \\ {x_1}^2+{x_2}^2\end{pmatrix}

Algunos mapeos de características pueden mapear a espacios de muy alta dimensión. En tales casos, la alta dimensionalidad hace que los productos internos sean computacionalmente más costosos. Volveremos a esto más adelante.

¿Por qué es útil la forma dual?

Recordemos la formulación primal y dual de nuestro modelo de límite lineal:

f1(x)=ΘTΦ(x)+bf_1(\vec{x}) = \Theta^T \Phi(\vec{x})+b f2(x)=i=1nαiyiΦT(xi)Φ(x)+bf_2(\vec{x}) = \sum_{i=1}^n \alpha_i y_i \Phi^T(\vec{x}_i)\Phi(\vec{x})+b

Ahora sabemos que usar un mapeo de características a un espacio de mayor dimensión puede permitirnos encontrar exitosamente un hiperplano separador. Por lo tanto, podemos reemplazar el vector de características original x\vec{x} en las ecuaciones por los vectores mapeados por características. Sin embargo, si hacemos esto en la formulación primal, nos encontramos con el problema de tener que calcular productos internos entre los parámetros y un mapeo de características potencialmente de muy alta dimensión. En la formulación dual, en cambio, estos se reemplazan por productos internos entre vectores mapeados por características de diferentes entradas.

Para algunos mapeos de características, es posible escribir el producto interno de los vectores mapeados ΦT(xi)Φ(xj)\vec{\Phi}^T(\vec{x}_i)\cdot \vec{\Phi}(\vec{x}_j) como una función simple k(xi,xj)k(\vec{x}_i, \vec{x}_j) de las variables originales (de menor dimensión) xi\vec{x}_i y xj\vec{x}_j. Para algunas elecciones de Φ\Phi, ΦT(xi)Φ(xj)\vec{\Phi}^T(\vec{x}_i)\cdot \vec{\Phi}(\vec{x}_j) puede incluso expresarse como una función simple del producto interno de menor dimensión xiTxj\vec{x}_i^T\vec{x}_j. Esto es computacionalmente muy ventajoso, porque podemos acceder al espacio donde los datos son linealmente separables sin incurrir en los costos de operaciones en dimensiones más altas. Dado que los vectores mapeados en f2f_2 solo aparecen en productos internos, es posible que ni siquiera necesitemos realizar explícitamente el mapeo de características para calcular los productos internos. La función k(xi,xj)k(\vec{x}_i, \vec{x}_j), que calcula los productos internos, la llamamos "función kernel", y este método de evitar el cálculo del mapeo de características se denomina "truco del kernel". Los vectores mapeados podrían incluso ser de dimensión infinita, y el kernel seguiría siendo muy eficiente de calcular.

La función kernel en sí misma es una función de dos vectores de datos de entrada. Si se insertan todos los pares de vectores de datos del conjunto de datos como argumentos de la función kernel, se obtiene una matriz simétrica y semidefinida positiva, llamada matriz kernel:

k=(k(x1,x1)k(x1,x2)...k(x2,x1)k(x2,x2)...)k = \begin{pmatrix}k(\vec{x}_1,\vec{x}_1) & k(\vec{x}_1,\vec{x}_2) & ... \\ k(\vec{x}_2,\vec{x}_1) & k(\vec{x}_2,\vec{x}_2) & ... \\ \vdots & \vdots & \ddots\end{pmatrix}

Una vez que hemos calculado la matriz kernel, podemos encontrar los parámetros óptimos (αi\alpha_i) utilizando métodos como software de programación cuadrática o un algoritmo llamado "Sequential Minimal Optimization". Esto supone, por supuesto, que existe un kernel eficientemente calculable que corresponde a un mapeo de características que hace que tus clases de datos sean linealmente separables. Un enfoque relacionado pero novedoso es la estimación de kernel cuántico.

Kernels cuánticos

Las computadoras cuánticas, o los estados cuánticos en general, permiten una definición muy natural de un "kernel cuántico". La codificación de una entrada x\vec{x} en un estado cuántico Φ(x)|\Phi(\vec{x})\rangle puede interpretarse como un mapeo de características. Este proceso puede mapear los datos a un espacio de muy alta dimensión, como ocurre con los mapeos de características clásicos, pero la dimensionalidad depende del método de codificación (véase la lección sobre codificación de datos). Recordemos que el producto interno de dos estados cuánticos ψϕ\langle \psi | \phi \rangle está relacionado con la probabilidad de medir el estado ϕ|\phi\rangle cuando se está en el estado ψ|\psi\rangle. Podemos estimar el producto interno de los dos puntos de datos mapeados Φ(xi)\vec{\Phi}(\vec{x}_i) y Φ(xj)\vec{\Phi}(\vec{x}_j) realizando suficientes mediciones en el circuito resultante.

Una representación abstracta de un kernel como circuito.

Como veremos más adelante en el curso, podemos usar mediciones en un circuito cuántico como el mostrado arriba para estimar un kernel, y luego ejecutar la optimización SVM clásicamente sobre la matriz kernel para aprender los parámetros ajustables.

Clasificadores cuánticos variacionales y redes neuronales

Otro algoritmo near-term para Quantum Machine Learning se llama "circuitos cuánticos variacionales" (VQCs). Cuando estos circuitos se utilizan para una tarea de clasificación, la misma abreviatura puede significar también "clasificadores cuánticos variacionales" (igualmente VQCs). Estos utilizan frecuentemente estructuras similares a las redes neuronales clásicas (NNs); en tales casos se habla de Redes Neuronales Cuánticas (QNNs). Es importante entender que los VQCs son más generales y no necesariamente siguen una estructura de NN, pero comenzamos en analogía con las NNs para ilustrar el papel de lo cuántico en los flujos de trabajo existentes de Machine Learning. Luego discutiremos generalizaciones. Primero, resumimos las redes neuronales clásicas.

El siguiente video ofrece una breve descripción de las redes neuronales y sus intersecciones con los circuitos cuánticos variacionales. El texto profundiza más en el tema.

Una red neuronal es un modelo computacional que se inspira vagamente en la estructura y función de las neuronas en el cerebro. Estas neuronas, que vemos como nodos en la imagen, están organizadas en capas y conectadas entre sí mediante pesos.

QML_CR_background_QNN_2ndlayer.png

La primera capa es la capa de entrada, y las activaciones an0a_n^0 de las neuronas en esta capa se alimentan directamente con los datos a analizar x\vec{x} (como la intensidad de píxeles individuales en una imagen). La última capa es una capa de salida que describe la categorización (por ejemplo, si una imagen es 90% perro y 10% gato, siguiendo con el ejemplo de la imagen).

QML_CR_background_QNN_output.png

Las neuronas en cada capa procesan las señales que reciben de la capa anterior y las transmiten a través de pesos wiw_i (las conexiones en el diagrama) a la siguiente. Si nos enfocamos en una de estas neuronas, tenemos el bloque de construcción fundamental de una red neuronal: el llamado "perceptrón". Matemáticamente, un perceptrón toma un vector de entrada x\vec{x} y calcula su producto interno con un vector de pesos entrenables más un sesgo. Y de manera crucial: el perceptrón aplica una función de activación no lineal (σ\sigma) a este cálculo. Estas funciones de activación no lineales son fundamentales para la gran expresividad de las redes neuronales. Otra perspectiva: sin no linealidad entre las capas, toda la red neuronal podría escribirse en principio como una sola multiplicación de matrices grande, lo que llevaría a un modelo lineal incapaz de capturar los patrones complejos que las redes neuronales profundas pueden reconocer. Las funciones de activación no lineales son, por lo tanto, fundamentales para las redes neuronales.

perceptron_CP.png

Funciones como

f(x)=σ(wx+b)f(\vec{x}) = \sigma (\vec{w}\cdot \vec{x}+\vec{b})

se calculan en cada neurona con los datos conocidos x\vec{x}, la función no lineal σ\sigma y los vectores de pesos desconocidos w\vec{w} y vectores de sesgo b\vec{b}. En general, puede haber pesos distintos de cero entre todas las neuronas de todas las capas; el peso de la capa LL a la capa L+1L+1 entre las neuronas mm y nn lo denotamos como wm,nLw^L_{m,n}. El sesgo de la nn-ésima neurona de la LL-ésima capa sería correspondientemente bnLb^L_n. Estos sesgos no tienen nada que ver con los valores bb de la discusión del kernel cuántico.

Podrías iniciar tu red neuronal con un conjunto aleatorio de pesos y sesgos o desde una configuración inicial conocida y razonable. A partir de ahí, necesitas comprobar qué tan bien clasifica tu red neuronal y mejorarla. Usamos una función de costo para describir cuánto se desvía nuestra red neuronal de la clasificación correcta. Hay muchas formas de definir una función de costo. Aquí describimos un ejemplo común que utiliza el error cuadrático medio (MSE):

C(wm,nL,bnL)=1Ni=1Ntrainj=1Noutputs(vi,jpi,j)2C(w^L_{m,n},b^L_n) = \frac{1}{N}\sum_{i=1}^{N_\text{train}}\sum_{j=1}^{N_\text{outputs}}{(v_{i,j}-p_{i,j})^2}

Dependiendo de la aplicación, esto puede significar tomar la diferencia entre el valor real vi,jv_{i,j} de una imagen ii de los datos de entrenamiento para la salida jj (por ejemplo, un valor de 1,0 en la neurona de salida para "perro" y 0 para todas las demás neuronas) y el valor predicho pi,jp_{i,j}. Elevar al cuadrado esta diferencia y sumar sobre todas las categorías, de modo que se capture no solo si la categoría correcta tuvo la mayor activación, sino también si las activaciones incorrectas están reducidas. Luego sumamos sobre todos los ejemplos del conjunto de entrenamiento y obtenemos una magnitud de costo.

Después variamos los parámetros como los pesos en cada capa entre todas las neuronas y los sesgos en todas las neuronas. Se emplean métodos de optimización clásicos como el descenso de gradiente para buscar un mínimo local en la función de costo.

Perceptrón cuántico

Para construir la contraparte cuántica del perceptrón, debemos, entre otras cosas, ser capaces de introducir no linealidad con circuitos cuánticos, lo que corresponde al papel de la función de activación en las redes neuronales clásicas. Porque sin consideraciones adicionales, los circuitos cuánticos solo implementan operaciones unitarias, que son simplemente lineales. Existen varios métodos para introducir no linealidad en los circuitos cuánticos. Uno de los más importantes es el uso de mediciones como fuente de no linealidad. Otros enfoques incluyen métodos basados en la transformada cuántica de Fourier, mediciones de circuito intermedio o circuitos dinámicos, así como la eliminación de qubits del circuito.

Red neuronal cuántica

Una Red Neuronal Cuántica (QNN) funciona codificando primero los datos de entrada con la capa unitaria UU de la figura, luego aplicando circuitos cuánticos correspondientes a los pesos entre las capas (bloques WW abajo) y finalmente una capa de medición. Algunos puntos importantes al respecto:

  • La carga de datos y las ponderaciones son operaciones lineales.
  • Las mediciones son no lineales.
  • Como en la NN clásica, hay tanto componentes lineales como no lineales.
  • Los circuitos de peso siguen teniendo parámetros variacionales, por lo que aún hay una minimización clásica por realizar.

Una representación de una Red Neuronal Cuántica como circuito.

Con tal circuito podemos calcular una función fQNN(x)=0U(X)WOWU(x)0f_{QNN}(x) = \langle 0|U^{\dagger}(X)W^{\dagger}OWU(x)|0\rangle Esta función no es en general idéntica a la función f(x)f(x) de las NNs clásicas. En particular, esta función contiene potencialmente muchas capas con muchos pesos y se aplica a todos los datos cargados en el circuito cuántico a través de UU.

Generalizaciones

Ahora podemos considerar una de las formas de construir la contraparte cuántica de una red neuronal. En este modelo, el flujo de información es diferente al de una red neuronal clásica de propagación hacia adelante. En el contexto clásico, la información fluiría de izquierda a derecha, comenzando con la entrada y terminando con la salida del modelo, y en dirección inversa durante el entrenamiento por retropropagación.

Un diagrama con múltiples capas de puertas dentro de una Red Neuronal Cuántica

En esta configuración de Red Neuronal Cuántica, en cambio, el bloque unitario que codifica los datos se repite entre los bloques unitarios variacionales con los parámetros entrenables. Esta estrategia, que denominamos "Data Reuploading", está respaldada por resultados teóricos interesantes. Un artículo de Pérez-Salinas et al. muestra que con la ayuda de múltiples recargas de datos "un solo qubit proporciona capacidades computacionales suficientes para construir un clasificador cuántico universal, cuando es asistido por una subrutina clásica". El Data Reuploading es, por lo tanto, una técnica con la que podemos mejorar la expresividad y la capacidad de representación del modelo, y habilitar a la Red Neuronal Cuántica para aproximar funciones complejas.

Referencias

[1] "Reinforcement Learning: An Introduction", Richard S. Sutton and Richard G. Barto, MIT Press, Second Edition, Cambridge, MA, 2018

[2] "Pattern Recognition and Machine Learning", Christopher M. Bishop, Springer, 2006

[3] "Foundations of Machine Learning", Mehryar Mohri, Afshin Rostamizadeh, and Ameet Talwalkar, MIT Press, Second Edition, 2018.