TensorFlow Quantum-Design

TensorFlow Quantum (TFQ) wurde für die Probleme des quantenmechanischen Lernens der NISQ-Ära entwickelt. Es bringt Quantencomputing-Primitive – wie den Bau von Quantenschaltungen – in das TensorFlow-Ökosystem. Modelle und Operationen, die mit TensorFlow erstellt wurden, verwenden diese Primitive, um leistungsstarke quantenklassische Hybridsysteme zu erstellen.

Mit TFQ können Forscher einen TensorFlow-Graphen mit einem Quantendatensatz, einem Quantenmodell und klassischen Kontrollparametern erstellen. Diese werden alle als Tensoren in einem einzigen Rechengraphen dargestellt. Das Ergebnis von Quantenmessungen, die zu klassischen probabilistischen Ereignissen führen, wird von TensorFlow-Operationen erhalten. Das Training wird mit dem Standard getan Keras API. Das tfq.datasets Modul ermöglicht es den Forschern mit neuen und interessanten Quanten Datensätze zu experimentieren.

Cirq

Cirq ist ein Quanten Programmierung Rahmen von Google. Es bietet alle grundlegenden Operationen – wie Qubits, Gatter, Schaltungen und Messungen – zum Erstellen, Ändern und Aufrufen von Quantenschaltungen auf einem Quantencomputer oder einem simulierten Quantencomputer. TensorFlow Quantum verwendet diese Cirq-Primitive, um TensorFlow für Stapelberechnungen, Modellerstellung und Gradientenberechnungen zu erweitern. Um mit TensorFlow Quantum effektiv zu sein, ist es eine gute Idee, mit Cirq effektiv zu sein.

TensorFlow Quantum-Primitive

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

  • Quantum - Schaltung: Dies stellt Cirq -defined Quantenschaltungen ( cirq.Circuit ) innerhalb TensorFlow. Erstellen Sie Stapel von Schaltkreisen unterschiedlicher Größe, ähnlich wie Stapel von verschiedenen reellwertigen Datenpunkten.
  • Pauli Summe: für lineare Kombinationen von Tensorprodukte von Pauli Operatoren definiert in Cirq ( cirq.PauliSum ). Erstellen Sie wie Schaltkreise Gruppen von Operatoren unterschiedlicher Größe.

Grundlegende Operationen

Unter Verwendung der Quantenschaltung Primitiven innerhalb einer tf.Tensor , TensorFlow Quantum Arbeitsgeräte ops , die diese Schaltungen und erzeugen aussagekräftige Ausgangssignale verarbeiten.

Die TensorFlow-Operationen sind in optimiertem C++ geschrieben. Diese Operationen tasten von Schaltkreisen ab, berechnen Erwartungswerte und geben den von den gegebenen Schaltkreisen erzeugten Zustand aus. Das Schreiben von flexiblen und performanten Ops birgt einige Herausforderungen:

  1. Schaltungen haben nicht die gleiche Größe. Für simulierte Schaltungen, Sie sind nicht in der Lage statische Operationen zu erstellen (wie tf.matmul oder tf.add ) und dann verschiedene Nummern für Schaltkreise unterschiedlicher Größe zu 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 eine völlig 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 an der ursprünglichen Schaltung dargestellt wird. Da zur Laufzeit neue Datenpunkte ein- und ausgelagert werden, kann der TensorFlow-Berechnungsgraph nach seiner Erstellung nicht mehr geändert werden, sodass diese unterschiedlichen Strukturen unterstützt werden müssen.
  3. cirq.Circuits sind ähnliche Graphen zu berechnen, dass sie eine Reihe von Operationen-und einige könnten enthalten Symbole / Platzhalter sind. Es ist wichtig, dies so kompatibel mit TensorFlow wie möglich zu machen.

Aus Leistungsgründen ist Eigen (die in vielen TensorFlow-Operationen verwendete C++-Bibliothek) nicht gut für die Simulation von Quantenschaltungen geeignet. Stattdessen wird die Schaltungssimulatoren in dem verwendeten jenseits klassischem Quantenexperiment als Verifizierer verwendet werden und als Grundlage für TFQ ops erweitert (alle mit AVX2 und SSE - Befehlen geschrieben). Es wurden Ops mit identischen funktionalen Signaturen erstellt, die einen physischen Quantencomputer verwenden. Das Umschalten zwischen einem simulierten und einem physikalischen Quantencomputer ist so einfach wie das Ändern einer einzigen Codezeile. Diese ops befinden sich in der circuit_execution_ops.py .

Schichten

TensorFlow Quantenschichten zu Probenahme, Erwartung und Zustandsberechnung zu Entwicklern , die unter Verwendung von tf.keras.layers.Layer Schnittstelle. Es ist praktisch, eine Schaltungsebene für klassische Steuerparameter oder für Ausleseoperationen zu erstellen. Darüber hinaus können Sie einen Layer mit einem hohen Grad an Komplexität erstellen, der Batch-Schaltungen, Batch-Steuerungsparameterwerte unterstützt und Batch-Ausleseoperationen durchführt. Siehe tfq.layers.Sample für ein Beispiel.

Unterscheidungsmerkmale

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

Um dieses Problem zu lösen, das tfq.differentiators bietet Modul mehrere Standarddifferenzierungstechniken. Benutzer können auch ihre eigene Methode zur Berechnung von Gradienten definieren – sowohl in der „realen Welt“-Einstellung der stichprobenbasierten Erwartungsberechnung als auch in der analytisch exakten Welt. Methoden wie finite Differenz sind oft die schnellsten (Wanduhrzeit) in einer analytischen/exakten Umgebung. Während langsamer (Wanduhr - Zeit), praktische Methoden wie Parameterverschiebung oder stochastische Methoden sind oft wirksamer. A tfq.differentiators.Differentiator instanziiert und an einen vorhandenen op mit generate_differentiable_op oder an den Konstruktor geleitet tfq.layers.Expectation oder tfq.layers.SampledExpectation . Um ein benutzerdefiniertes Unterscheidungsmerkmal zu implementieren, von dem erben tfq.differentiators.Differentiator Klasse. So definieren einen Gradienten Betrieb zum Abtasten oder Zustandsvektorberechnung, Benutzung tf.custom_gradient .

Datensätze

Mit dem Wachstum des Quantencomputing-Bereichs werden mehr Quantendaten- und Modellkombinationen entstehen, was einen strukturierten Vergleich erschwert. Das tfq.datasets Modul wird als Datenquelle für die Quantenmaschinenlernaufgaben verwendet. Es sorgt für strukturierte Vergleiche von Modell und Leistung.

Es ist zu hoffen , dass mit großem Gemeinschaftsbeitrag, die tfq.datasets wird Modul wachsen Forschung zu ermöglichen, transparenter und reproduzierbar ist. Quantenkontrolle, fermionischen Simulation, Klassifizierung in der Nähe von Phasenübergängen, Quantenmessung, usw. sind alle großen Kandidaten für die Zugabe zu: in sorgfältig Problemen kuratiert tfq.datasets . Ein neues Datum - Set eröffnet ein vorzuschlagen GitHub Problem .