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 primitivas de computación cuántica, como la construcción de circuitos cuánticos, al ecosistema TensorFlow. Los modelos y las operaciones creados con TensorFlow usan 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 se representan como tensores en un solo gráfico computacional. TensorFlow ops obtiene el resultado de las mediciones cuánticas, que conducen a eventos probabilísticos clásicos. El entrenamiento se realiza con la API estándar de Keras . El módulo tfq.datasets permite a los investigadores experimentar con nuevos e interesantes conjuntos de datos cuánticos.

circo

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

Primitivas de TensorFlow Quantum

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 los 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 diferentes tamaños.

operaciones fundamentales

Usando 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 los circuitos, calculan los valores esperados y emiten 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 diferentes números por circuitos de diferentes tamaños. Estas operaciones deben permitir tamaños dinámicos que el gráfico de cálculo 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 representado por modificaciones en el circuito original. A medida que se intercambian nuevos puntos de datos durante el tiempo de ejecución, el gráfico de cómputo de TensorFlow no se puede modificar después de compilarlo, por lo que se requiere soporte para estas estructuras variables.
  3. cirq.Circuits Los circuitos 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 que esto sea lo más compatible posible con TensorFlow.

Por motivos de rendimiento, Eigen (la biblioteca de C++ utilizada en muchas operaciones de TensorFlow) no es adecuada para la simulación de circuitos cuánticos. En cambio, los simuladores de circuito utilizados en el experimento cuántico más allá del clásico se utilizan como verificadores y se extienden como la base de las operaciones TFQ (todo escrito 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 simulada y física 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, la expectativa 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 compatible con el circuito por lotes, el valor del parámetro 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 solo puede leer muestras de los circuitos que se ejecutan en una computadora cuántica.

Para resolver este problema, el módulo tfq.differentiators . 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 la configuración del "mundo real" del cálculo de expectativas basado en muestras como en el mundo analítico exacto. Los métodos como la diferencia finita suelen ser los más rápidos (tiempo de reloj de pared) en un entorno analítico/exacto. Si bien es más lento (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 tfq.differentiators.Differentiator . differentiators.Differentiator y se adjunta a una operación existente con generate_differentiable_op 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 . 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 las 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 de transiciones de fase cercanas, detección cuántica, etc. son excelentes candidatos para agregar a tfq.datasets . Para proponer un nuevo conjunto de datos, abra un problema de GitHub .