Ottimizzatori classici
Che cos'è un ottimizzatore?​
Victoria Lipinska ci parla degli ottimizzatori classici e di come funzionano nell'ambito del VQE.
Scoprirai alcuni esempi di ottimizzatori e come si comportano in presenza o assenza di rumore.
Riferimenti​
I seguenti articoli sono citati nel video sopra.
- 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.
Programmare un ottimizzatore classico​
Nelle lezioni precedenti hai imparato a costruire un Hamiltoniano adatto all'uso su un computer quantistico e a creare un circuito variazionale. Hai anche appreso che il circuito variazionale (o ansatz) contiene parametri da variare, e che la scelta ottimale dei parametri è quella che produce il valore più basso possibile della funzione di costo o dell'energia. Il problema si riduce quindi alla ricerca, nello spazio dei parametri, dell'insieme ottimale. Gran parte del lavoro sugli ottimizzatori classici è già stato fatto per noi: ottimi ottimizzatori sono disponibili da diverse fonti.
In questa lezione imparerai:
- Come gli ottimizzatori classici si inseriscono in un calcolo VQE
- Quali ottimizzatori classici sono disponibili da SciPy
- Quali ottimizzatori non sono ancora disponibili tramite SciPy e come integrarli nel frattempo usando
qiskit.algorithms - Quali opzioni sono disponibili per questi ottimizzatori e la loro rilevanza per il calcolo quantistico
SciPy è una libreria Python gratuita e open source con pacchetti rilevanti per molte aree del calcolo scientifico, inclusa l'ottimizzazione. In particolare, SciPy dispone di un pacchetto di ottimizzazione che include 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)
Some example code is shown below. We restrict our discussion here to the last two arguments.
cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})
SciPy dispone di documentazione su tutti i metodi minimize disponibili. Ecco alcuni esempi degni di nota, tutti metodi per minimizzare una funzione scalare di una o più variabili:
- cobyla: algoritmo di ottimizzazione per approssimazione lineare (COBYLA).
- slsqp: Programmazione sequenziale ai minimi quadrati (SLSQP).
- nelder-mead Algoritmo di Nelder-Mead.
La maggior parte degli algoritmi di ottimizzazione classica disponibili sono minimizzatori locali: utilizzano vari metodi per trovare minimi locali, ma non garantiscono di trovare il minimo globale. Alcuni ottimizzatori classici stimano esplicitamente i gradienti e li usano per trovare minimi locali. Altri possono ricorrere ad approssimazioni lineari o quadratiche successive della funzione obiettivo per trovare i minimi.
Questi algoritmi condividono diverse opzioni, ma con sottili differenze. Ad esempio, tutti consentono di specificare un numero massimo di iterazioni tramite la notazione 'maxiter': 200 vista sopra. Tutti dispongono di un'opzione per specificare un criterio di arresto alternativo basato sui valori della funzione o delle variabili, anche se questi criteri differiscono leggermente da un algoritmo all'altro. COBYLA, ad esempio, permette di specificare una tolleranza (per esempio 'tol': 0.0001) che rappresenta il limite inferiore di una "regione di fiducia". SLSQP, invece, consente di specificare un obiettivo nella precisione della funzione usata nel criterio di arresto ('ftol'). Nelder-Mead permette di specificare una tolleranza sulla differenza tra stime successive dei parametri () (xatol) o una tolleranza sulla differenza tra i valori successivi ottenuti per la funzione di costo (fatol) (o entrambe).
Per un elenco completo degli algoritmi e delle opzioni disponibili, consulta la documentazione di minimize di SciPy.