Introducción a Quantum Machine Learning
Resumen y motivación
¡Bienvenido al aprendizaje automático cuántico!
El vídeo que figura a continuación ofrece una breve introducción que se complementa con el texto siguiente.
Para recapitular brevemente y aumentar el vídeo:
- Hemos visto cómo se resolvía un problema por primera vez en un ordenador cuántico y, posteriormente, la gente encontraba la forma de hacerlo en un superordenador clásico. Este ciclo en el que la informática clásica y la cuántica se empujan mutuamente hasta sus límites continuará probablemente durante algunos años.
- Hay problemas específicos en los que la computación cuántica puede tener una ventaja demostrable sobre la clásica, dados los avances en áreas como la reducción de errores y el número de qubits disponibles. Pero aún estamos en una época de exploración, de búsqueda de conjuntos de datos cuantificables y mapas de características cuánticas útiles.
- El aprendizaje automático cuántico (QML) es una de las muchas áreas apasionantes en las que la computación cuántica puede aumentar o complementar los actuales flujos de trabajo clásicos.
El aprendizaje automático (Machine Learning, ML) aplica algoritmos a conjuntos de datos, por lo que es plausible que el QML incluya la mecánica cuántica en los datos o en los algoritmos, o en ambos. Todas estas posibilidades son potencialmente interesantes. Pero nos limitaremos sobre todo a hablar de algoritmos cuánticos aplicados a datos clásicos. Una de las razones es que los problemas de ML con datos clásicos ya están muy estudiados y ampliamente disponibles. Existe un amplio interés por resolver problemas que parten de datos clásicos. Otra razón es la falta de QRAM. Sin la capacidad de almacenar grandes cantidades de datos cuánticos en una escala de tiempo relativamente larga, los métodos que parten de datos cuánticos están aún bastante lejos de su aplicabilidad a la industria. Tampoco está claro cómo "acceder cuánticamente" a los datos clásicos de forma eficiente. Dos tipos de ML de especial interés son el aprendizaje supervisado, en el que se entrena un algoritmo utilizando un conjunto de datos etiquetados, y el aprendizaje no supervisado, en el que el algoritmo intenta aprender sobre una distribución a partir de muestras no etiquetadas. Un algoritmo no supervisado podría, por ejemplo, aprender a generar nuevas muestras a partir de la misma distribución, o a agrupar las muestras en grupos con características similares.
La imagen de la izquierda muestra dos categorías de datos etiquetados, como en el aprendizaje supervisado. En este caso, las categorías son linealmente separables. La imagen de la derecha muestra grupos de datos. En una tarea de aprendizaje no supervisado, estos datos no se etiquetarían inicialmente y el algoritmo estudiaría la distribución, tal vez buscando agrupaciones. Con el fin de visualizar los clústeres de ejemplo que el algoritmo podría identificar, ahora se han etiquetado los puntos de datos. Una diferencia clave entre ambos es que el proceso de aprendizaje supervisado comienza con datos ya etiquetados, mientras que el proceso no supervisado comienza con datos sin etiquetar, aunque estos se etiqueten al final.
Quienes tengan experiencia en aprendizaje automático ya sabrán que muchos métodos de solución implican mapear datos en espacios de mayor dimensión. Esto está especialmente bien estudiado en el contexto de los núcleos. Como breve recordatorio, a veces los datos pueden separarse en categorías mediante una línea, un plano o un hiperplano (a menudo diremos simplemente "hiperplano" para compactar), en el mismo número de dimensiones que se dan los datos. Esto se muestra en la primera imagen de arriba. Otras veces, los datos pueden no ser separables por un hiperplano en esas dimensiones, como se muestra en la segunda imagen. Pero aún puede haber una estructura en los datos que pueda explotarse en un mapeo a dimensiones superiores, lo que entonces deja los datos separables en ese espacio de dimensiones superiores. Esto se ilustra en el mapeo de los datos de 2D con simetría circular en el espacio 3D en el que los puntos de datos están dispuestos a lo largo de una superficie paraboloide.
Un objetivo común en QML es encontrar un mapeo desde el conjunto de características de dimensión inferior a un espacio de dimensión superior, que separe eficazmente nuestros puntos de datos para que podamos utilizar el mapeo para clasificar nuevos puntos de datos. Pero no es una tarea fácil, y cualquier debate sobre la posible utilidad de la computación cuántica en el aprendizaje automático debe ir acompañado de las advertencias oportunas. En concreto, debemos abordar los matices en la selección de conjuntos de datos y los retos para alcanzar la escala de utilidad. También debemos dejar de intentar superar a los algoritmos clásicos de ML en datos que ya manejan eficazmente y bien los algoritmos clásicos y volver a centrar el debate en la investigación de nuevos mapas de características que puedan ser útiles.
Gestión de expectativas
Muchos de los conjuntos de datos utilizados en las aplicaciones QML descritas en la bibliografía son "feature engineered", es decir, se seleccionan o generan específicamente para mostrar un caso de uso concreto en el que la computación cuántica resulta útil. Si esto te parece hacer trampas, es que no has entendido bien la tarea. No es cierto que algunos mapas cuánticos de características nos permitan resolver todas o muchas tareas de clasificación de forma más eficiente o escalable que los algoritmos clásicos de aprendizaje automático. Más bien, algunos mapas de rasgos cuánticos (no todos) se comportan de forma diferente a los mapas de rasgos clásicos. La tarea consiste entonces en explorar circuitos cuánticos en el contexto de estructuras de datos complejas. Algunas cuestiones específicas que hay que abordar son:
- ¿Qué circuitos cuánticos tienen más probabilidades de comportarse de forma novedosa, en comparación con las alternativas clásicas?
- ¿Existen problemas en el mundo real que impliquen datos con propiedades que se exploren mejor utilizando estos novedosos circuitos cuánticos?
- ¿Estos circuitos cuánticos se adaptan a los ordenadores cuánticos a corto plazo?
Explicación insuficiente
A menudo nos encontramos con una explicación simplificada de la potencia de la computación cuántica. La idea es la siguiente:
Al igual que los ordenadores clásicos utilizan bits de información, los ordenadores cuánticos utilizan qubits. Dado un número de bits, digamos 4, un ordenador clásico puede adoptar cualquiera de los estados posibles, mientras que un ordenador cuántico puede existir en una superposición de los 16 estados simultáneamente, y se pueden realizar operaciones en toda esta superposición. En algunos casos, esto nos permite de forma natural diseñar algoritmos de aprendizaje potencialmente interesantes basados en mapeados a espacios de mayor dimensión.
Esta afirmación es cierta, pero inadecuada y un poco engañosa, como explicaremos. También se hace hincapié en las diferencias entre coeficientes complejos y reales, como en:
Un sistema clásico probabilístico en el que un sistema puede describirse como que tiene ciertas probabilidades de estar en diferentes estados, puede describirse como sigue.
En un sistema de este tipo, los coeficientes , , , etc. sólo pueden tener sentido si son números reales positivos. Los estados en los ordenadores cuánticos se describen mediante amplitudes de probabilidad que pueden ser números complejos.
Las afirmaciones anteriores se han hecho con mucho cuidado para que sean ciertas (muchas afirmaciones superficialmente similares son incorrectas). Pero estas afirmaciones correctas no son una explicación del poder de la computación cuántica en el aprendizaje automático. Por un lado, cualquier aplicación de la computación cuántica al aprendizaje automático implicará mediciones y no podemos medir que un qubit esté en varios estados a la vez. Podemos preparar un qubit en una superposición como , pero una medición dará como resultado o . Así que, como mínimo, esta historia sobre el aumento de la dimensionalidad está incompleta. Además, en el contexto de los núcleos, el aumento de las dimensiones en la computación cuántica no puede ser una condición suficiente para la potencia de cálculo con respecto a las alternativas clásicas, ya que los núcleos gaussianos son de dimensión infinita. Existen sutilezas en este sentido, ya que los mapas de características gaussianos sólo se utilizan junto con el "truco del núcleo", que evita la necesidad de calcular un vector mapeado de dimensiones infinitas. Pero la cuestión sigue ahí:
La alta dimensionalidad de los estados cuánticos enredados no es paralelismo exponencial, y no es condición suficiente para aumentar la potencia en el aprendizaje automático.
En las lecciones que siguen, presentamos flujos de trabajo para incorporar circuitos cuánticos a tareas de aprendizaje automático, y lo hacemos con el propósito explícito de facilitar la exploración de la potencia de la computación cuántica. Ningún mapa de características o algoritmo de este curso se presenta como un camino rápido hacia mejores resultados de aprendizaje automático para problemas generales, porque no existe tal mapa de características o algoritmo. Más bien, presentamos un amplio abanico de herramientas cuánticas que pueden utilizarse en la exploración de la informática cuántica útil.
Descuantización
La descuantización se refiere a la sustitución de un algoritmo cuántico dado por otro clásico que funciona de forma similar a un algoritmo cuántico para un conjunto dado de tareas, entre las que se suele incluir el escalado. Según algunas definiciones, el algoritmo clásico debería funcionar sólo polinomialmente más lento que el algoritmo cuántico.
Varios algoritmos de aprendizaje automático cuántico (QML) que inicialmente se pensó que proporcionaban importantes aumentos de velocidad con respecto a los algoritmos clásicos se han descuantizado en los últimos años. Este proceso de descuantización ha permitido comprender mejor las posibles ventajas y limitaciones de los enfoques cuánticos del aprendizaje automático.
Uno de los resultados de descuantificación más notables provino del trabajo de Ewin Tang sobre sistemas de recomendación. Tang descubrió un algoritmo clásico que podía realizar tareas de recomendación a velocidades que anteriormente se creía que solo podían lograrse con computadoras cuánticas. Este descubrimiento puso en entredicho la hipótesis de que los algoritmos cuánticos tenían una ventaja exponencial para este problema. Un trabajo más reciente de Shin et al. se ha centrado en la identificación de condiciones sobre la decuantizabilidad de la clase de funciones de un modelo de aprendizaje de máquina cuántica variacional.
Uno de los enfoques habituales para la descuantización (aunque no es el único truco) consiste en tener en cuenta la sobrecarga de carga de datos. Es decir, cualquier algoritmo cuántico aplicado a datos clásicos tendrá un paso en el que los datos clásicos se codifican en el ordenador cuántico. Si un algoritmo cuántico asume un punto de partida en el que los datos cuánticos ya están disponibles, entonces se oculta efectivamente el tiempo necesario para la codificación. Hay contextos en los que asumir datos cuánticos puede ser razonable, pero muchas aplicaciones de interés partirán de datos clásicos. Algunos casos de descuantización han demostrado que cuando se incluye este tiempo de codificación, y cuando la carga de datos clásica puede realizarse de forma eficiente, el algoritmo cuántico ya no supera a su homólogo clásico.
Incluso si un algoritmo no puede decuantificarse, eso no significa que sea más eficiente o escalable que todos los algoritmos clásicos. Como ejemplo extremo y artificioso: imagine un algoritmo para seleccionar los j elementos más grandes de un conjunto de tamaño k. Se podría escribir un algoritmo cuántico que utilizara el algoritmo de Shor para factorizar cada uno de los k elementos en factores primos y, a continuación, determinar los elementos mayores utilizando los factores primos. Es probable que un algoritmo de este tipo no se pueda decuantificar, pero es drásticamente menos eficiente que los algoritmos clásicos para lograr la misma selección de elementos mayores (aunque no la parte innecesaria de factorización).
Prueba de existencia
En 2021, los investigadores de IBM Quantum® Yunchao Liu, Srinivasan Arunachalam y Kristan Temme publicaron un artículo en Nature, A rigorous and robust quantum speed-up in supervised machine learning. En consonancia con las advertencias anteriores, se eligió cuidadosamente para este trabajo un problema de clasificación que (1) se sabe que es clásicamente difícil, y (2) adecuado para que los algoritmos cuánticos muestren una aceleración.
El artículo aborda la clasificación de datos basada en logaritmos discretos. Citando el artículo, "Para un número primo grande y un generador de , es una conjetura muy extendida que ningún algoritmo clásico puede calcular en la entrada , en tiempo polinómico en , el número de bits necesarios para representar " En cambio, se sabe que el algoritmo de Shor resuelve el problema del logaritmo discreto en tiempo polinómico. Así pues, esta elección de problemas satisface simultáneamente los criterios anteriores: dureza clásica (improbable decuantización) y adecuación conocida a los algoritmos cuánticos.
A través de esta juiciosa elección del problema de clasificación, los autores pudieron demostrar una aceleración exponencial utilizando métodos de núcleo cuántico (esbozados brevemente a continuación y discutidos en lecciones posteriores) que es tanto de extremo a extremo como robusto. Aquí, "de extremo a extremo" se refiere a las suposiciones sobre empezar con datos clásicos; los autores en este caso sí incluyen el tiempo de codificación de los datos. Aquí, "robusto" se refiere al hecho de que los datos a clasificar se separan por un amplio margen utilizando el algoritmo cuántico, de forma que el éxito de la clasificación es robusto frente a consideraciones del mundo real como el error de muestreo finito.
Todo esto viene a decir que existen problemas en los que los núcleos cuánticos pueden proporcionar una aceleración exponencial. Pero el estado actual de la ciencia es que tales problemas se seleccionan basándose en observaciones o en la justificación teórica de que deberían ser susceptibles de algoritmos cuánticos. No es realista esperar una aceleración cuántica para tareas de aprendizaje automático que los ordenadores clásicos ya hacen bastante bien.
Identificar esos casos ideales para la exploración de la utilidad cuántica es una enorme responsabilidad para los alumnos de este curso. Y no es una tarea que pueda realizarse en un curso como éste. Esa exploración es tarea de la Red Cuántica IBM en su conjunto, formada por investigadores como usted. Este curso demostrará los flujos de trabajo y las estrategias de codificación QML para que pueda empezar a explorar la utilidad cuántica en su área de especialización.
Esperamos que esta introducción haya aclarado algunas cosas sobre el aprendizaje automático cuántico:
- Los algoritmos cuánticos pueden ofrecer un aumento exponencial de la velocidad con respecto a los algoritmos clásicos para problemas muy específicos que son clásicamente difíciles y se adaptan bien a los algoritmos cuánticos.
- La alta dimensionalidad de los estados enredados en la computación cuántica es importante, pero no basta para obtener una ventaja sobre los algoritmos clásicos.
- Encontrar problemas que se adapten bien a los algoritmos cuánticos es una tarea extremadamente difícil, que recaerá en gran medida en los alumnos de este curso.
Preguntas de registro
¿Qué diferencia a los estados cuánticos de los clásicos?
Mucho. En particular: coeficientes complejos y superposición con una sola copia. Hay muchas otras diferencias que se tratarán en futuras lecciones, incluyendo el entrelazamiento y la interferencia.
¿Verdadero o falso? Los estados cuánticos altamente entrelazados nos permiten resolver la mayoría de los problemas de aprendizaje automático de forma más eficiente en un ordenador cuántico.
Falso. La mayoría de los problemas de aprendizaje automático se resuelven de forma muy eficiente mediante algoritmos clásicos y no es probable que los algoritmos cuánticos ofrezcan una aceleración sustancial. El objetivo de QML es encontrar conjuntos de datos con características que estén bien descritas por estados cuánticos y/o encontrar mapeados de características de datos que optimicen la precisión de los modelos.
Objetivos de aprendizaje del curso
Al finalizar este curso, adquirirás las siguientes aptitudes y competencias básicas. El alumno será capaz de:
-
Explique qué es QML y qué relación tiene la cuántica con el aprendizaje automático clásico.
-
Aplicar el vocabulario cuántico y los términos clave a los flujos de trabajo de ML.
-
Identificar los componentes clave de un flujo de trabajo QML (varios tipos).
-
Identificar los distintos tipos de QML y distinguir entre ellos.
-
Implementar métodos de núcleo cuántico y clasificadores cuánticos variacionales utilizando primitivas Qiskit Runtime y siguiendo patrones Qiskit.
-
Determinar dónde es más prometedor el QML y dónde no.
-
Adaptar un problema de ejemplo a su propio conjunto de datos.
-
Tenga en cuenta los problemas de QML, como el tiempo de formación, el ruido y el error compuesto en las lecturas de varios estados.
-
Hacer recomendaciones sobre dónde podría beneficiar el QML a su organización.
Estructura del curso
Este curso consta de varias lecciones. Cada lección contiene varias preguntas de control a lo largo del texto, para que puedas practicar nuevas destrezas o comprobar tu comprensión a medida que avanzas. No son obligatorios.
Al final del curso hay un cuestionario de 20 preguntas. Debe obtener una puntuación mínima del 70% en este cuestionario para obtener su insignia Quantum Machine Learning, a través de Credly. Si obtiene una puntuación mínima del 70%, se le enviará automáticamente su insignia por correo electrónico poco después. Sólo podrá presentar el cuestionario dos veces. Después del primer envío, tendrá la oportunidad de hacer un segundo intento con las preguntas que haya fallado. Después del segundo envío, su puntuación es definitiva. Para más información, consulte el cuestionario.
La estructura del curso es la siguiente:
- Lección 1: Introducción y visión general
- Lección 2: Recapitulación del aprendizaje automático
- Lección 3: Codificación de datos
- Lección 4: Métodos de núcleo cuántico y máquinas de vectores soporte
- Lección 5: Clasificadores cuánticos variacionales / redes neuronales
- Examen para la obtención del distintivo
Ejecuta tu primer código QML
A menudo es útil ver hacia dónde vamos, antes de dividirlo en trozos y profundizar en el trasfondo. Las celdas de código que se muestran a continuación ejecutan un ejemplo sencillo de un método de núcleo cuántico. En concreto, se calcula un único elemento de la matriz del núcleo. Los usuarios nuevos en métodos de núcleo o núcleos cuánticos no deben sentirse intimidados por esto; múltiples lecciones en este curso se dedicarán a diseccionar exactamente lo que se hace en estas celdas.
Con este código introducimos simultáneamente los patrones Qiskit: un marco para abordar la computación cuántica a escala de utilidad. Este marco consta de cuatro pasos que son muy generales y pueden aplicarse a la mayoría de los problemas (aunque en algunos flujos de trabajo, ciertos pasos pueden repetirse varias veces).
Patrones Qiskit:
- Paso 1: Asignar entradas clásicas a un problema cuántico
- Paso 2: Optimizar el problema para la ejecución cuántica
- Paso 3: Ejecutar utilizando Qiskit Runtime Primitives
- Paso 4: Análisis / postprocesado
En las celdas que aparecen a continuación, sólo ofrecemos explicaciones someras de los distintos pasos, lo suficiente para que encuentres la lección adecuada para saber más.
# Import some qiskit packages required for setting up our quantum circuits.
from qiskit.circuit import Parameter, ParameterVector, QuantumCircuit
from qiskit.circuit.library import unitary_overlap
# Import StatevectorSampler as our sampler.
from qiskit.primitives import StatevectorSampler
# Step 1: Map classical inputs to a quantum problem:
# Start by getting some appropriate data.
# The data imported below consist of 128 rows or data points.
# Each row has 14 columns that correspond to data features, and a 15th column with a label (+/-1).
!wget https://raw.githubusercontent.com/qiskit-community/prototype-quantum-kernel-training/main/data/dataset_graph7.csv
# Import some required packages, and write a function to pull some
# training data out of the csv file you got above.
import pandas as pd
import numpy as np
def get_training_data():
"""Read the training data."""
df = pd.read_csv("dataset_graph7.csv", sep=",", header=None)
training_data = df.values[:20, :]
ind = np.argsort(training_data[:, -1])
X_train = training_data[ind][:, :-1]
return X_train
# Prepare training data
X_train = get_training_data()
# Empty kernel matrix
num_samples = np.shape(X_train)[0]
# Prepare feature map for computing overlap between two data points.
# This could be pre-built feature maps like ZZFeatureMap, or a custom quantum circuit,
# as shown here.
num_features = np.shape(X_train)[1]
num_qubits = int(num_features / 2)
entangler_map = [[0, 2], [3, 4], [2, 5], [1, 4], [2, 3], [4, 6]]
fm = QuantumCircuit(num_qubits)
training_param = Parameter("θ")
feature_params = ParameterVector("x", num_qubits * 2)
fm.ry(training_param, fm.qubits)
for cz in entangler_map:
fm.cz(cz[0], cz[1])
for i in range(num_qubits):
fm.rz(-2 * feature_params[2 * i + 1], i)
fm.rx(-2 * feature_params[2 * i], i)
# Pick two data points, here 14 and 19, and assign the features to the circuits as parameters.
x1 = 14
x2 = 19
unitary1 = fm.assign_parameters(list(X_train[x1]) + [np.pi / 2])
unitary2 = fm.assign_parameters(list(X_train[x2]) + [np.pi / 2])
# Create the overlap circuit
overlap_circ = unitary_overlap(unitary1, unitary2)
overlap_circ.measure_all()
overlap_circ.draw("mpl", scale=0.6, style="iqp")
# Step 2: Optimize problem for quantum execution
# Use Qiskit Runtime service to get the least busy backend for running on real quantum computers.
# from qiskit_ibm_runtime import QiskitRuntimeService
# service = QiskitRuntimeService(channel="ibm_quantum")
# backend = service.least_busy(
# operational=True, simulator=False, min_num_qubits=overlap_circ.num_qubits
# )
# Transpile the circuits optimally for the chosen backend using a pass manager.
# from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
# pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
# overlap_ibm = pm.run(overlap_circ)
# Step 3: Execute using Qiskit Runtime Primitives
# Specify the number of shots to use.
num_shots = 10_000
## Evaluate the problem using statevector-based primitives from Qiskit
sampler = StatevectorSampler()
counts = (
sampler.run([overlap_circ], shots=num_shots).result()[0].data.meas.get_int_counts()
)
# Step 4: Analyze and post-processing
# Find the probability of 0.
counts.get(0, 0.0) / num_shotsOutput:
--2025-05-09 10:04:28-- https://raw.githubusercontent.com/qiskit-community/prototype-quantum-kernel-training/main/data/dataset_graph7.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.109.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 49405 (48K) [text/plain]
Saving to: ‘dataset_graph7.csv.2’
dataset_graph7.csv. 100%[===================>] 48.25K --.-KB/s in 0.03s
2025-05-09 10:04:29 (1.37 MB/s) - ‘dataset_graph7.csv.2’ saved [49405/49405]
0.8199
Aunque no es necesario entender todos los pasos anteriores, debemos intentar comprender el resultado, para saber por qué lo hacemos. Muchos procesos de aprendizaje automático utilizan productos internos como parte de la clasificación binaria (entre otras cosas). La mecánica cuántica tiene una conexión obvia con esto, ya que las probabilidades de medir varios estados vienen dadas por el producto interior con un estado inicial a través del producto interior: . Así que lo que hemos hecho es crear un circuito cuántico que contiene las características de nuestros dos puntos de datos, y los mapea en el espacio de un vector cuántico, luego estima el producto interno en ese espacio mediante la realización de mediciones. Este es un ejemplo de estimación cuántica kernel. Tenga en cuenta que sólo hemos aplicado este proceso a dos de los puntos de datos (el 14 y el 19). Si hiciéramos esto para todos los pares posibles, podríamos tomar la salida (en este caso el número 0.821...) y rellenar una matriz de resultados que describa el solapamiento entre todos los puntos del conjunto de datos de entrenamiento. Esta es la "matriz del núcleo".
Comprueba tu comprensión
En el proceso anterior, calculamos una entrada de matriz de núcleo para los puntos de datos 14 y 19. ¿Qué valor deberíamos obtener si utilizamos el mismo punto de datos dos veces, aquí (como 14º y 14º otra vez)? En otras palabras, ¿cuáles deberían ser las entradas diagonales de la matriz del núcleo? Responda a esta pregunta en ausencia de ruido, pero tenga en cuenta que es posible que se desvíe de su respuesta en presencia de ruido.
Las diagonales deben ser 1.0. Este proceso debe calcular el producto interior normalizado de un vector consigo mismo, que siempre debe ser uno.