Ripasso dei metodi di machine learning rilevanti
In questa sezione faremo un ripasso di alcuni termini e metodi chiave del machine learning classico che ci aiuteranno a comprendere meglio i workflow nel quantum machine learning. Introdurremo prima alcuni termini generali, per poi approfondire due tipologie di machine learning: i metodi kernel (in particolare nel contesto di una support vector machine) e le reti neurali. Esistono certamente connessioni tra questi metodi, ma li tratteremo come distinti a causa delle differenze nei workflow quantistici discusse qui e nelle lezioni successive. Questa è solo una panoramica superficiale e salteremo molti dettagli. Per una panoramica più completa del machine learning, consigliamo risorse come [1-3].
Tipi di machine learning​
Come definizione semplice, il machine learning è un insieme di algoritmi che analizzano e traggono inferenze da pattern e relazioni nei dati. In linea di massima, gli algoritmi di machine learning possono essere raggruppati in tre categorie principali a seconda del tipo di dati coinvolti e di come gli algoritmi imparano senza essere esplicitamente programmati:
- Apprendimento supervisionato: Nell'apprendimento supervisionato, i dati usati per addestrare il modello sono etichettati. L'obiettivo di questi algoritmi è imparare la relazione tra i dati e le corrispondenti etichette o output, e generalizzare questa relazione a dati mai visti prima. I compiti comuni in questa categoria sono la classificazione e la regressione.
- Apprendimento non supervisionato: A differenza dell'apprendimento supervisionato, l'apprendimento non supervisionato usa dati non etichettati per addestrare il modello di machine learning. L'obiettivo di questi algoritmi è scoprire pattern nascosti e strutture nei dati. Alcuni algoritmi di questa categoria sono il clustering e gli algoritmi di riduzione della dimensionalità . Anche alcuni modelli generativi come le reti generative avversariali e gli autoencoder variazionali possono rientrare in questa categoria.
- Apprendimento per rinforzo: Gli algoritmi in questa categoria di machine learning sono definiti da un agente che interagisce con un ambiente. L'agente compie azioni e riceve feedback dall'ambiente sotto forma di premi e punizioni. Attraverso questo meccanismo di feedback, l'agente impara a compiere l'insieme di azioni corretto per svolgere un compito specifico.

L'immagine a sinistra mostra due categorie di dati etichettati come nell'apprendimento supervisionato. In questo caso, le categorie sono linearmente separabili. L'immagine a destra mostra cluster di dati. In un compito di apprendimento non supervisionato, questi dati inizialmente non sarebbero etichettati e l'algoritmo studierebbe la distribuzione, cercando forse dei cluster. Per visualizzare i cluster di esempio che l'algoritmo potrebbe identificare, i punti dati sono stati ora etichettati. Una differenza chiave tra i due è che il processo di apprendimento supervisionato inizia con i dati già etichettati, mentre quello non supervisionato inizia con dati non etichettati, anche se i dati vengono etichettati alla fine.
Introdurre il "quantistico" nel machine learning​
Possiamo ora iniziare a esplorare come il "quantistico" viene introdotto nel machine learning. In questa categorizzazione più ampia, consideriamo il tipo di modello/algoritmo sul dispositivo di elaborazione, così come il tipo di dati forniti. L'immagine qui sopra riassume queste possibili combinazioni.

