O TensorFlow Quantum (TFQ) foi projetado para os problemas de aprendizado de máquina quântico da era NISQ. Ele traz primitivos de computação quântica – como a construção de circuitos quânticos – para o ecossistema TensorFlow. Modelos e operações criados com o TensorFlow usam essas primitivas para criar poderosos sistemas híbridos quânticos-clássicos.
Usando o TFQ, os pesquisadores podem construir um gráfico do TensorFlow usando um conjunto de dados quânticos, um modelo quântico e parâmetros de controle clássicos. Todos eles são representados como tensores em um único gráfico computacional. O resultado das medições quânticas – que levam a eventos probabilísticos clássicos – é obtido pelas operações do TensorFlow. O treinamento é feito com a API Keras padrão. O módulo tfq.datasets
permite que os pesquisadores experimentem conjuntos de dados quânticos novos e interessantes.
Cirq
Cirq é uma estrutura de programação quântica do Google. Ele fornece todas as operações básicas – como qubits, portas, circuitos e medições – para criar, modificar e invocar circuitos quânticos em um computador quântico ou em um computador quântico simulado. O TensorFlow Quantum usa essas primitivas Cirq para estender o TensorFlow para computação em lote, construção de modelo e computação de gradiente. Para ser eficaz com o TensorFlow Quantum, é uma boa ideia ser eficaz com o Cirq.
Primitivas quânticas do TensorFlow
O TensorFlow Quantum implementa os componentes necessários para integrar o TensorFlow ao hardware de computação quântica. Para esse fim, TFQ introduz duas primitivas de tipo de dados:
- Circuito quântico : representa circuitos quânticos definidos por Cirq (
cirq.Circuit
) no TensorFlow. Crie lotes de circuitos de tamanhos variados, semelhantes a lotes de diferentes pontos de dados com valor real. - Soma de Pauli : Representa combinações lineares de produtos tensoriais de operadores de Pauli definidos em Cirq (
cirq.PauliSum
). Assim como os circuitos, crie lotes de operadores de tamanhos variados.
Operações fundamentais
Usando os primitivos de circuito quântico em um tf.Tensor
, o TensorFlow Quantum implementa operações que processam esses circuitos e produzem saídas significativas.
As operações do TensorFlow são escritas em C++ otimizado. Essas operações coletam amostras de circuitos, calculam valores esperados e geram o estado produzido pelos circuitos fornecidos. Escrever operações flexíveis e de alto desempenho apresenta alguns desafios:
- Os circuitos não são do mesmo tamanho. Para circuitos simulados, você não pode criar operações estáticas (como
tf.matmul
outf.add
) e depois substituir números diferentes por circuitos de tamanhos diferentes. Essas operações devem permitir tamanhos dinâmicos que o gráfico de computação do TensorFlow de tamanho estático não permite. - Os dados quânticos podem induzir uma estrutura de circuito totalmente diferente. Este é outro motivo para oferecer suporte a tamanhos dinâmicos nas operações TFQ. Os dados quânticos podem representar uma mudança estrutural no estado quântico subjacente que é representado por modificações no circuito original. À medida que novos pontos de dados são trocados dentro e fora em tempo de execução, o gráfico de computação do TensorFlow não pode ser modificado depois de criado, portanto, é necessário suporte para essas estruturas variadas.
-
cirq.Circuits
são semelhantes aos gráficos de computação no sentido de que são uma série de operações - e alguns podem conter símbolos/espaços reservados. É importante tornar isso o mais compatível possível com o TensorFlow.
Por motivos de desempenho, Eigen (a biblioteca C++ usada em muitas operações do TensorFlow) não é adequada para simulação de circuitos quânticos. Em vez disso, os simuladores de circuito usados no experimento quântico além do clássico são usados como verificadores e estendidos como base para operações TFQ (todos escritos com instruções AVX2 e SSE). Foram criadas operações com assinaturas funcionais idênticas que usam um computador quântico físico. Alternar entre um computador quântico simulado e um computador quântico físico é tão fácil quanto alterar uma única linha de código. Essas operações estão localizadas em circuit_execution_ops.py
.
Camadas
As camadas do TensorFlow Quantum expõem amostragem, expectativa e cálculo de estado aos desenvolvedores que usam a interface tf.keras.layers.Layer
. É conveniente criar uma camada de circuito para parâmetros de controle clássicos ou para operações de leitura. Além disso, você pode criar uma camada com um alto grau de complexidade que suporta circuito em lote, valor de parâmetro de controle de lote e executar operações de leitura em lote. Consulte tfq.layers.Sample
para obter um exemplo.
Diferenciadores
Ao contrário de muitas operações do TensorFlow, os observáveis em circuitos quânticos não possuem fórmulas para gradientes que sejam relativamente fáceis de calcular. Isso ocorre porque um computador clássico só pode ler amostras dos circuitos executados em um computador quântico.
Para resolver este problema, o módulo tfq.differentiators
fornece diversas técnicas de diferenciação padrão. Os usuários também podem definir seu próprio método para calcular gradientes – tanto na configuração do “mundo real” do cálculo de expectativa baseado em amostra quanto no mundo analítico exato. Métodos como diferenças finitas costumam ser os mais rápidos (tempo de relógio) em um ambiente analítico/exato. Embora mais lentos (tempo de relógio), métodos mais práticos, como mudança de parâmetro ou métodos estocásticos, costumam ser mais eficazes. Um tfq.differentiators.Differentiator
é instanciado e anexado a uma operação existente com generate_differentiable_op
ou passado para o construtor de tfq.layers.Expectation
ou tfq.layers.SampledExpectation
. Para implementar um diferenciador customizado, herde da classe tfq.differentiators.Differentiator
. Para definir uma operação de gradiente para amostragem ou cálculo de vetor de estado, use tf.custom_gradient
.
Conjuntos de dados
À medida que o campo da computação quântica cresce, surgirão mais dados quânticos e combinações de modelos, tornando a comparação estruturada mais difícil. O módulo tfq.datasets
é usado como fonte de dados para tarefas de aprendizado de máquina quântica. Garante comparações estruturadas para o modelo e desempenho.
Espera-se que, com grandes contribuições da comunidade, o módulo tfq.datasets
cresça para permitir pesquisas mais transparentes e reprodutíveis. Problemas cuidadosamente selecionados em: controle quântico, simulação fermiônica, classificação perto de transições de fase, detecção quântica, etc. são ótimos candidatos para adição ao tfq.datasets
. Para propor um novo conjunto de dados, abra um problema no GitHub .