Design TensorFlow Quantum

TensorFlow Quantum (TFQ) è progettato per i problemi dell'apprendimento automatico quantistico dell'era NISQ. Porta le primitive di calcolo quantistico, come la costruzione di circuiti quantistici, nell'ecosistema TensorFlow. I modelli e le operazioni realizzati con TensorFlow utilizzano queste primitive per creare potenti sistemi ibridi quantistici-classici.

Utilizzando TFQ, i ricercatori possono costruire un grafico TensorFlow utilizzando un set di dati quantistico, un modello quantistico e parametri di controllo classici. Questi sono tutti rappresentati come tensori in un unico grafo computazionale. Il risultato delle misurazioni quantistiche, che portano agli eventi probabilistici classici, è ottenuto da TensorFlow ops. La formazione viene eseguita con l'API Keras standard. Il modulo tfq.datasets consente ai ricercatori di sperimentare nuovi e interessanti set di dati quantistici.

Circo

Circq è un framework di programmazione quantistica di Google. Fornisce tutte le operazioni di base, come qubit, porte, circuiti e misurazioni, per creare, modificare e richiamare circuiti quantistici su un computer quantistico o un computer quantistico simulato. TensorFlow Quantum utilizza queste primitive Cirq per estendere TensorFlow per il calcolo batch, la costruzione di modelli e il calcolo del gradiente. Per essere efficaci con TensorFlow Quantum, è una buona idea essere efficaci con Cirq.

TensorFlow Primitive quantistiche

TensorFlow Quantum implementa i componenti necessari per integrare TensorFlow con l'hardware di calcolo quantistico. A tal fine, TFQ introduce due primitive di tipo di dati:

  • Circuito quantistico : rappresenta i circuiti quantistici definiti da Cirq ( cirq.Circuit ) all'interno di TensorFlow. Crea lotti di circuiti di dimensioni variabili, simili a lotti di diversi datapoint con valori reali.
  • Somma di Pauli : Rappresenta combinazioni lineari di prodotti tensorali di operatori di Pauli definiti in Cirq ( cirq.PauliSum ). Come i circuiti, crea batch di operatori di dimensioni variabili.

Operazioni fondamentali

Utilizzando le primitive del circuito quantistico all'interno di un tf.Tensor , TensorFlow Quantum implementa operazioni che elaborano questi circuiti e producono output significativi.

Le operazioni TensorFlow sono scritte in C++ ottimizzato. Queste operazioni campionano dai circuiti, calcolano i valori di aspettativa e generano lo stato prodotto dai circuiti dati. Scrivere operazioni flessibili e performanti presenta alcune sfide:

  1. I circuiti non hanno le stesse dimensioni. Per i circuiti simulati, non è possibile creare operazioni statiche (come tf.matmul o tf.add ) e quindi sostituire numeri diversi per circuiti di dimensioni diverse. Queste operazioni devono consentire dimensioni dinamiche non consentite dal grafico di calcolo TensorFlow con dimensioni statiche.
  2. I dati quantistici possono indurre una struttura del circuito completamente diversa. Questo è un altro motivo per supportare le dimensioni dinamiche nelle operazioni TFQ. I dati quantistici possono rappresentare un cambiamento strutturale nello stato quantistico sottostante rappresentato da modifiche al circuito originale. Poiché i nuovi punti dati vengono scambiati in entrata e in uscita in fase di esecuzione, il grafico di calcolo TensorFlow non può essere modificato dopo la creazione, quindi è necessario il supporto per queste strutture variabili.
  3. cirq.Circuits sono simili ai grafici di calcolo in quanto sono una serie di operazioni e alcuni potrebbero contenere simboli/segnaposto. È importante renderlo il più compatibile possibile con TensorFlow.

Per motivi di prestazioni, Eigen (la libreria C++ utilizzata in molte operazioni TensorFlow) non è adatta per la simulazione di circuiti quantistici. Invece, i simulatori di circuito utilizzati nell'esperimento quantistico oltre il classico sono usati come verificatori ed estesi come base delle operazioni TFQ (tutte scritte con istruzioni AVX2 e SSE). Sono state create operazioni con firme funzionali identiche che utilizzano un computer quantistico fisico. Passare da un computer quantistico simulato a uno fisico è facile come cambiare una singola riga di codice. Queste operazioni si trovano in circuit_execution_ops.py .

Strati

I livelli TensorFlow Quantum espongono il campionamento, le aspettative e il calcolo dello stato agli sviluppatori che utilizzano l'interfaccia tf.keras.layers.Layer . È conveniente creare uno strato di circuito per i parametri di controllo classici o per le operazioni di lettura. Inoltre, è possibile creare un livello con un elevato grado di complessità che supporta il circuito batch, il valore del parametro di controllo batch ed eseguire operazioni di lettura batch. Vedi tfq.layers.Sample per un esempio.

Differenziatori

A differenza di molte operazioni di TensorFlow, le osservabili nei circuiti quantistici non hanno formule per i gradienti che sono relativamente facili da calcolare. Questo perché un computer classico può leggere solo campioni dai circuiti che vengono eseguiti su un computer quantistico.

Per risolvere questo problema, il modulo tfq.differentiators fornisce diverse tecniche di differenziazione standard. Gli utenti possono anche definire il proprio metodo per calcolare i gradienti, sia nell'impostazione del "mondo reale" del calcolo delle aspettative basato su campioni, sia nel mondo esatto analitico. Metodi come la differenza finita sono spesso i più veloci (orologio da parete) in un ambiente analitico/esatto. Sebbene siano più lenti (tempo dell'orologio a muro), metodi più pratici come lo spostamento dei parametri o metodi stocastici sono spesso più efficaci. Un tfq.differentiators.Differentiator viene istanziato e collegato a un op esistente con generate_differentiable_op o passato al costruttore di tfq.layers.Expectation o tfq.layers.SampledExpectation . Per implementare un differenziatore personalizzato, eredita dalla classe tfq.differentiators.Differentiator . Per definire un'operazione di gradiente per il campionamento o il calcolo del vettore di stato, utilizzare tf.custom_gradient .

Set di dati

Man mano che il campo dell'informatica quantistica cresce, sorgeranno più dati quantistici e combinazioni di modelli, rendendo più difficile il confronto strutturato. Il modulo tfq.datasets viene utilizzato come origine dati per le attività di apprendimento automatico quantistico. Garantisce confronti strutturati per il modello e le prestazioni.

Si spera che con ampi contributi della comunità, il modulo tfq.datasets cresca per consentire una ricerca più trasparente e riproducibile. Problemi accuratamente curati in: controllo quantistico, simulazione fermionica, classificazione vicino alle transizioni di fase, rilevamento quantistico, ecc. sono tutti ottimi candidati per l'aggiunta a tfq.datasets . Per proporre un nuovo set di dati, apri un problema su GitHub .