Diseño cuántico de TensorFlow

TensorFlow Quantum (TFQ) está diseñado para los problemas del aprendizaje automático cuántico de la era NISQ. Trae las primitivas de la computación cuántica, como la construcción de circuitos cuánticos, al ecosistema TensorFlow. Los modelos y operaciones creados con TensorFlow utilizan estas primitivas para crear potentes sistemas híbridos cuánticos clásicos.

Con TFQ, los investigadores pueden construir un gráfico de TensorFlow utilizando un conjunto de datos cuánticos, un modelo cuántico y parámetros de control clásicos. Todos estos están representados como tensores en un único gráfico computacional. El resultado de las mediciones cuánticas, que conducen a eventos probabilísticos clásicos, se obtiene mediante operaciones de TensorFlow. La formación se realiza con la API estándar de Keras . El módulo tfq.datasets permite a los investigadores experimentar con conjuntos de datos cuánticos nuevos e interesantes.

circo

Cirq es un marco de programación cuántica de Google. Proporciona todas las operaciones básicas (como qubits, puertas, circuitos y mediciones) para crear, modificar e invocar circuitos cuánticos en una computadora cuántica o una computadora cuántica simulada. TensorFlow Quantum utiliza estas primitivas de Cirq para ampliar TensorFlow para el cálculo por lotes, la creación de modelos y el cálculo de gradientes. Para que sea eficaz con TensorFlow Quantum, es una buena idea ser eficaz con Cirq.

Primitivas cuánticas de TensorFlow

TensorFlow Quantum implementa los componentes necesarios para integrar TensorFlow con hardware de computación cuántica. Con ese fin, TFQ introduce dos primitivas de tipo de datos:

  • Circuito cuántico : esto representa circuitos cuánticos definidos por Cirq ( cirq.Circuit ) dentro de TensorFlow. Cree lotes de circuitos de diferentes tamaños, similares a lotes de diferentes puntos de datos de valor real.
  • Suma de Pauli : representa combinaciones lineales de productos tensoriales de operadores de Pauli definidos en Cirq ( cirq.PauliSum ). Al igual que los circuitos, cree lotes de operadores de distintos tamaños.

Operaciones fundamentales

Utilizando las primitivas del circuito cuántico dentro de un tf.Tensor , TensorFlow Quantum implementa operaciones que procesan estos circuitos y producen resultados significativos.

Las operaciones de TensorFlow están escritas en C++ optimizado. Estas operaciones toman muestras de circuitos, calculan los valores esperados y generan el estado producido por los circuitos dados. Escribir operaciones que sean flexibles y eficaces presenta algunos desafíos:

  1. Los circuitos no son del mismo tamaño. Para circuitos simulados, no puede crear operaciones estáticas (como tf.matmul o tf.add ) y luego sustituir números diferentes por circuitos de diferentes tamaños. Estas operaciones deben permitir tamaños dinámicos que el gráfico de cálculo de TensorFlow de tamaño estático no permite.
  2. Los datos cuánticos pueden inducir una estructura de circuito completamente diferente. Esta es otra razón para admitir tamaños dinámicos en las operaciones TFQ. Los datos cuánticos pueden representar un cambio estructural en el estado cuántico subyacente que se representa mediante modificaciones en el circuito original. A medida que los nuevos puntos de datos se intercambian dentro y fuera en tiempo de ejecución, el gráfico de cálculo de TensorFlow no se puede modificar una vez creado, por lo que se requiere compatibilidad con estas estructuras variables.
  3. cirq.Circuits son similares a los gráficos de cálculo en el sentido de que son una serie de operaciones y algunos pueden contener símbolos/marcadores de posición. Es importante hacer que esto sea lo más compatible posible con TensorFlow.

Por razones de rendimiento, Eigen (la biblioteca C++ utilizada en muchas operaciones de TensorFlow) no es muy adecuada para la simulación de circuitos cuánticos. En cambio, los simuladores de circuitos utilizados en el experimento cuántico más allá del clásico se utilizan como verificadores y se amplían como base de las operaciones TFQ (todas escritas con instrucciones AVX2 y SSE). Se crearon operaciones con firmas funcionales idénticas que utilizan una computadora cuántica física. Cambiar entre una computadora cuántica física y simulada es tan fácil como cambiar una sola línea de código. Estas operaciones se encuentran en circuit_execution_ops.py .

Capas

Las capas de TensorFlow Quantum exponen el muestreo, las expectativas y el cálculo de estado a los desarrolladores mediante la interfaz tf.keras.layers.Layer . Es conveniente crear una capa de circuito para parámetros de control clásicos o para operaciones de lectura. Además, puede crear una capa con un alto grado de complejidad que admita circuitos por lotes, valores de parámetros de control de lotes y realizar operaciones de lectura por lotes. Consulte tfq.layers.Sample para ver un ejemplo.

Diferenciadores

A diferencia de muchas operaciones de TensorFlow, los observables en circuitos cuánticos no tienen fórmulas para gradientes que sean relativamente fáciles de calcular. Esto se debe a que una computadora clásica sólo puede leer muestras de los circuitos que se ejecutan en una computadora cuántica.

Para resolver este problema, el módulo tfq.differentiators proporciona varias técnicas de diferenciación estándar. Los usuarios también pueden definir su propio método para calcular gradientes, tanto en el entorno del “mundo real” del cálculo de expectativas basado en muestras como en el mundo analítico exacto. Los métodos como el de diferencias finitas suelen ser los más rápidos (tiempo de reloj de pared) en un entorno analítico/exacto. Si bien son más lentos (tiempo de reloj de pared), los métodos más prácticos, como el cambio de parámetros o los métodos estocásticos, suelen ser más efectivos. Se crea una instancia de un tfq.differentiators.Differentiator y se adjunta a una operación existente con generate_differentiable_op , o se pasa al constructor de tfq.layers.Expectation o tfq.layers.SampledExpectation . Para implementar un diferenciador personalizado, herede de la clase tfq.differentiators.Differentiator . Para definir una operación de gradiente para muestreo o cálculo de vector de estado, use tf.custom_gradient .

Conjuntos de datos

A medida que crezca el campo de la computación cuántica, surgirán más datos cuánticos y combinaciones de modelos, lo que dificultará la comparación estructurada. El módulo tfq.datasets se utiliza como fuente de datos para tareas de aprendizaje automático cuántico. Garantiza comparaciones estructuradas para el modelo y el rendimiento.

Se espera que con grandes contribuciones de la comunidad, el módulo tfq.datasets crezca para permitir una investigación más transparente y reproducible. Los problemas cuidadosamente seleccionados en: control cuántico, simulación fermiónica, clasificación cerca de transiciones de fase, detección cuántica, etc. son excelentes candidatos para agregarlos a tfq.datasets . Para proponer un nuevo conjunto de datos, abra una edición de GitHub .