Per esempio, CC significa che abbiamo un dataset classico — come immagini, suoni o testo che possiamo memorizzare su computer classici — e che usiamo anche un computer classico per eseguire un algoritmo di machine learning. Questo è esattamente il contesto del machine learning classico. D'altra parte, QQ significa che stiamo usando un computer quantistico per elaborare dati quantistici. Qui, i "dati quantistici" possono significare diverse cose e possono dipendere dal contesto. I dati quantistici possono essere intesi come un insieme di risultati di misurazioni ottenuti da un dispositivo quantistico, oppure possono riferirsi a stati preparati su un computer quantistico da un altro algoritmo. In futuro, potrebbero persino riferirsi a dati memorizzati in QRAM (Quantum Random Access Memory), che attualmente non esiste. Quando i ricercatori parlano di quantum machine learning, di solito si riferiscono al regime CQ, in cui il dataset è classico e il dispositivo di elaborazione che esegue l'algoritmo di machine learning è un computer quantistico. Nelle parti successive del corso, ci concentreremo su tali algoritmi.
Support vector machine​
Ricapitoliamo ora una classe di algoritmi chiamata support vector machine dal punto di vista del machine learning classico. Successivamente mostreremo come introdurre il quantum computing in questo algoritmo.

Supponiamo di avere un compito di classificazione binaria su un dataset con uno spazio delle feature bidimensionale come mostrato nel grafico. Una cosa che possiamo fare per eseguire la classificazione su questo dataset è trovare una retta, o in generale un iperpiano, che separi le due classi. In pratica possiamo trovare infiniti iperpiani separatori, quindi la domanda è: come definiamo quello ottimale? L'idea è che un confine decisionale particolarmente buono dovrebbe massimizzare il margine, definito come la distanza ai punti più vicini in ciascuna classe. In questo contesto, i punti dati con la distanza minima al confine decisionale sono chiamati vettori di supporto.
Un confine decisionale lineare può essere descritto in diversi modi; in alcuni sensi il modo più diretto è quello mostrato in qui sotto. Qui, è l'insieme dei parametri che definiscono l'iperpiano, è il tuo dataset e è uno spostamento costante. è una mappatura dallo spazio dei punti dati di input, spesso (ma non necessariamente) verso uno spazio di dimensione superiore. Torneremo su questa mappatura più avanti.
Nel modello è il vettore dei parametri regolabili che il modello imparerà . Questa è quella che chiamiamo la "formulazione primale". Con alcune manipolazioni matematiche possiamo mostrare che esiste un secondo modo per formulare lo stesso problema. La chiamiamo la "formulazione duale", rappresentata dall'equazione qui sotto. Per questa formulazione, dobbiamo ottimizzare sui parametri alpha. La differenza principale è che nella formulazione primale l'equazione ha un prodotto interno tra il vettore delle feature e i parametri apprendibili, mentre nella formulazione duale il prodotto interno è tra vettori delle feature. Anche se la forma duale include sia le feature dei dati di addestramento che le etichette corrispondenti, vedremo nella prossima sezione come si riveli più utile della forma primale.
Metodi kernel e il ruolo del quantistico​
Il video qui sotto motiva come il quantistico può svolgere un ruolo nei classificatori lineari. Questo viene descritto in maggiore dettaglio nel testo.
Passare a spazi di dimensione superiore​
In questa e nella seguente sottosezione, la discussione si concentra sulle mappature verso dimensioni superiori. Il punto qui è spiegare il "kernel trick" nel contesto delle mappature tra spazi, e quindi preparare il terreno per capire cos'è un kernel quantistico. Il punto non è che le dimensioni superiori nelle funzioni d'onda quantistiche risolvono tutti i nostri problemi. Come accennato nell'introduzione, le mappe di feature gaussiane classiche sono già infinite-dimensionali. La dimensionalità delle feature dei dati è importante, ma gli stati quantistici ad alta dimensionalità non sono sufficienti per migliorare i metodi classici.
Graficamente, si può facilmente vedere come possiamo generalizzare l'approccio SVM ai casi in cui i dati originali non sono linearmente separabili, data la giusta mappatura verso dimensioni superiori. Guardando i dati bidimensionali a sinistra, possiamo vedere che non esiste un confine decisionale lineare in grado di separare le due classi. Tuttavia, possiamo considerare di aggiungere una terza feature al nostro spazio delle feature. Se questa nuova feature è — per esempio — la distanza dall'origine delle due feature precedenti e , allora i dati diventano linearmente separabili. Ciò significa anche che possiamo ora eseguire con successo l'algoritmo della support vector machine su questo spazio delle feature di dimensione superiore.

