Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

TensorFlow Quantum Design

TensorFlow Quantum (TFQ) wurde für die Probleme des quantenmaschinellen Lernens in der NISQ-Ära entwickelt. Es bringt Quantencomputer-Grundelemente - wie das Bauen von Quantenschaltungen - in das TensorFlow-Ökosystem. Mit TensorFlow erstellte Modelle und Operationen verwenden diese Grundelemente, um leistungsstarke quantenklassische Hybridsysteme zu erstellen.

Mithilfe von TFQ können Forscher einen TensorFlow-Graphen unter Verwendung eines Quantendatensatzes, eines Quantenmodells und klassischer Steuerparameter erstellen. Diese werden alle als Tensoren in einem einzigen Berechnungsgraphen dargestellt. Das Ergebnis von Quantenmessungen, die zu klassischen probabilistischen Ereignissen führen, wird von TensorFlow ops erhalten. Das Training wird mit der Standard- Keras- API durchgeführt. Mit tfq.datasets Modul tfq.datasets können Forscher mit neuen und interessanten Quantendatensätzen experimentieren.

Cirq

Cirq ist ein Quantenprogrammierungsframework von Google. Es bietet alle grundlegenden Operationen - wie Qubits, Gates, Schaltungen und Messungen - zum Erstellen, Modifizieren und Aufrufen von Quantenschaltungen auf einem Quantencomputer oder einem simulierten Quantencomputer. TensorFlow Quantum verwendet diese Cirq-Grundelemente, um TensorFlow für die Stapelberechnung, Modellbildung und Gradientenberechnung zu erweitern. Um mit TensorFlow Quantum effektiv zu sein, ist es eine gute Idee, mit Cirq effektiv zu sein.

TensorFlow Quantenprimitive

TensorFlow Quantum implementiert die Komponenten, die zur Integration von TensorFlow in Quantencomputerhardware erforderlich sind. Zu diesem Zweck führt TFQ zwei Datentyp-Grundelemente ein:

  • Quantenschaltung : Dies repräsentiert Cirq- definierte Quantenschaltungen ( cirq.Circuit ) innerhalb von TensorFlow. Erstellen Sie Stapel von Schaltkreisen unterschiedlicher Größe, ähnlich wie Stapel von Datenpunkten mit unterschiedlichen realen Werten.
  • Pauli-Summe : Repräsentiert lineare Kombinationen von Tensorprodukten von Pauli-Operatoren, die in Cirq ( cirq.PauliSum ) definiert sind. Erstellen Sie wie Schaltkreise Stapel von Operatoren unterschiedlicher Größe.

Grundlegende Operationen

Unter Verwendung der Quantenschaltungsprimitive innerhalb eines tf.Tensor implementiert TensorFlow Quantum tf.Tensor , die diese Schaltungen verarbeiten und aussagekräftige Ausgaben erzeugen.

Die TensorFlow-Operationen sind in optimiertem C ++ geschrieben. Diese Operationen werden aus Schaltkreisen abgetastet, Erwartungswerte berechnet und der von den angegebenen Schaltkreisen erzeugte Zustand ausgegeben. Das Schreiben von Operationen, die flexibel und performant sind, hat einige Herausforderungen:

  1. Schaltungen sind nicht gleich groß. Bei simulierten Schaltkreisen können Sie keine statischen Operationen (wie tf.matmul oder tf.add ) tf.add und dann Schaltkreise unterschiedlicher Größe durch unterschiedliche Nummern ersetzen. Diese Operationen müssen dynamische Größen berücksichtigen, die das TensorFlow-Berechnungsdiagramm mit statischer Größe nicht zulässt.
  2. Quantendaten können insgesamt eine andere Schaltungsstruktur induzieren. Dies ist ein weiterer Grund, dynamische Größen in den TFQ-Operationen zu unterstützen. Quantendaten können eine strukturelle Änderung des zugrunde liegenden Quantenzustands darstellen, die durch Modifikationen der ursprünglichen Schaltung dargestellt wird. Da neue Datenpunkte zur Laufzeit ein- und ausgelagert werden, kann das TensorFlow-Berechnungsdiagramm nach seiner Erstellung nicht mehr geändert werden. Daher ist die Unterstützung dieser unterschiedlichen Strukturen erforderlich.
  3. cirq.Circuits ähneln Berechnungsgraphen, da es sich um eine Reihe von Operationen handelt - und einige enthalten möglicherweise Symbole / Platzhalter. Es ist wichtig, dies so kompatibel wie möglich mit TensorFlow zu machen.

