Otimizadores clássicos
O que é um otimizador?
Victoria Lipinska fala sobre otimizadores clássicos e como eles funcionam como parte do VQE.
Você vai ouvir sobre alguns exemplos de otimizadores e como eles se comportam na presença e na ausência de ruído.
Referências
Os artigos a seguir são citados no vídeo acima.
- A Comparison of Various Classical Optimizers for a Variational Quantum Linear Solver, Pellow-Jarman, et al.
- The Variational Quantum Eigensolver: A review of methods and best practices, Tilly, et al.
- Quantum computational chemistry, McArdle, et al.
- Barren plateaus in quantum neural network training landscapes, McClean, et al.
- Connecting Ansatz Expressibility to Gradient Magnitudes and Barren Plateaus, Holmes, et al.
- Effect of barren plateaus on gradient-free optimization, Arrasmith, et al.
Codificando um otimizador clássico
Nas lições anteriores, você aprendeu a criar um Hamiltoniano adequado para uso em um computador quântico e como construir um circuito variacional. Você também aprendeu que o circuito variacional (ou ansatz) contém parâmetros a serem variados, e a escolha ótima de parâmetros é aquela que produz a menor função de custo ou energia possível. Assim, nosso problema se reduz a buscar no espaço de parâmetros o conjunto ideal. A maior parte do trabalho com otimizadores clássicos já foi feita por nós, pois excelentes otimizadores estão disponíveis em várias fontes.
Nesta lição você vai aprender:
- como os otimizadores clássicos se encaixam em um cálculo VQE
- quais otimizadores clássicos estão disponíveis no SciPy
- quais otimizadores não estão ainda disponíveis no SciPy e como complementá-los por enquanto usando
qiskit.algorithms - quais opções estão disponíveis para esses otimizadores e sua relevância para a computação quântica
O SciPy é uma biblioteca Python gratuita e de código aberto com pacotes relevantes para diversas áreas da computação científica, incluindo otimização. Em particular, o SciPy tem um pacote de otimização que inclui minimize:
from scipy.optimize import minimize
Essa função minimize tem vários argumentos, mas os mais relevantes para a química quântica são:
- A função de custo (
cost_func). Ela está relacionada ao Hamiltoniano, mas também envolve algumas complexidades, como determinar o valor esperado usando o Estimator e, no caso de cálculos de estados excitados, pode incluir condições de ortogonalidade. - Um estado inicial (
x0) para o sistema, frequentemente o estado de Hartree-Fock - Outros argumentos, incluindo argumentos da própria função de custo
- O método definido como o otimizador clássico que você selecionar
- Opções para o otimizador clássico (não confundir com as opções de Session discutidas na próxima seção)
Um exemplo de código é mostrado abaixo. Restringimos nossa discussão aqui aos dois últimos argumentos.
cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})
O SciPy tem documentação sobre todos os métodos de minimização disponíveis. Aqui estão alguns exemplos notáveis, todos métodos para minimizar uma função escalar de uma ou mais variáveis:
- cobyla: algoritmo de Otimização por Aproximação Linear (COBYLA).
- slsqp: Programação Sequencial de Mínimos Quadrados (SLSQP).
- nelder-mead: algoritmo de Nelder-Mead.
A maioria dos algoritmos de otimização clássica disponíveis são minimizadores locais, no sentido de que usam vários métodos para encontrar mínimos locais, mas não garantem encontrar mínimos globais. Alguns otimizadores clássicos estimam explicitamente gradientes e os usam para encontrar mínimos locais. Outros podem usar aproximações lineares ou quadráticas sucessivas da função objetivo para encontrar mínimos.
Esses algoritmos têm várias opções em comum, mas com diferenças sutis. Por exemplo, todos têm a opção de especificar um número máximo de iterações usando a notação 'maxiter': 200 do exemplo acima. Todos têm alguma opção especificando um critério de parada diferente baseado em valores de função ou variável, embora esses critérios sejam ligeiramente diferentes para algoritmos diferentes. O COBYLA, por exemplo, permite especificar uma tolerância (por exemplo, 'tol': 0.0001) que é o limite inferior de uma "região de confiança". Em comparação, o SLSQP permite especificar uma meta na precisão da função usada no critério de parada ('ftol'). O Nelder-Mead permite especificar uma tolerância na diferença entre tentativas sucessivas de parâmetros () (xatol) ou uma tolerância na diferença entre valores sucessivos obtidos para a função de custo (fatol) (ou ambos).
Para uma lista completa dos algoritmos e opções disponíveis, acesse a documentação do minimize do SciPy.