Indichiamo questa "mappatura delle feature" con . La mappa delle feature spesso mappa dallo spazio dei dati di input verso una dimensione superiore, come mostrato qui, ma esistono modelli e algoritmi che fanno uso di mappature verso dimensioni inferiori. La mappatura verso dimensioni superiori è semplicemente un caso facile da visualizzare e comprendere.
Alcune mappe di feature possono mappare in spazi di dimensione molto alta. In questi casi, l'alta dimensionalità rende i prodotti interni computazionalmente più costosi. Torneremo su questo punto più avanti.
Perché la forma duale è utile?​
Ricordiamo le formulazioni primale e duale del nostro modello di confine lineare:
Ora che sappiamo che usare una mappa delle feature per arrivare a uno spazio di dimensione superiore ci consente di trovare con successo un iperpiano separatore, possiamo sostituire il vettore delle feature originale nelle equazioni con i vettori mappati dalle feature. Tuttavia, se lo facciamo nella formulazione primale, incontriamo il problema di dover calcolare i prodotti interni tra i parametri e una mappa delle feature potenzialmente molto alta-dimensionale. Nella formulazione duale, invece, vediamo che questi sono sostituiti da prodotti interni tra vettori mappati dalle feature di input diversi.
Per alcune mappe delle feature, potrebbe essere possibile scrivere il prodotto interno di vettori mappati dalle feature come una semplice funzione delle variabili originali (a dimensione inferiore) e . Per alcune scelte di potremmo persino essere in grado di scrivere come una semplice funzione del prodotto interno a bassa dimensione . Questo è computazionalmente molto vantaggioso perché possiamo accedere allo spazio in cui i dati sono linearmente separabili, senza il costo delle manipolazioni nelle dimensioni superiori. Poiché i vettori mappati dalle feature appaiono in solo in prodotti interni, potremmo non aver nemmeno bisogno di eseguire esplicitamente la mappatura delle feature per calcolare i prodotti interni. Chiamiamo la funzione che calcola i prodotti interni la "funzione kernel", e questo modo di evitare il calcolo della mappa delle feature è chiamato il "kernel trick". In effetti, i vettori mappati dalle feature potrebbero essere anche infinite-dimensionali, ma il kernel potrebbe comunque essere calcolato molto efficientemente.
La funzione kernel è una funzione di due vettori di dati di input. Inserendo ogni coppia di vettori dati nel dataset come argomenti della funzione kernel si ottiene una matrice simmetrica e semidefinita positiva, chiamata matrice kernel:
Una volta calcolata la matrice kernel, possiamo trovare i parametri ottimali () usando metodi come software di programmazione quadratica o un algoritmo chiamato "ottimizzazione minimale sequenziale". Naturalmente, questo presuppone che esista un kernel calcolabile efficientemente corrispondente a una mappa delle feature che renda le classi dei dati linearmente separabili. Un approccio correlato ma innovativo è la stima del kernel quantistico.
Kernel quantistici​
I computer quantistici, o gli stati quantistici in generale, consentono una definizione molto naturale di "kernel quantistico". Possiamo interpretare la codifica di un input in uno stato quantistico come una mappa delle feature. Questo processo può effettivamente mappare i dati in uno spazio di dimensione molto alta come è comune nelle mappe delle feature classiche, ma la dimensionalità dipenderà dal metodo di codifica (vedi la lezione sulla codifica dei dati). Ricorda che il prodotto interno di due stati quantistici è correlato alla probabilità di misurare lo stato quando ci si trova nello stato . Possiamo stimare il prodotto interno dei due punti dati mappati e effettuando un numero sufficiente di misurazioni del circuito risultante.