Aus Leistungsgründen ist Eigen (die in vielen TensorFlow-Operationen verwendete C ++ - Bibliothek) für die Quantenschaltungssimulation nicht gut geeignet. Stattdessen werden die im Quantenüberlegenheitsexperiment verwendeten Schaltungssimulatoren als Verifizierer verwendet und als Grundlage für TFQ-Operationen erweitert (alle mit AVX2- und SSE-Anweisungen geschrieben). Es wurden Operationen mit identischen funktionalen Signaturen erstellt, die einen physischen Quantencomputer verwenden. Das Umschalten zwischen einem simulierten und einem physischen Quantencomputer ist so einfach wie das Ändern einer einzelnen Codezeile. Diese Operationen befinden sich in der circuit_execution_ops.py .

Schichten

TensorFlow Quantum-Layer stellen Entwicklern mithilfe der Schnittstelle tf.keras.layers.Layer Stichproben, Erwartungen und Zustandsberechnungen zur Verfügung. Es ist praktisch, eine Schaltungsschicht für klassische Steuerparameter oder für Auslesevorgänge zu erstellen. Darüber hinaus können Sie eine Ebene mit einem hohen Grad an Komplexität erstellen, die die Chargenschaltung unterstützt, den Parameterwert der Chargensteuerung unterstützt und Chargenauslesevorgänge ausführt. Ein Beispiel finden Sie unter tfq.layers.Sample .

Unterscheidungsmerkmale

Im Gegensatz zu vielen TensorFlow-Operationen haben Observablen in Quantenschaltungen keine Formeln für Gradienten, die relativ einfach zu berechnen sind. Dies liegt daran, dass ein klassischer Computer nur Abtastwerte von den Schaltungen lesen kann, die auf einem Quantencomputer ausgeführt werden.

Um dieses Problem zu lösen, tfq.differentiators Modul tfq.differentiators verschiedene Standarddifferenzierungstechniken. Benutzer können auch ihre eigene Methode zur Berechnung von Gradienten definieren - sowohl in der Einstellung „reale Welt“ der stichprobenbasierten Erwartungsberechnung als auch in der analytischen exakten Welt. Methoden wie die endliche Differenz sind in einer analytischen / exakten Umgebung häufig die schnellsten (Wanduhrzeit). Während langsamer (Wanduhrzeit), sind praktischere Methoden wie Parameterverschiebung oder stochastische Methoden oft effektiver. Ein tfq.differentiators.Differentiator wird instanziiert und mit generate_differentiable_op an eine vorhandene tfq.differentiators.Differentiator angehängt oder an den Konstruktor von tfq.layers.Expectation oder tfq.layers.SampledExpectation . Um ein benutzerdefiniertes Unterscheidungsmerkmal zu implementieren, erben Sie von der Klasse tfq.differentiators.Differentiator . Verwenden Sie tf.custom_gradient um eine Gradientenoperation für die Abtastung oder Zustandsvektorberechnung zu definieren.

Datensätze

Mit zunehmendem Bereich des Quantencomputers werden mehr Quantendaten und Modellkombinationen entstehen, was den strukturierten Vergleich erschwert. Das Modul tfq.datasets wird als Datenquelle für Aufgaben des quantenmaschinellen Lernens verwendet. Es gewährleistet strukturierte Vergleiche für Modell und Leistung.

Es ist zu hoffen, dass mit großen Community-Beiträgen das Modul tfq.datasets wächst, um Forschung zu ermöglichen, die transparenter und reproduzierbarer ist. Sorgfältig kuratierte Probleme in folgenden tfq.datasets : Quantenkontrolle, fermionische Simulation, Klassifizierung in der Nähe von Phasenübergängen, Quantenerfassung usw. sind hervorragende Kandidaten für die Ergänzung von tfq.datasets . Um einen neuen Datensatz vorzuschlagen, öffnen Sie ein GitHub-Problem .