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
Questa funzione minimize ha diversi argomenti, ma quelli più rilevanti per la chimica quantistica sono:
- La funzione di costo (
cost_func). È collegata all'Hamiltoniano, ma include anche alcune complessità , come la determinazione del valore atteso tramite Estimator e, nel caso di calcoli degli stati eccitati, potrebbe includere condizioni di ortogonalità . - Uno stato iniziale (x0) per il sistema, spesso lo stato di Hartree-Fock
- Altri argomenti, inclusi gli argomenti della funzione di costo stessa
- Il metodo impostato sull'ottimizzatore classico selezionato
- Le opzioni per l'ottimizzatore classico (da non confondere con le opzioni di Session discusse nella sezione successiva)
Di seguito è mostrato del codice di esempio. Limitiamo la nostra discussione qui agli ultimi due argomenti.
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.