Come vedremo più avanti nel corso, possiamo usare le misurazioni su un circuito quantistico come quello mostrato sopra per stimare un kernel, e poi eseguire l'ottimizzazione SVM classicamente sulla matrice kernel per apprendere i parametri regolabili.
Classificatori quantistici variazionali e reti neurali​
Un altro algoritmo di quantum machine learning near-term è chiamato "circuiti quantistici variazionali" (VQCs). Quando questi circuiti vengono usati in un compito di classificazione, potresti vedere lo stesso acronimo usato per riferirsi a "classificatori quantistici variazionali" (anch'essi VQCs). Questi spesso sfruttano strutture simili alle reti neurali classiche (NN); in quei casi li vedrai descritti come reti neurali quantistiche (QNN). È importante capire che i VQC sono più generali e non devono necessariamente seguire una struttura NN, ma iniziamo per analogia con le NN per chiarire il ruolo che il quantistico può svolgere nei workflow di machine learning esistenti. Discuteremo poi le generalizzazioni. Iniziamo con un ripasso delle reti neurali classiche.
Il video qui sotto fornisce un breve ripasso delle reti neurali e dove si sovrappongono con i circuiti quantistici variazionali. Questo viene approfondito nel testo.
Una rete neurale è un modello computazionale vagamente ispirato alla struttura e alla funzione dei neuroni nel cervello. Questi neuroni, che sono i nodi che vediamo nell'immagine, sono organizzati in strati e connessi attraverso pesi.

Il primo strato è lo strato di input, e le attivazioni dei neuroni in questo strato vengono alimentate direttamente dai dati da analizzare (come l'ombreggiatura dei singoli pixel in un'immagine, per esempio). L'ultimo strato è uno strato di output che descrive la categorizzazione (come classificare un'immagine come avente il 90% di probabilità di essere un cane e il 10% di essere un gatto, per restare con l'esempio dell'immagine).

I neuroni in ogni strato elaborano i segnali che ricevono dallo strato precedente e li trasmettono al successivo attraverso i pesi, (le connessioni nel diagramma). Se ci concentriamo su uno di questi neuroni, abbiamo il blocco fondamentale di una rete neurale, chiamato "percettrone". Matematicamente, un percettrone riceve un vettore di input , e calcola il suo prodotto interno con un vettore di pesi addestrabile più un bias. E molto importante, il percettrone applica una funzione di attivazione non lineare () sopra questo calcolo. Queste funzioni di attivazione non lineari sono fondamentali per la grande capacità espressiva delle reti neurali. Un altro modo di pensarci è che, se non avessimo non-linearità tra gli strati, potremmo in linea di principio scrivere l'intera rete neurale come una grande moltiplicazione di matrici. Questo risulterebbe semplicemente in un modello lineare, che non sarebbe in grado di catturare i pattern complessi che le reti neurali profonde possono. Pertanto, le funzioni di attivazione non lineari sono fondamentali nelle reti neurali.

