Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

Projeto TensorFlow Quantum

TensorFlow Quantum (TFQ) foi projetado para os problemas de aprendizado de máquina quântica 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 construídos com TensorFlow usam esses primitivos para criar sistemas híbridos quânticos clássicos poderosos.

Usando 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 - levando a eventos probabilísticos clássicos - é obtido por operações do TensorFlow. O treinamento é feito com o padrão Keras API. O tfq.datasets módulo permite que os investigadores a experimentar com novas e interessantes conjuntos de dados quânticos.

Cirq

Cirq é um quadro de programação quantum 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 um computador quântico simulado. O TensorFlow Quantum usa esses primitivos 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.

Primitivos TensorFlow Quantum

O TensorFlow Quantum implementa os componentes necessários para integrar o TensorFlow ao hardware de computação quântica. Para esse fim, TFQ apresenta dois primitivos de tipo de dados:

  • Circuito Quantum: Isto representa Cirq -definida circuitos quânticos ( cirq.Circuit ) dentro TensorFlow. Crie lotes de circuitos de tamanhos variados, semelhantes a lotes de diferentes pontos de dados com valor real.
  • Soma Pauli: Represente combinações lineares de produto de tensores de operadores Pauli definidos em Cirq ( cirq.PauliSum ). Como circuitos, crie lotes de operadores de tamanhos variados.

Operações fundamentais

Usando as primitivas de circuito quântico dentro de um tf.Tensor , TensorFlow Quantum implementa ops que processam estes circuitos e produzem resultados significativos.

As operações do TensorFlow são escritas em C ++ otimizado. Esses ops amostram os circuitos, calculam os valores esperados e emitem o estado produzido pelos circuitos fornecidos. Escrever operações que são flexíveis e de alto desempenho apresenta alguns desafios:

  1. Os circuitos não são do mesmo tamanho. Para circuitos simulados, você é incapaz de criar operações estáticas (como tf.matmul ou tf.add ) e depois substituir números diferentes para os circuitos de diferentes tamanhos. Essas operações devem permitir tamanhos dinâmicos que o gráfico de computação do TensorFlow estaticamente dimensionado não permite.
  2. 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 no tempo de execução, o gráfico de computação do TensorFlow não pode ser modificado após ser criado, portanto, o suporte para essas estruturas variáveis ​​é necessário.
  3. cirq.Circuits são semelhantes para calcular os gráficos em que eles 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 circuito quântico. Em vez disso, os simuladores de circuitos usados no quântico além-clássica experiência são usadas como verificadores e estendida como a fundação de ops TFQ (todos escritos com as instruções AVX2 e SSE). Operações com assinaturas funcionais idênticas foram criadas 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. Estes ops estão localizados no circuit_execution_ops.py .

Camadas

Camadas TensorFlow Quantum expor amostragem, expectativa, e cálculo de estado para promotores usando o tf.keras.layers.Layer interface. É 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 em lote, valor de parâmetro de controle em lote e executar operações de leitura em lote. Veja tfq.layers.Sample para um exemplo.

Diferenciadores

Ao contrário de muitas operações do TensorFlow, os observáveis ​​em circuitos quânticos não têm fórmulas para gradientes que são relativamente fáceis de calcular. Isso ocorre porque um computador clássico só pode ler amostras dos circuitos que funcionam em um computador quântico.

Para resolver este problema, o tfq.differentiators módulo 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 exato analítico. Métodos como diferença finita são frequentemente os mais rápidos (tempo de relógio de parede) em um ambiente analítico / exato. Embora mais lento (tempo de relógio de parede), métodos mais práticos, como mudança de parâmetro ou métodos estocásticos são muitas vezes mais eficaz. Um tfq.differentiators.Differentiator é instanciado e ligado a um op existente com generate_differentiable_op , ou passado para o construtor de tfq.layers.Expectation ou tfq.layers.SampledExpectation . Para implementar um diferencial personalizado, herdam da tfq.differentiators.Differentiator classe. Para definir uma operação de gradiente para a amostragem ou cálculo vector de estado, uso tf.custom_gradient .

Conjuntos de dados

Conforme o campo da computação quântica cresce, mais dados quânticos e combinações de modelos surgem, tornando a comparação estruturada mais difícil. O tfq.datasets módulo é utilizado como fonte de dados para tarefas de aprendizagem de máquina quântica. Ele garante comparações estruturadas para o modelo e desempenho.

Espera-se que com grandes contribuições da comunidade, o tfq.datasets módulo irá crescer para permitir a pesquisa que é mais transparente e reprodutível. Cuidadosamente curadoria problemas: controle quântica, simulação fermionic, transições de classificação perto de fase, de detecção quântica, etc são todos grandes candidatos para além de tfq.datasets . Para propor um novo conjunto de dados abrir uma questão GitHub .