Path: blob/master/site/es-419/quantum/tutorials/qcnn.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Red neuronal convolucional cuántica
En este tutorial implementamos una red neuronal convolucional cuántica (QCNN), una analogía cuántica de la red neuronal convolucional clásica que también es traslacionalmente invariable.
Con este ejemplo se demuestra cómo detectar ciertas propiedades de una fuente de datos cuánticos, como un sensor cuántico o una simulación compleja de un dispositivo. La fuente de datos cuánticos es un estado de clúster que puede o no tener una excitación, que la QCNN aprenderá a detectar. (El conjunto de datos usado en la publicación fue el de clasificación de fase SPT).
Preparación
Instalar TensorFlow Quantum:
Ahora, hay que importar TensorFlow y las dependencias del módulo:
1. Creación de una QCNN
1.1 Ensamble de los circuitos en un grafo de TensorFlow
TensorFlow Quantum (TFQ) proporciona clases de capas diseñadas para la construcción de circuitos en grafos. Un ejemplo es la capa tfq.layers.AddCircuit
que hereda de tf.keras.Layer
. Esta capa puede anexar al principio o al final del lote de entrada de los circuitos, tal como se muestra en la siguiente figura.
En el siguiente fragmento se usa esta capa:
Examinamos el tensor de entrada:
Y el tensor de salida:
Si bien es posible ejecutar los ejemplos siguientes sin usar tfq.layers.AddCircuit
, es una buena oportunidad para entender de qué manera se puede incorporar una funcionalidad compleja a los grafos de cálculo de TensorFlow.
1.2 Panorama general del problema
Prepararemos un estado de clúster y entrenaremos un clasificador cuántico para detectar si está "excitado" o no. El estado de clúster está muy entrelazado, pero no necesariamente resulta difícil para usar en una computadora clásica. Para aclarar, cabe decir que es un conjunto de datos más simple que el usado en la publicación.
En esta tarea de clasificación implementaremos una QCNN profunda del estilo MERA, ya que:
Al igual que la QCNN, el estado de clúster en un anillo es traslacionalmente invariable.
El estado de clúster está muy entrelazado.
Esta arquitectura debería ser efectiva en la reducción del entrelazado y debería obtener la clasificación leyendo un solo bit cuántico.
Un estado de clúster "excitado" se define como un estado de clúster que ha tenido una puerta cirq.rx
aplicada a cualquiera de sus bits cuánticos. Qconv y QPool se tratan más adelante en este mismo tutorial.
1.3 Las bases fundamentales para TensorFlow
Una manera de resolver este problema con TensorFlow Quantum es mediante la implementación de lo siguiente:
La entrada al modelo es un tensor circuito, ya sea un circuito vacío o una puerta X en un bit cuántico particular, que indica una excitación.
El resto de los componentes cuánticos del modelo se construyen con capas
tfq.layers.AddCircuit
.Para inferir, se usa una capa
tfq.layers.PQC
. La capa lee y lo compara con una etiqueta de 1 para el estado excitado o -1 para un estado no excitado.
1.4 Los datos
Antes de crear un modelo, podemos generar los datos. En este caso serán excitaciones para el estado de clúster. (En la publicación original se usa un conjunto de datos más complicado). Las excitaciones se encuentran representadas por puertas cirq.rx
. Una rotación lo suficientemente amplia es considerada una excitación y se la etiqueta con 1
, mientras que una rotación que no lo es (suficientemente amplia) recibe la etiqueta de -1
(además de que no se la llama excitación).
Se ve que, al igual que con cualquier aprendizaje automático común, podemos crear un conjunto de prueba y de entrenamiento para comparar con el modelo. Miremos rápidamente algunos puntos de datos con lo siguiente:
1.5 Definición de las capas
Ahora, definimos en TensorFlow las capas que se muestran en la figura anterior.
1.5.1 Estado de clúster
El primer paso consiste en definir el estado de clúster con Cirq, un marco de trabajo de Google que sirve para programar circuitos cuánticos. Ya que es una parte estática del modelo, lo incorporamos utilizando la funcionalidad tfq.layers.AddCircuit
.
Se muestra un circuito de estado de clúster para un rectángulo de los cirq.GridQubit
:
1.5.2 Capas de QCNN
Definamos las capas que componen al modelo con la publicación de Cong y Lukin sobre QCNN. Hay algunos requisitos previos con los que debemos contar:
Las matrices unitarias parametrizadas de uno y dos bits cuánticos de la publicación de Tucci.
Una operación de agrupamiento (pooling) de dos bits cuánticos parametrizada general.
Para ver lo que hemos creado, imprimamos un circuito unitario de un bit cuántico:
El circuito unitario de dos bits cuánticos:
Y el circuito de agrupamiento de dos bits cuánticos:
1.5.2.1 Convolución cuántica
Tal como en la publicación de Cong y Lukin, definimos la convolución cuántica de 1 d como la aplicación de un unitario parametrizado de dos bits cuánticos para cada par de bits cuánticos adyacentes con un salto de uno.
Se muestra el circuito (muy horizontal):
1.5.2.2 Agrupamiento (pooling) cuántica
Una capa de agrupamiento cuántico agrupa bits cuánticos en , utilizando el agrupamiento de dos bits cuánticos definido arriba.
Examinemos un circuito de componentes de agrupamiento (pooling):
1.6 Definición del modelo
Ahora, usamos las capas definidas para construir una CNN puramente cuántica. Empezamos con ocho bits cuánticos, los agrupamos en uno y después, medimos .
1.7 Entrenamiento del modelo
Entrenamos el modelo con el lote completo para simplificar este ejemplo.
2. Modelos híbridos
No hace falta pasar de ocho bits cuánticos a uno con la convolución cuántica. Podríamos haber hecho una o dos rondas de convolución cuántica y haber alimentado una red neuronal clásica con los resultados. En esta sección se analizan los modelos híbridos cuántico-clásicos.
2.1 Modelo híbrido con un filtro cuántico solo
Aplicamos una capa de convolución cuántica, que lee en todos los bits, seguida por una red neuronal densamente conectada.
2.1.1 Definición del modelo
2.1.2 Entrenamiento del modelo
Tal como se puede ver, con cada instancia clásica modesta, el modelo híbrido, por lo general, converge más rápido que con la versión puramente cuántica.
2.2 Convolución híbrida con múltiples filtros cuánticos
Esta vez, probemos con una arquitectura que use varias convoluciones cuánticas y una red neuronal clásica para hacer una combinación.