Path: blob/master/site/pt-br/quantum/tutorials/qcnn.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Rede Neural Convolucional Quântica
Este tutorial implementa uma Rede Neural Convolucional Quântica (QCNN), um análogo quântico proposto para uma rede neural convolucional clássica que também é translacionalmente invariante.
Este exemplo demonstra como detectar determinadas propriedades de uma fonte de dados quântica, como um sensor quântico ou uma simulação complexa de um dispositivo. A fonte de dados quântica é um estado de cluster que pode ou não ter excitação — o que a QCNN aprenderá a detectar (o dataset usado nesse artigo foi a classificação de fases SPT).
Configuração
Instale o TensorFlow Quantum:
Agora importe o TensorFlow e as dependências de módulo:
1. Crie uma QCNN
1.1 Reúna os circuitos em um grafo do TensorFlow
O TensorFlow Quantum (TFQ) fornece classes de camadas criadas para a construção de circuitos no grafo. Um exemplo é a camada tfq.layers.AddCircuit
que herda de tf.keras.Layer
. Essa camada pode preceder ou ser anexada ao lote de entrada de circuitos, conforme mostrado na figura abaixo.
O fragmento a seguir usa essa camada:
Examine o tensor de entrada:
E examine o tensor de saída:
Embora seja possível executar os exemplos abaixo sem usar tfq.layers.AddCircuit
, é recomendável entender como a funcionalidade complexa pode ser incorporada nos grafos computacionais do TensorFlow.
1.2 Visão geral do problema
Você preparará um estado de cluster e treinará um classificador quântico para detectar se está "excitado" ou não. O estado de cluster é altamente emaranhado, mas não necessariamente difícil para um computador clássico. Para maior clareza, esse é um dataset mais simples do que o usado no artigo.
Para essa tarefa de classificação, você implementará uma arquitetura de QCNN semelhante à MERA, porque:
Como a QCNN, o estado de cluster em um anel é translacionalmente invariante.
O estado de cluster é altamente emaranhado.
Essa arquitetura deve ser eficaz em reduzir o emaranhamento, obtendo a classificação ao ler um único qubit.
Um estado de cluster "excitado" é definido como um estado de cluster com uma porta cirq.rx
aplicada a qualquer um dos qubits. Qconv e QPool são discutidos mais tarde neste tutorial.
1.3 Componentes básicos para o TensorFlow
Uma maneira de resolver esse problema com o TensorFlow Quantum é implementar o seguinte:
A entrada do modelo é um tensor de circuito, seja um circuito vazio ou uma porta X em um qubit específico indicando uma excitação.
O resto dos componentes quânticos do modelo são construídos com camadas
tfq.layers.AddCircuit
.Para inferência, é usada uma camada
tfq.layers.PQC
. Ela lê e compara com um rótulo de 1 para um estado excitado ou -1 para um estado não excitado.
1.4 Dados
Antes de criar o modelo, você pode gerar seus dados. Nesse caso, será excitações no estado de cluster (o artigo original usa um dataset mais complicado). As excitações são representadas por portas cirq.rx
. Uma rotação grande o suficiente é considerada uma excitação e rotulada como 1
, enquanto uma rotação que não é grande o suficiente é rotulada como -1
e não é considerada uma excitação.
Você pode ver que, assim como no aprendizado de máquina comum, é possível criar um dataset de treinamento e de teste para fazer o benchmarking do modelo. É possível analisar rapidamente alguns pontos de dados com:
1.5 Defina camadas
Agora defina as camadas mostradas na figura acima no TensorFlow.
1.5.1 Estado de cluster
O primeiro passo é definir o estado de cluster usando Cirq, um framework fornecido pelo Google para programar circuitos quânticos. Como essa é a parte estática do modelo, incorpore-a usando a funcionalidade tfq.layers.AddCircuit
.
Exiba um circuito de estado de cluster para um retângulo de cirq.GridQubit
s:
1.5.2 Camadas de QCNN
Defina as camadas que compõem o modelo usando o artigo de Cong e Lukin sobre QCNN. Há alguns pré-requisitos:
As matrizes unitárias parametrizadas de um e dois qubits do artigo de Tucci.
Uma operação de pooling de dois qubits parametrizada geral.
Para ver o que você criou, imprima o circuito unitário de um qubit:
E o circuito unitário de dois qubits:
E o circuito de pooling de dois qubits:
1.5.2.1 Convolução quântica
Assim como no artigo de Cong e Lukin, defina a convolução quântica 1D como a aplicação de um unitário parametrizado de dois qubits a cada par de qubits adjacente com um stride de um.
Exiba o circuito (bastante horizontal):
1.5.2.2 Pooling quântico
Uma camada de pooling quântico agrega os qubits para os qubits usando o pool de dois qubits definido acima.
Examine um circuito de componentes de pooling:
1.6 Definição do modelo
Agora, use as camadas definidas para construir uma CNN estritamente quântica. Comece com oito qubits, reduza para um e meça .
1.7 Treine o modelo
Treine o modelo com o lote completo para simplificar esse exemplo.
2. Modelos híbridos
Você não precisa reduzir oito qubits a um usando a convolução quântica — é possível fazer umas ou duas rodadas de convolução quântica e alimentar os resultados a uma rede neural clássica. Essa seção explora modelos quântico-clássico híbridos.
2.1 Modelo híbrido com um único filtro quântico
Aplique uma camada de convolução quântica, lendo em todos os bits, seguida por uma rede neural densamente conectada.
2.1.1 Definição do modelo
2.1.2 Treine o modelo
Como você pode ver, com uma assistência clássica bastante modesta, o modelo híbrido geralmente converge com mais rapidez do que a versão puramente quântica.
2.2 Convolução híbrida com vários filtros quânticos
Agora vamos testar uma arquitetura que usa várias convoluções quânticas e uma rede neural clássica para combiná-las.