Path: blob/master/site/pt-br/quantum/tutorials/barren_plateaus.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
Barren plateaus
Neste exemplo, você explorará o resultado de McClean, 2019, que afirma que nem toda estrutura de rede neural quântica terá um bom desempenho quando se trata do aprendizado. Em particular, você verá que uma certa grande família de circuitos quânticos aleatórios não serve como boas redes neurais quânticas, porque têm gradientes que desaparecem em quase todo lugar. Neste exemplo, você não treinará nenhum modelo para um problema de aprendizado específico, e sim focará no problema mais simples de entender o comportamento dos gradientes.
Configuração
Instale o TensorFlow Quantum:
Agora importe o TensorFlow e as dependências de módulo:
1. Resumo
Circuitos quânticos aleatórios com vários blocos que se parecem assim ( é uma rotação de Pauli aleatória):
Em que é definido como o valor esperado w.r.t. para quaisquer qubits e , e também há o problema de ser uma média bastante próxima a 0 e não variar muito. Você verá isso abaixo:
2. Geração de circuitos aleatórios
É fácil seguir a construção do artigo. O seguinte código implementa uma função simples que gera um circuito quântico aleatório — às vezes chamado de rede neural quântica (QNN)— com a determinada profundidade em um conjunto de qubits:
Os autores investigam o gradiente de um único parâmetro . Vamos seguir isso ao colocar um sympy.Symbol
no circuito, onde estaria. Como os autores não analisam as estatísticas de qualquer outro símbolo no circuito, vamos substituir por valores aleatórios agora, e não depois.
3. Execução dos circuitos
Gere alguns desses circuitos com um observável para testar a afirmação de que os gradientes não variam muito, Primeiro, gere um lote de circuitos aleatórios. Escolha um observável ZZ aleatório e calcule os gradientes e a variância em lote usando o TensorFlow Quantum.
3.1 Computação da variância em lote
Vamos escrever uma função helper que computa a variância do gradiente de um determinado observável em um lote de circuitos:
3.1 Configure e execute
Escolha o número de circuitos aleatórios para gerar com a profundidade deles e o número de qubits em que devem agir. Em seguida, plote os resultados.
Essa plotagem mostra que, para problemas de aprendizado de máquina quântico, você não pode simplesmente chutar um ansatz de QNN aleatório e torcer pelo melhor. O circuito do modelo precisa ter alguma estrutura para que os gradientes variem até o ponto em que o aprendizado é possível.
4. Heurística
Uma heurística interessante por Grant, 2019 permite uma inicialização bem próxima do aleatório, mas não exatamente. Usando os mesmos circuitos que McClean et al., os autores propõem uma técnica de inicialização diferente para os parâmetros de controle clássicos evitarem barren plateaus. Nessa técnica, são iniciadas algumas camadas com parâmetros de controle totalmente aleatórios — mas, nas camadas logo após, são escolhidos parâmetros para que essa transformação inicial das primeiras camadas seja desfeita. Os autores chamam isso de bloco de identidade.
A vantagem dessa heurística é que, ao mudar só um parâmetro, todos os outros blocos fora do atual permanecerão a identidade — e o sinal do gradiente chegará muito mais forte do que antes. Isso permite que o usuário escolha quais variáveis e blocos modificar para obter um forte sinal de gradiente. Essa heurística não evita que os usuários caiam em um barren plateau durante a fase de treinamento (e restringe uma atualização totalmente simultânea), só garante o começo fora de um plateau.
4.1 Nova construção de QNN
Agora construa uma função para gerar QNNs de bloco de identidade. Essa implementação é um pouco diferente daquela no artigo. Por enquanto, observe o comportamento do gradiente de um único parâmetro para que seja consistente com McClean et al. Assim, é possível fazer algumas simplificações.
Para gerar um bloco de identidade e treinar o modelo, geralmente, você precisa de , e não . Inicialmente, e são os mesmos ângulos, mas eles são aprendidos de forma independente. Caso contrário, você sempre obterá a identidade, mesmo depois do treinamento. A escolha do número de blocos de identidade é empírica. Quanto mais profundo o bloco, menor a variância no meio dele. No entanto, no início e no final do bloco, a variância dos gradientes dos parâmetros deve ser grande.
4.2 Comparação
Aqui você pode ver que a heurística realmente ajuda a impedir que a variância do gradiente desapareça rapidamente:
Essa é uma ótima melhoria para receber sinais de gradiente mais fortes de QNNs (quase) aleatórias.