Funzioni come
vengono calcolate in ogni neurone usando i dati noti e la non lineare, oltre ai vettori sconosciuti di pesi e bias . In generale, potrebbe esserci pesi non nulli tra tutti i neuroni di tutti gli strati, e chiameremmo i pesi dallo strato allo strato tra i neuroni e . Allo stesso modo, il bias sul neurone dello strato sarebbe I bias qui non sono correlati alle della discussione sul kernel quantistico.
Potresti iniziare la tua rete neurale con un insieme casuale di pesi e bias, o da una configurazione iniziale nota e ragionevole. Da lì, l'idea è di verificare quanto bene la tua rete neurale classifica le cose e migliorarla. Usiamo una funzione di costo per descrivere quanto la nostra rete neurale si discosta dalla classificazione corretta. Esistono molti modi per definire una funzione di costo. Descriveremo qui un esempio comune, che coinvolge l'errore quadratico medio (MSE):
A seconda della tua applicazione, questo potrebbe significare prendere la differenza tra il valore reale di un'immagine dai dati di addestramento per l'output (ad esempio, un valore di 1.0 sul neurone dello strato di output per "cane" e 0 su tutti gli altri neuroni) e il valore previsto . Si eleva al quadrato questa differenza e si somma su tutte le categorie, in modo da catturare non solo se la categoria giusta è stata maggiormente attivata, ma anche se le attivazioni errate sono ridotte. Poi si somma su tutti gli esempi nel set di addestramento e si ottiene un costo.
Poi si variano i parametri come i pesi in ogni strato, tra tutti i neuroni, e i bias su tutti i neuroni. Si usano routine di ottimizzazione classica come la discesa del gradiente per cercare un minimo locale nella funzione di costo.
Percettrone quantistico​
Per poter costruire la controparte quantistica del percettrone, una delle cose che dobbiamo considerare è la capacità di implementare la non-linearità con i circuiti quantistici, che è il ruolo della funzione di attivazione nelle reti neurali classiche. Questo perché senza considerazioni aggiuntive, i circuiti quantistici implementano solo operazioni unitarie, che sono semplicemente lineari. Esistono diversi metodi che possiamo usare per introdurre la non-linearità nei circuiti quantistici. Uno dei metodi principali è usare le misurazioni come fonte di non-linearità . Altre considerazioni includono metodi basati sulla trasformata di Fourier quantistica, misurazioni a metà circuito o circuiti dinamici, e la traccia di qubit fuori dal circuito.
Rete neurale quantistica​
Una rete neurale quantistica (QNN) funziona codificando prima i dati di input con lo strato unitario nella figura, poi applicando circuiti quantistici corrispondenti ai pesi tra gli strati ( qui sotto), e infine uno strato di misurazioni. Alcuni punti chiave su questo:
- Il caricamento dei dati e i pesi sono operazioni lineari.
- Le misurazioni sono non lineari.
- Quindi, come nella NN classica, abbiamo sia componenti lineari che non lineari.
- I circuiti dei pesi hanno ancora parametri variazionali, quindi c'è ancora una minimizzazione classica da effettuare.

Possiamo usare un circuito come quello sopra per calcolare una funzione Nota che questa funzione non è in generale la stessa della funzione descritta nelle NN classiche. In particolare, questa funzione include potenzialmente molti strati di molti pesi, e viene applicata a tutti i dati caricati nel tuo circuito quantistico da .
Generalizzazioni​
Possiamo ora esaminare uno dei modi di costruire la controparte quantistica di una rete neurale. In questo modello, il flusso delle informazioni è diverso da una rete neurale classica feed-forward. Nel contesto classico, le informazioni scorrerebbero da sinistra a destra, partendo dall'input e terminando con l'output del modello, e nella direzione inversa durante la backpropagation per addestrare il modello.

Tuttavia, in questa costruzione di rete neurale quantistica, vediamo che il blocco unitario che codifica i dati si ripete tra i blocchi unitari variazionali con i parametri addestrabili. Questa strategia, che chiamiamo "data reuploading", è supportata da interessanti risultati teorici. In effetti, un articolo di Pérez-Salinas et al. mostra che, con l'aiuto di molteplici data reuploading, "un singolo Qubit fornisce capacità computazionali sufficienti per costruire un classificatore quantistico universale quando assistito da una subroutine classica." Pertanto, il data reuploading è una tecnica che possiamo usare per migliorare l'espressività e il potere rappresentativo del modello, consentendo alla rete neurale quantistica di approssimare funzioni complesse.
Riferimenti​
[1] "Reinforcement Learning: An Introduction", Richard S. Sutton e Richard G. Barto, MIT Press, Seconda Edizione, Cambridge, MA, 2018
[2] "Pattern Recognition and Machine Learning", Christopher M. Bishop, Springer, 2006
[3] "Foundations of Machine Learning", Mehryar Mohri, Afshin Rostamizadeh e Ameet Talwalkar, MIT Press, Seconda Edizione, 2018.