La inteligencia artificial (IA) y el aprendizaje automático (ML) modernos dependen en gran medida del procesamiento de grandes volúmenes de datos y del aprendizaje de patrones a partir de ellos. En general, la capacidad de un modelo para generalizar mejora a medida que aumenta la cantidad de datos disponibles. Sin embargo, cuando pasamos del aprendizaje automático clásico al aprendizaje automático cuántico (QML), uno de los primeros desafíos importantes que encontramos es que las computadoras cuánticas no pueden leer directamente bits clásicos. Antes de que pueda realizarse cualquier cálculo, los datos primero deben integrarse en estados cuánticos (qubits).
Esto puede parecer sencillo al principio, pero en la práctica resulta sorprendentemente difícil. A medida que aumentan el tamaño y la complejidad de los datos, el coste de preparar estos estados cuánticos puede crecer exponencialmente. De hecho, actualmente no se conoce ningún método universalmente eficaz para cargar datos clásicos arbitrarios en sistemas cuánticos.
En este artículo, exploraremos por qué existe este problema, analizaremos algunas técnicas comunes de incorporación de datos cuánticos y, finalmente, analizaremos algunos enfoques modernos que los investigadores están investigando para superar estas limitaciones.
Cómo leen datos las redes neuronales clásicas
Las redes neuronales (NN) son uno de los pilares del aprendizaje automático moderno. Gran parte de su éxito proviene de nuestra creciente capacidad para recopilar, almacenar y procesar cantidades masivas de datos.
En esencia, las redes neuronales son sistemas matemáticos diseñados para aprender patrones a partir de datos. Durante el entrenamiento, ajustan gradualmente sus parámetros internos para capturar las relaciones que generaron los datos en primer lugar. Esto les permite realizar tareas como predicción, generación y clasificación.
Por ejemplo:
predecir precios futuros de acciones a partir de tendencias históricas, generar texto similar al humano, identificar objetos en imágenes o distinguir entre diferentes categorías de datos.
Una de las mayores fortalezas de las redes neuronales clásicas es su flexibilidad. Pueden procesar muchos tipos diferentes de datos y aprender las relaciones que existen dentro de ellos:
Datos secuenciales → lenguaje, series de tiempo financieras, señales de audio Datos espaciales → imágenes, vídeos, mapas geográficos Datos probabilísticos o ruidosos → mediciones de sensores, desintegración radiactiva, observaciones experimentales
A pesar de poder manejar muchos tipos diferentes de datos, las redes neuronales no “ven” directamente imágenes, audio o texto como lo hacen los humanos. Debajo del capó, todo se convierte en última instancia en vectores numéricos o tensores antes de ser procesado por la red.
Por ejemplo:
Una imagen se puede representar como una cuadrícula de valores de intensidad de píxeles. Una oración se puede convertir en incrustaciones de tokens. Una señal de audio se puede representar como una secuencia de amplitudes muestreadas a lo largo del tiempo.
Para una red neuronal, todas estas son simplemente representaciones numéricas estructuradas.
Las computadoras cuánticas no pueden leer bits
Las computadoras cuánticas son una forma fundamentalmente diferente de procesar información. En lugar de operar con bits clásicos, utilizan bits cuánticos, o qubits, que siguen los principios de la mecánica cuántica, como la superposición y el entrelazamiento.
Un bit clásico es un valor binario que es 0 o 1.
Un qubit, sin embargo, puede existir en una superposición de ambos estados simultáneamente. Un estado general de qubit normalmente se escribe como:
|ψ⟩ = α |0⟩ + β |1⟩ donde α y β son amplitudes de probabilidad complejas que satisfacen la restricción: |α|² + |β|² = 1.
Si algunos de estos conceptos no le resultan familiares, puede consultar mis artículos sobre computación cuántica para principiantes aquí. Sin embargo, para este artículo, la idea importante es simplemente que las computadoras cuánticas almacenan información de manera muy diferente a las computadoras clásicas.
Dado que vivimos en un mundo clásico, la mayoría de nuestros datos existen naturalmente como bits almacenados en la memoria clásica. Un procesador cuántico no puede leer directamente una imagen, una oración o una forma de onda de audio como lo puede hacer una red neuronal que se ejecuta en una GPU. Antes de que pueda realizarse cualquier cálculo cuántico, esta información clásica debe codificarse en qubits, una tarea que resulta mucho más difícil de lo que parece.
Incorporación de datos clásicos en estados cuánticos
La información clásica debe traducirse de algún modo a estados cuánticos. Este proceso se conoce como incorporación de datos cuánticos o preparación de estados cuánticos. Las posibles formas de hacerlo son amplitudes, fases o rotaciones de qubits.
A lo largo de los años, los investigadores han propuesto múltiples enfoques para incorporar datos clásicos en sistemas cuánticos. Dos de las técnicas más utilizadas son:
Codificación basada en ángulos Codificación de amplitud
Cada enfoque tiene sus propias ventajas, limitaciones y costos computacionales.
Codificación basada en ángulos
Uno de los enfoques más simples y más utilizados para la incrustación de datos cuánticos es la codificación de ángulos (también llamada incrustación basada en rotación).
En este método, las características clásicas se codifican como ángulos de rotación aplicados a qubits mediante puertas cuánticas como RX, RY y RZ que rotan un qubit a lo largo de los ejes X, Y y Z respectivamente.
Por ejemplo, un vector clásico: X = [x₁, x₂, x₃] se puede integrar en un circuito cuántico rotando diferentes qubits según el valor de cada característica.
Veamos una implementación simple de codificación basada en rotación en PennyLane:
importar pennylane como qml importar numpy como np # Vector de entrada clásico x = np.array([0.2, 0.7, 1.1]) n_qubits = len(x) dev = qml.device("default.qubit", wires=n_qubits) @qml.qnode(dev) def rotacional_embedding_circuit(x): # Cada característica x_i gira una qubit qml.AngleEmbedding( características=x, cables=rango(n_qubits), rotación="Y" # también puede ser "X" o "Z" ) return qml.state() estado = rotacional_embedding_circuit(x) qml.draw_mpl(rotacional_embedding_circuit, estilo='pennylane_sketch')(x) print(estado)
Una de las principales desventajas de la codificación basada en rotación es su escasa escalabilidad con respecto al número de qubits. En general, necesitamos tantos qubits como características en el vector de entrada.
Codificación basada en amplitud
La codificación basada en amplitud es otra técnica para incorporar datos clásicos en sistemas cuánticos. A diferencia de la codificación basada en rotación, donde cada característica controla la rotación de un qubit, la codificación de amplitud almacena información directamente en las amplitudes de un estado cuántico, por ejemplo, los términos α y β en |ψ⟩ = α |0⟩ + β |1⟩.
Por ejemplo:
X = [x₁, x₂, x₃, x₄] se puede codificar usando log₂(|X|) = 2
qubits como:
∣ψ(x)⟩= x₁∣00⟩ + x₂∣01⟩ + x₃∣10⟩ + x₄∣11⟩.
Esto es significativamente más compacto en comparación con la codificación basada en rotación que vimos anteriormente.
De hecho, esta es una de las ideas más fascinantes de la computación cuántica porque el número de amplitudes crece exponencialmente con el número de qubits.
Por ejemplo:
2 qubits → 2² = 4 amplitudes 10 qubits → 2¹⁰ = 1024 amplitudes 20 qubits → más de un millón de amplitudes
Esto significa que un sistema de n-qubit se describe mediante 2ⁿ amplitudes, lo que lleva a un espacio de estados que crece exponencialmente.
Como resultado, la codificación de amplitud ocupa exponencialmente más el espacio que la codificación basada en rotación. En lugar de requerir un qubit por característica, solo requiere aproximadamente: log₂(n) qubits para n características.
Veamos ahora una implementación simple de codificación de amplitud en PennyLane:
importar pennylane como qml importar numpy como np # Vector de entrada clásico x = np.array([0.2, 0.4, 0.6, 0.8]) # La codificación de amplitud necesita un vector normalizado x = x / np.linalg.norm(x) # Número de qubits necesarios: # 2 qubits pueden representar 2^2 = 4 amplitudes n_qubits = int(np.log2(len(x))) dev = qml.device("default.qubit", cables=n_qubits) @qml.qnode(dev) def amplitud_encoding_circuit(x): qml.AmplitudeEmbedding( características=x, cables=rango(n_qubits), normalize=True ) return qml.state() estado = amplitud_encoding_circuit(x) qml.draw_mpl(amplitude_encoding_circuit, style='pennylane_sketch')(x) print(estado)
Si sospechas tanto como yo, es posible que ya estés pensando:
"Esto parece demasiado bueno para ser verdad".
Y tendrías razón. Si bien la codificación de amplitud nos permite representar exponencialmente más datos en comparación con la codificación de ángulo, en realidad preparar tales estados cuánticos generalmente requiere una cantidad exponencialmente grande de operaciones.
La representación es exponencialmente compacta.
El proceso de carga normalmente no lo es.
La siguiente tabla compara los dos enfoques de codificación:
El cuello de botella en la carga de datos en el aprendizaje automático cuántico
Los sistemas modernos de aprendizaje automático funcionan con datos extremadamente grandes y de alta dimensión. Las imágenes pueden contener millones de píxeles, las señales de audio pueden abarcar miles de pasos de tiempo y los modelos de lenguaje modernos operan con vectores de incrustación masivos.
Analizamos dos enfoques fundamentales para incorporar datos clásicos en sistemas cuánticos. Si bien la codificación de amplitud parece teóricamente atractiva debido a su compacidad exponencial, el proceso de preparación real de tales estados cuánticos se vuelve cada vez más difícil a medida que crece el tamaño de los datos.
Esto crea uno de los mayores obstáculos prácticos en el aprendizaje automático cuántico:
Cargar información clásica en un sistema cuántico puede resultar en sí mismo costoso desde el punto de vista computacional.
En muchos casos, el costo de la preparación estatal puede compensar parcial o completamente las ventajas teóricas prometidas por los algoritmos cuánticos.
Esta es una sutileza importante que a menudo se pasa por alto en las discusiones sobre el aprendizaje automático cuántico. Muchos trabajos de investigación prestan muy poca atención al hecho de que:
Un modelo cuántico puede procesar información en un espacio de Hilbert exponencialmente grande, pero antes de que pueda realizarse cualquier cálculo, los datos primero deben integrarse en ese espacio de manera eficiente.
Y ese resulta ser un problema extremadamente difícil.
Para datos clásicos arbitrarios, actualmente no se conoce ningún método de preparación de estados cuánticos universalmente eficiente. De hecho, preparar un estado cuántico completamente general a menudo requiere un número exponencialmente grande de operaciones cuánticas.
Esto crea una compensación fascinante:
La codificación basada en rotación es relativamente fácil de implementar, pero escala mal con el recuento de qubits. La codificación de amplitud es exponencialmente compacta, pero su preparación puede resultar exponencialmente costosa.
En otras palabras:
El problema de representación y el problema de carga no son lo mismo.
Una computadora cuántica puede ser capaz de representar cantidades exponencialmente grandes de información, pero cargar esa información de manera eficiente en el sistema cuántico es un desafío fundamentalmente diferente.
Además, durante el proceso de incrustación, las relaciones estructurales importantes presentes en los datos originales, como las relaciones espaciales en imágenes o las dependencias temporales en datos secuenciales, también pueden resultar difíciles de preservar de forma natural dentro de las representaciones cuánticas.
Conclusión
El aprendizaje automático cuántico promete acceso a espacios de representación exponencialmente grandes, pero antes de que pueda realizarse cualquier cálculo, primero se debe integrar la información clásica en los sistemas cuánticos de manera eficiente.
Como exploramos en este artículo, esto resulta ser mucho más difícil de lo que parece inicialmente. Si bien métodos como la codificación de amplitud ofrecen representaciones extremadamente compactas, el proceso de preparación de estados cuánticos arbitrarios en sí puede resultar computacionalmente costoso.
Esto ha hecho que la carga de datos cuánticos sea uno de los principales obstáculos prácticos en la investigación moderna de QML. Muchas discusiones sobre el aprendizaje automático cuántico se centran en gran medida en el poder de los espacios de Hilbert exponencialmente grandes, mientras que prestan mucha menos atención al costo de alcanzar esos estados, casi como decir:
"Podemos preparar té en la cima de la montaña, pero cómo llegar allí es otro problema".
Los investigadores ahora están explorando activamente enfoques más nuevos, como incorporaciones cuánticas aprendidas, técnicas de recarga de datos e incorporaciones que preservan la estructura, para superar algunas de estas limitaciones. Incluso grandes empresas como Google Quantum AI han explorado recientemente estrategias de integración y representación más eficientes para sistemas de aprendizaje automático cuántico.
Es posible que exploremos algunos de estos enfoques en artículos futuros.
¡Gracias por leer!
Descargo de responsabilidad:
Este artículo se perfeccionó gramaticalmente con la ayuda de Large Language Models (LLM). Todas las ilustraciones de este artículo fueron creadas por el autor utilizando las herramientas de generación de imágenes GPT y Gemini, mientras que los diagramas de circuitos cuánticos se generaron utilizando PennyLane.
Versión 1.1