Projeto quântico do TensorFlow

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 construir circuitos quânticos – para o ecossistema TensorFlow. Modelos e operações criados com o TensorFlow usam esses primitivos para criar sistemas híbridos clássicos quânticos poderosos.

Usando o TFQ, os pesquisadores podem construir um gráfico do TensorFlow usando um conjunto de dados quântico, um modelo quântico e parâmetros de controle clássicos. Estes são todos representados como tensores em um único gráfico computacional. O resultado das medições quânticas – levando 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 novos e interessantes conjuntos de dados quânticos.

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ção – 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 do Cirq para estender o TensorFlow para computação em lote, construção de modelos 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, o TFQ introduz duas primitivas de tipo de dados:

  • Circuito quântico : representa os circuitos quânticos definidos pelo Cirq ( cirq.Circuit ) no TensorFlow. Crie lotes de circuitos de tamanhos variados, semelhantes a lotes de diferentes pontos de dados de 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 grupos de operadores de tamanhos variados.

Operações fundamentais

Usando as primitivas 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 amostram dos circuitos, calculam os valores esperados e produzem o estado produzido pelos circuitos fornecidos. Escrever operações flexíveis e de alto desempenho tem alguns desafios:

  1. Os circuitos não são do mesmo tamanho. Para circuitos simulados, você não pode criar operações estáticas (como tf.matmul ou tf.add ) e então 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 dimensionado estaticamente não permite.
  2. Os dados quânticos podem induzir uma estrutura de circuito completamente diferente. Esse é outro motivo para oferecer suporte a tamanhos dinâmicos nas operações do TFQ. Os dados quânticos podem representar uma mudança estrutural no estado quântico subjacente que é representado por modificações no circuito original. Como novos pontos de dados são trocados no 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.
  3. cirq.Circuits são semelhantes aos gráficos de computação, pois são uma série de operações - e alguns podem conter símbolos/espaços reservados. É importante torná-lo o mais compatível possível com o TensorFlow.

Por motivos de desempenho, a 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 a base das 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 físico é tão fácil quanto alterar uma única linha de código. Essas operações estão localizadas no circuit_execution_ops.py .

Camadas

As camadas do TensorFlow Quantum expõem amostragem, expectativa e cálculo de estado para desenvolvedores usando 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 suportando circuito de lote, valor de parâmetro de controle de lote e realizar operações de leitura de lote. Consulte tfq.layers.Sample para obter um exemplo.

Diferenciais

Ao contrário de muitas operações do TensorFlow, os observáveis ​​em circuitos quânticos não possuem fórmulas para gradientes 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 várias 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ça finita são geralmente os mais rápidos (tempo de relógio de parede) em um ambiente analítico/exato. Embora mais lento (tempo do relógio de parede), métodos mais práticos, como mudança de parâmetro ou métodos estocásticos, geralmente são mais eficazes. Um tfq.differentiators.Differentiator é instanciado e anexado a um op existente com generate_differentiable_op , ou passado para o construtor de tfq.layers.Expectation ou tfq.layers.SampledExpectation . Para implementar um diferenciador personalizado, 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, mais dados quânticos e combinações de modelos surgirão, dificultando a comparação estruturada. O módulo tfq.datasets é usado como fonte de dados para tarefas de aprendizado de máquina quântico. Ele 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 reproduzíveis. Problemas cuidadosamente selecionados em: controle quântico, simulação fermiônica, classificação perto de transições de fase, sensoriamento quântico, etc, são todos grandes candidatos para adição ao tfq.datasets . Para propor um novo conjunto de dados, abra um problema do GitHub .