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 para 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
This minimize function has several arguments, but the most relevant arguments for quantum chemistry are:
- The cost function (
cost_func). This is related to the Hamiltonian, but also includes some complexities, such as determining the expectation value by using Estimator, and in the case of excited state calculations, might include orthogonality conditions. - An initial state (x0) for the system, often the Hartree Fock state
- Other arguments, including arguments of the cost function itself
- The method set to the classical optimizer you select
- Options for the classical optimizer (not to be confused with Session options discussed in the next section)
Alguns exemplos de código são mostrados 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 dignos de nota, todos os quais são métodos para minimizar uma função escalar de uma ou mais variáveis:
- cobyla: algoritmo Optimization BY Linear Approximation (COBYLA).
- slsqp: Sequential Least Squares Programming (SLSQP).
- nelder-mead algoritmo 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 têm garantia de 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 mostrada acima. Todos têm alguma opção especificando um critério de parada diferente com base 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 estimativas 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 de algoritmos e opções disponíveis, visite a documentação de minimização do SciPy.