Mi sono laureato in Ingegneria Informatica nel 2001 alla Sapienza. In quegli anni ai computer quantistici venivano dedicati giusto pochi cenni nel corso di informatica teorica. Erano considerati un po’ come una chimera, un prodigio in grado di rendere trattabili problemi altrimenti intrattabili. Più simili ad una speculazione filosofica che ad un prodotto della tecnica. Così sono rimasti per me per molti anni, mentre mi interessavo a tematiche diverse legate al mondo dei dati e del valore delle informazioni.
Fra il 2016 e il 2018 il tema della disponibilità di processori quantistici comincia a rimbalzare fra la stampa specialistica e quella generalista; vengono anche resi disponibili in cloud i primi servizi di calcolo quantistico ad uso di enti di ricerca o semplici curiosi. Solo nei primi giorni del 2019, con l’annuncio di IBM al CES del primo computer quantistico universale per uso commerciale (IBM System Q One), mi rendo veramente conto che si tratta di una innovazione che avrà un impatto dirompente già sulla mia generazione (e che non riuscirò ad andare in pensione senza esserne coinvolto).
Nell’estate del 2019, complice il tempo libero della pausa estiva, comincio a studiare i primi rudimenti di computazione quantistica nella splendida cornice del mare di Mallorca. Mi procuro la versione per Kindle di un testo introduttivo (Quantum Computing for Everyone di Chris Bernhardt pubblicato dalla MIT Press) la cui chiarezza e semplicità della trattazione mi aiutano indubbiamente ad appassionarmi alla materia. Le reminiscenze dei corsi universitari di algebra e qualche supporto di Wikipedia & co. mi consentono di andare spedito fra Bell, Deutsch–Jozsa e Grover.
Il primo testo aveva alimentato la curiosità e l’urgenza di mettere in pratica l’elegante impostazione teorica dell’interpretazione di Copenaghen. Così il secondo testo (sempre divorato durante le ferie) lo scelgo con un taglio più vicino alla mia anima da sviluppatore: Programming Quantum Computers – Essential Algorithms and Code Samples della O’Reilly. Il libro cavalca il modello di un’architettura di calcolo tradizionale dotata di un’unità di calcolo quantistico (QPU), in analogia a quanto viene fatto con le GPU (co-processore grafico) per accelerare le prestazioni grafiche di PC e smartphone. In questo scenario la QPU abilita un modello di computazione ibrida in cui alcune parti dell’algoritmo sono eseguite con un modello classico e altre sfruttando le potenzialità del calcolo quantistico. Oggi un processore quantistico richiede strutture grandi come una stanza per funzionare, ma il modello di computazione ibrida può essere adattato sostituendo la QPU con servizi di computazione quantistica disponibili in cloud.
Tornato dalle ferie, nei ritagli di tempo libero, comincio a studiare il linguaggio ideato da Microsoft specificamente per la programmazione quantistica (Q#) e affianco alla scrittura di codice la simulazione matematica degli stessi algoritmi con Octave e Maxima (versioni open-source alternative a tool come Matlab e Mathematica) per mantenere il parallelismo fra la componente teorica e lo sviluppo di codice che ha caratterizzato le letture estive.
Comincio anche a leggere articoli scientifici reperibili principalmente in forma integrale su arXiv e a fruire di alcuni corsi su piattaforme MOOC come EDX e Coursera, fra cui il corso di Introduction to Quantum Computing organizzato dalla Saint Petersburg State University. In questo periodo l’attenzione è rivolta a colmare il gap fra i fondamenti della computazione quantistica e le applicazioni a problemi del mondo reale. Ad oggi i tre filoni più evidenti di applicazione sono legati allo studio della materia (quindi con applicazioni dirette al campo della chimica e della scienza dei materiali), ai problemi di ottimizzazione e al machine learning. Il background di competenze acquisite negli anni precedenti mi ha naturalmente spinto verso quest’ultimo ambito di applicazione.
Indirizzato da diversi articoli scientifici sul tema fra cui Circuit-centric quantum classifiers, Practical optimization for hybrid quantum-classical algorithms e Hierarchical quantum classifiers, ho selezionato il terzo libro (sempre da consumare nella pausa estiva) che mi sento di consigliare: Supervised Learning with Quantum Computers di Maria Schuld e altri pubblicato da Springer. Gli articoli citati e alcuni capitoli del libro descrivono diversi approcci per realizzare dei classificatori (modelli di classificazione automatica addestrati attraverso degli esempi) ottenuti combinando algoritmi di tipo classico come la discesa del gradiente con il calcolo di modelli predittivi e derivate parziali eseguito con circuiti quantistici.
A questo punto l’attenzione torna sulla componente sperimentale del percorso, così realizzo la mia versione di un Variational Quantum Classifier implementato in Python sfruttando tre “motori” di calcolo interscambiabili: un simulatore numerico basato su routine di algebra lineare, uno basato sul linguaggio Q# di Microsoft e uno su QISKIT, il SDK curato da IBM per accedere ai servizi di Quantum Computing in Cloud. Il progetto ha il duplice scopo di:
- Provare sul campo (intendo su dati reali) un modello di machine learning realizzato con circuiti quantistici (utilizzando uno specifico unitary gate diverso da quelli proposti in letteratura, che riduce complessità e effort computazionale)
- Consentire il confronto in termini di accuratezza e prestazioni fra diversi modelli di simulazione numerica e servizi basati su implementazioni fisiche di processori quantistici (come quelli resi di disponibili da IBM e Microsoft)
Per chi fosse interessato, ho pubblicato il codice sorgente su GitHub: caccio/CrossQuantumClassifier.