{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "0de576a4-9a1a-46e9-8d6b-e2c5178d6051",
      "metadata": {
        "gloss": {
          "computational-basis-state": {
            "text": "Also known as Z-basis states, these are the states we measure when we measure in the Z (or 'computational') basis. These are the states with labels like |00〉 and |00110100〉. IBM&reg; quantum computers always measure in the Z-basis.",
            "title": "computational basis state"
          },
          "features": {
            "text": "A feature is a property of the things we're trying to learn about that we can assign a number to. If we were learning something about cats, the features might be \"height\" or \"age\" or \"propensity to consume treats\".",
            "title": "features"
          },
          "unitary": {
            "text": "A unitary operation is a reversible operation that preserves the norm (that is, makes sure our probabilities always sum to 1). [Read more](https://en.wikipedia.org/wiki/Unitary_matrix).",
            "title": "unitary"
          }
        }
      },
      "source": [
        "---\n",
        "title: \"Einführung\"\n",
        "description: \"Eine Einführung in das Quanten-Maschinelle Lernen, die Erwartungen formuliert, die Kursstruktur beschreibt und ein erstes Beispiel gibt.\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore webkitallowfullscreen allowfullscreen quantumly Ewin Yunchao Srinivasan Arunachalam Kristan */}\n",
        "\n",
        "<span id=\"introduction-to-quantum-machine-learning\" />\n",
        "\n",
        "# Einführung in die Quanten- Machine Learning\n",
        "\n",
        "<span id=\"overview-and-motivation\" />\n",
        "\n",
        "## Überblick und Motivation\n",
        "\n",
        "Willkommen beim maschinellen Quantenlernen!\n",
        "\n",
        "Das nachstehende Video gibt eine kurze Einführung, die durch den unten stehenden Text ergänzt wird.\n",
        "\n",
        "<IBMVideo id=\"134355930\" title=\"In diesem Video gibt Chris Porter einen Überblick über die Unterraum-Quantendiagonalisierung. Er beschreibt, welche Faktoren ihre Effizienz und Nützlichkeit beeinflussen. Er erklärt, warum es schneller ist als andere Ansätze. Der folgende Text enthält weitere Einzelheiten.\" />\n",
        "\n",
        "Um das Video kurz zusammenzufassen und zu ergänzen:\n",
        "\n",
        "* Wir haben gesehen, wie ein Problem zum ersten Mal auf einem Quantencomputer gelöst wurde, und dann hat man später einen Weg gefunden, es auf einem klassischen Supercomputer zu lösen. Dieser Zyklus, in dem sich die klassische und die Quanteninformatik gegenseitig an ihre Grenzen treiben, wird wahrscheinlich noch einige Jahre andauern.\n",
        "* Es gibt spezifische Probleme, bei denen die Quanteninformatik einen nachweisbaren Vorteil gegenüber der klassischen Informatik hat, wenn Fortschritte in Bereichen wie der Reduzierung von Fehlern und der Anzahl der verfügbaren Qubits erzielt werden. Aber dies ist immer noch eine Zeit der Erkundung, der Suche nach quantenverfügbaren Datensätzen und nützlichen Quantenmerkmalskarten.\n",
        "* Das maschinelle Lernen mit Quanten (Quantum Machine Learning, QML) ist einer der vielen spannenden Bereiche, in denen die Quanteninformatik die bestehenden klassischen Arbeitsabläufe erweitern oder ergänzen kann.\n",
        "\n",
        "Beim maschinellen Lernen (ML) werden Algorithmen auf Datensätze angewandt, so dass es plausibel ist, dass QML die Quantenmechanik entweder auf der Daten- oder der algorithmischen Seite oder auf beiden Seiten einbezieht. Alle diese Möglichkeiten sind potenziell interessant. Wir werden uns jedoch hauptsächlich auf die Diskussion von Quantenalgorithmen beschränken, die auf klassische Daten angewendet werden. Ein Grund dafür ist, dass ML-Probleme mit klassischen Daten bereits so gut untersucht und weithin verfügbar sind. Es besteht ein breites Interesse an der Lösung von Problemen, die mit klassischen Daten beginnen. Ein weiterer Grund ist das Fehlen von QRAM. Ohne die Möglichkeit, große Mengen an Quantendaten über einen relativ langen Zeitraum zu speichern, sind Methoden, die mit Quantendaten beginnen, noch ziemlich weit von der Anwendbarkeit in der Industrie entfernt. Es ist auch unklar, wie man auf klassische Daten effizient \"quantenmäßig zugreifen\" kann. Zwei Arten von ML sind von besonderem Interesse: das überwachte Lernen, bei dem ein Algorithmus anhand eines markierten Datensatzes trainiert wird, und das unüberwachte Lernen, bei dem der Algorithmus versucht, aus nicht markierten Stichproben etwas über eine Verteilung zu lernen. Ein unüberwachter Algorithmus könnte zum Beispiel lernen, wie man neue Stichproben aus derselben Verteilung erzeugt oder wie man die Stichproben in Gruppen mit ähnlichen Merkmalen zusammenfasst.\n",
        "\n",
        "![QML\\_CR\\_background\\_Sup\\_Unsup.avif](https://quantum.cloud.ibm.com/learning/images/courses/quantum-machine-learning/introduction/qml-cr-background-sup-unsup.avif)\n",
        "\n",
        "Das linke Bild zeigt zwei Kategorien von gekennzeichneten Daten wie beim überwachten Lernen. In diesem Fall sind die Kategorien linear trennbar. Das rechte Bild zeigt Datencluster. Bei einer unbeaufsichtigten Lernaufgabe würden diese Daten zunächst nicht gekennzeichnet werden, und der Algorithmus würde die Verteilung untersuchen, möglicherweise auf der Suche nach Clustern. Um die vom Algorithmus identifizierten Beispielcluster zu visualisieren, wurden die Datenpunkte nun mit Beschriftungen versehen. Ein wesentlicher Unterschied zwischen den beiden besteht darin, dass der überwachte Lernprozess mit bereits gekennzeichneten Daten beginnt, während der unüberwachte Prozess mit unmarkierten Daten beginnt, auch wenn die Daten am Ende gekennzeichnet werden.\n",
        "\n",
        "Diejenigen, die sich mit maschinellem Lernen auskennen, wissen bereits, dass viele Lösungsmethoden die Abbildung von Daten in höherdimensionale Räume beinhalten. Dies ist vor allem im Zusammenhang mit Kerneln gut erforscht. Zur Erinnerung: Manchmal können Daten durch eine Linie, eine Ebene oder eine Hyperebene (der Kompaktheit halber sagen wir oft einfach \"Hyperebene\") in der gleichen Anzahl von Dimensionen, wie die Daten gegeben sind, in Kategorien unterteilt werden. Dies ist in der ersten Abbildung oben dargestellt. In anderen Fällen sind die Daten möglicherweise nicht durch eine Hyperebene in diesen Dimensionen trennbar, wie in der zweiten Abbildung gezeigt. Die Daten können jedoch immer noch eine Struktur aufweisen, die bei einer Abbildung auf höhere Dimensionen genutzt werden kann, wodurch die Daten in diesem höherdimensionalen Raum separierbar bleiben. Dies wird durch die Abbildung der 2D Daten mit Kreissymmetrie in den 3D Raum veranschaulicht, in dem die Datenpunkte entlang einer Paraboloidfläche angeordnet sind.\n",
        "\n",
        "![QML\\_CR\\_background\\_2D-3D.avif](https://quantum.cloud.ibm.com/learning/images/courses/quantum-machine-learning/introduction/qml-cr-background-2d-3d.avif)\n",
        "\n",
        "Ein allgemeines Ziel in QML ist es, eine Abbildung aus dem niedrigdimensionalen Satz von Merkmalen in einen höherdimensionalen Raum zu finden, der unsere Datenpunkte effektiv trennt, so dass wir die Abbildung verwenden können, um neue Datenpunkte zu klassifizieren.\n",
        "Dies ist jedoch keine leichte Aufgabe, und jede Diskussion über den potenziellen Nutzen der Quanteninformatik für das maschinelle Lernen muss mit den entsprechenden Vorbehalten versehen werden. Insbesondere müssen wir uns mit den Nuancen bei der Auswahl der Datensätze und den Herausforderungen beim Erreichen des Versorgungsgrads befassen. Wir müssen uns auch von dem Versuch abwenden, klassische ML-Algorithmen bei Daten zu übertreffen, die bereits effizient und gut von klassischen Algorithmen verarbeitet werden, und die Diskussion auf die Untersuchung neuer Merkmalskarten konzentrieren, die nützlich sein könnten.\n",
        "\n",
        "<span id=\"managing-expectations\" />\n",
        "\n",
        "## Erwartungen managen\n",
        "\n",
        "Viele Datensätze, die in den in der Literatur beschriebenen QML-Anwendungen verwendet werden, sind \"feature engineered\", d. h. ein Datensatz wird speziell ausgewählt oder erzeugt, um einen engen Anwendungsfall zu zeigen, in dem Quantencomputing nützlich ist. Wenn das wie Betrug aussieht, dann haben wir die Aufgabe falsch verstanden. Es ist **nicht** so, dass einige Quantenmerkmalskarten uns in die Lage versetzen, alle oder viele Klassifizierungsaufgaben effizienter oder skalierbarer zu lösen als klassische maschinelle Lernalgorithmen. Vielmehr verhalten sich einige Quantenmerkmalskarten (nicht alle) anders als klassische Merkmalskarten. Die Aufgabe besteht nun darin, Quantenschaltungen im Zusammenhang mit komplexen Datenstrukturen zu erforschen. Einige spezifische Fragen, die zu klären sind, sind:\n",
        "\n",
        "1. Welche Quantenschaltungen verhalten sich im Vergleich zu klassischen Alternativen am wahrscheinlichsten neuartig?\n",
        "2. Gibt es reale Probleme mit Daten, deren Eigenschaften am besten mit solchen neuartigen Quantenschaltungen erforscht werden?\n",
        "3. Skalieren diese Quantenschaltungen auf baldigen Quantencomputern?\n",
        "\n",
        "<span id=\"insufficient-explanation\" />\n",
        "\n",
        "### Unzureichende Erklärung\n",
        "\n",
        "Oft wird vereinfacht erklärt, wie leistungsfähig das Quantencomputing sein kann. Es geht ungefähr so:\n",
        "\n",
        "So wie klassische Computer Informationsbits verwenden, nutzen Quantencomputer Qubits. Bei einer Anzahl von Bits, z. B. 4, kann ein klassischer Computer jeden beliebigen von $2^4 = 16$ möglichen Zuständen einnehmen, während ein Quantencomputer in einer Überlagerung aller 16 Zustände gleichzeitig existieren kann und Operationen mit dieser gesamten Überlagerung durchgeführt werden können. In einigen Fällen erlaubt uns dies natürlich, potenziell interessante Lernalgorithmen zu entwickeln, die auf Abbildungen in höherdimensionalen Räumen basieren.\n",
        "\n",
        "Diese Aussage ist zwar richtig, aber sie ist unzureichend und ein wenig irreführend, wie wir erklären werden. Es werden auch die Unterschiede zwischen komplexen und reellen Koeffizienten hervorgehoben, wie in:\n",
        "\n",
        "Ein probabilistisches klassisches System, in dem ein System mit bestimmten Wahrscheinlichkeiten für verschiedene Zustände beschrieben werden kann, lässt sich wie folgt beschreiben.\n",
        "\n",
        "$$\n",
        "|s\\rangle = a|0000\\rangle+b|0001\\rangle+c|0010\\rangle+... a, b, c \\in \\reals\n",
        "$$\n",
        "\n",
        "In einem solchen System können die Koeffizienten $a$, $b$, $c$ usw. nur dann sinnvoll sein, wenn es sich um positive reelle Zahlen handelt. Die Zustände in Quantencomputern werden durch Wahrscheinlichkeitsamplituden beschrieben, die komplexe Zahlen sein können.\n",
        "\n",
        "$$\n",
        "|\\psi \\rangle = A|0000\\rangle+B|0001\\rangle+C|0010\\rangle+... A, B, C \\in \\mathbb{C}\n",
        "$$\n",
        "\n",
        "Die obigen Aussagen wurden sehr sorgfältig gemacht, so dass sie wahr sind (viele oberflächlich betrachtet ähnliche Aussagen sind falsch). Aber diese korrekten Aussagen sind keine Erklärung für die Leistungsfähigkeit des Quantencomputers beim maschinellen Lernen. Zum einen ist jede Anwendung von Quantencomputing auf maschinelles Lernen mit Messungen verbunden, und wir können nicht messen, ob ein Qubit mehrere Zustände gleichzeitig einnimmt. Wir können ein Qubit in einer Überlagerung wie $|\\psi\\rangle = \\frac{1}{\\sqrt{2}}\\left(|0\\rangle+|1\\rangle\\right)$ vorbereiten, aber eine Messung ergibt entweder $|0\\rangle$ oder $|1\\rangle$. Also ist diese Geschichte über die zunehmende Dimensionalität zumindest unvollständig. Darüber hinaus kann im Zusammenhang mit Kernen eine größere Dimension bei der Quanteninformatik keine hinreichende Bedingung für eine höhere Rechenleistung als bei klassischen Alternativen sein, da Gaußsche Kerne unendlich dimensional sind. Hier gibt es einige Feinheiten, da Gaußsche Merkmalskarten nur in Verbindung mit dem \"Kernel-Trick\" verwendet werden, der die Notwendigkeit umgeht, einen unendlich-dimensionalen abgebildeten Vektor zu berechnen. Aber der Punkt bleibt:\n",
        "\n",
        "**Die hohe Dimensionalität verschränkter Quantenzustände ist keine exponentielle Parallelität und keine hinreichende Bedingung für mehr Leistung beim maschinellen Lernen.**\n",
        "\n",
        "In den folgenden Lektionen stellen wir Arbeitsabläufe für die Einbindung von Quantenschaltungen in Aufgaben des maschinellen Lernens vor, und zwar mit dem ausdrücklichen Ziel, die Erkundung der Leistungsfähigkeit des Quantencomputers zu erleichtern. In diesem Kurs wird keine Merkmalskarte und kein Algorithmus als schneller Weg zu besseren Ergebnissen beim maschinellen Lernen für allgemeine Probleme vorgestellt, weil es keine solche Merkmalskarte und keinen solchen Algorithmus gibt. Vielmehr stellen wir eine breite Palette von Quantenwerkzeugen vor, die bei der Erforschung des nützlichen Quantencomputings eingesetzt werden können.\n",
        "\n",
        "<span id=\"dequantization\" />\n",
        "\n",
        "### Dequantisierung\n",
        "\n",
        "Unter Dequantisierung versteht man die Ersetzung eines bestimmten Quantenalgorithmus durch einen klassischen Algorithmus, der für eine bestimmte Anzahl von Aufgaben, in der Regel einschließlich der Skalierung, eine ähnliche Leistung erbringt wie ein Quantenalgorithmus. Nach einigen Definitionen sollte der klassische Algorithmus nur polynomiell langsamer sein als der Quantenalgorithmus.\n",
        "\n",
        "Mehrere Algorithmen des maschinellen Lernens mit Hilfe von Quantenmechanismen (QML), von denen man ursprünglich annahm, dass sie erhebliche Geschwindigkeitssteigerungen gegenüber klassischen Algorithmen bieten, wurden in den letzten Jahren dequantisiert. Dieser Prozess der Dequantisierung hat zu wichtigen Erkenntnissen über die potenziellen Vorteile und Grenzen von Quantenansätzen beim maschinellen Lernen geführt.\n",
        "\n",
        "Eines der bemerkenswertesten Ergebnisse im Bereich der Dequantisierung stammt aus Ewin Tangs [Arbeit zu Empfehlungssystemen](https://arxiv.org/abs/1807.04271). Tang entdeckte einen klassischen Algorithmus, der Empfehlungsaufgaben mit einer Geschwindigkeit ausführen konnte, die zuvor nur Quantencomputern zugeschrieben wurde. Diese Entdeckung stellte die Annahme in Frage, dass Quantenalgorithmen bei diesem Problem einen exponentiellen Vorteil hätten. In neueren Arbeiten von [Shin et al](https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.6.023218). lag der Schwerpunkt auf der Ermittlung von Bedingungen für die Dequantisierbarkeit der Funktionsklasse eines variationalen Quanten-Machine-Learning-Modells.\n",
        "\n",
        "Ein gängiger Ansatz zur Dequantisierung (wenn auch nicht der einzige) ist die Berücksichtigung des Overheads beim Laden von Daten. Das heißt, jeder Quantenalgorithmus, der auf klassische Daten angewandt wird, enthält einen Schritt, in dem klassische Daten in den Quantencomputer kodiert werden. Wenn ein Quantenalgorithmus von einem Ausgangspunkt ausgeht, an dem bereits Quantendaten vorhanden sind, wird die für die Kodierung benötigte Zeit effektiv ausgeblendet. Es gibt Kontexte, in denen die Annahme von Quantendaten sinnvoll sein kann, aber viele Anwendungen von Interesse werden mit klassischen Daten beginnen. Einige Dequantisierungsfälle haben gezeigt, dass der Quantenalgorithmus sein klassisches Gegenstück nicht mehr übertrifft, wenn diese Kodierungszeit mit eingerechnet wird und wenn das Laden der Daten auf klassische Weise effizient durchgeführt werden kann.\n",
        "\n",
        "Selbst wenn ein Algorithmus nicht dequantisiert werden kann, bedeutet das nicht, dass er effizienter oder skalierbarer als alle klassischen Algorithmen ist. Als extremes, erfundenes Beispiel: Stellen Sie sich einen Algorithmus vor, der aus einer Menge der Größe k die größten j Elemente auswählt. Man könnte einen Quantenalgorithmus schreiben, der den Algorithmus von Shor verwendet, um jedes der k Elemente in Primfaktoren zu zerlegen, und dann die größten Elemente anhand der Primfaktoren bestimmen. Ein solcher Algorithmus kann wahrscheinlich nicht dequantisiert werden, ist aber drastisch weniger effizient als klassische Algorithmen, um die gleiche Auswahl der größten Elemente zu erreichen (allerdings ohne den unnötigen Faktorisierungsteil).\n",
        "\n",
        "<span id=\"existence-proof\" />\n",
        "\n",
        "## Existenzbeweis\n",
        "\n",
        "Im Jahr 2021 veröffentlichten die Forscher Yunchao Liu, Srinivasan Arunachalam und Kristan Temme vom „ IBM Quantum® “ einen Artikel in der Fachzeitschrift „Nature“ mit dem Titel „[A rigorous and robust quantum speed-up in supervised machine learning](https://www.nature.com/articles/s41567-021-01287-z) “. Unter Berücksichtigung der oben genannten Einschränkungen wurde für diese Arbeit sorgfältig ein Klassifizierungsproblem ausgewählt, das (1) bekanntermaßen klassisch schwer zu lösen ist und (2) sich dafür eignet, dass Quantenalgorithmen eine Beschleunigung erzielen.\n",
        "\n",
        "Das Papier befasst sich mit der Klassifizierung von Daten auf der Grundlage von diskreten Logarithmen. Um das Papier zu zitieren: \"Für eine große Primzahl $p$ und einen Generator $g$ von $\\mathbb{Z}^*_p = {1, 2, . . . , p − 1}$ ist es eine weit verbreitete Vermutung, dass kein klassischer Algorithmus $\\text{log}_g(x)$ auf der Eingabe $x \\in \\mathbb{Z}^*_p $ in einer Zeit berechnen kann, die polynomial zu $n = \\lceil{\\text{log}_2(p)}\\rceil$ ist, der Anzahl der Bits, die benötigt werden, um $p$ darzustellen.\" Im Gegensatz dazu ist bekannt, dass [der Shor-Algorithmus](https://epubs.siam.org/doi/10.1137/S0097539795293172) das diskrete Logarithmusproblem in polynomialer Zeit lösen kann. Diese Auswahl von Problemen erfüllt somit gleichzeitig die oben genannten Kriterien: klassische Härte (unwahrscheinlich, dass sie dequantisiert werden) und bekannte Eignung für Quantenalgorithmen.\n",
        "\n",
        "Durch diese umsichtige Wahl des Klassifizierungsproblems konnten die Autoren eine exponentielle Beschleunigung mit Quantenkernel-Methoden (im Folgenden kurz skizziert und in späteren Lektionen diskutiert) zeigen, die sowohl durchgängig als auch robust ist. End-to-End\" bezieht sich hier auf die Annahmen über den Beginn mit klassischen Daten; die Autoren beziehen in diesem Fall die Zeit für die Datenkodierung mit ein. Der Begriff \"robust\" bezieht sich hier auf die Tatsache, dass die zu klassifizierenden Daten mit Hilfe des Quantenalgorithmus mit einem großen Abstand voneinander getrennt werden, so dass der Klassifizierungserfolg gegenüber realen Gegebenheiten wie endlichen Stichprobenfehlern robust ist.\n",
        "\n",
        "All dies bedeutet, dass es Probleme gibt, bei denen Quantenkernel eine exponentielle Beschleunigung bewirken können. Der derzeitige Stand der Wissenschaft ist jedoch, dass solche Probleme aufgrund von Beobachtungen oder theoretischen Begründungen ausgewählt werden, die zeigen, dass sie für Quantenalgorithmen geeignet sein sollten. Es ist nicht realistisch, eine Quantenbeschleunigung für Aufgaben des maschinellen Lernens zu erwarten, die klassische Computer bereits recht gut erledigen.\n",
        "\n",
        "Die Identifizierung solcher idealen Fälle für die Erforschung des Quantennutzens ist eine enorme Verantwortung für die Lernenden in diesem Kurs. Und das ist keine Aufgabe, die man in einem Kurs wie diesem bewältigen kann. Diese Erforschung ist eine Aufgabe für das gesamte Quantennetzwerk IBM, das sich aus Forschern wie Ihnen zusammensetzt. In diesem Kurs werden QML-Workflows und Kodierungsstrategien demonstriert, so dass Sie damit beginnen können, den Quantennutzen in Ihrem Fachgebiet zu erforschen.\n",
        "\n",
        "Wir hoffen, dass diese Einführung ein paar Dinge über das maschinelle Lernen mit Quanten verdeutlicht hat:\n",
        "\n",
        "1. Quantenalgorithmen können eine exponentielle Beschleunigung gegenüber klassischen Algorithmen für sehr spezifische Probleme bieten, die klassisch schwierig und für Quantenalgorithmen gut geeignet sind.\n",
        "2. Die hohe Dimensionalität verschränkter Zustände bei der Quanteninformatik ist wichtig, aber sie reicht nicht aus, um einen Vorteil gegenüber klassischen Algorithmen zu erzielen.\n",
        "3. Probleme zu finden, die sich gut für Quantenalgorithmen eignen, ist eine äußerst schwierige Aufgabe, die den Lernenden in diesem Kurs weitgehend abverlangt wird.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8ff490cb-1b17-4ac7-bd32-9edca1aa051e",
      "metadata": {},
      "source": [
        "<span id=\"check-in-questions\" />\n",
        "\n",
        "## Check-in-Fragen\n",
        "\n",
        "Wodurch unterscheiden sich Quantenzustände von klassischen Zuständen?\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"Antwort\">\n",
        "    Sehr viel. Insbesondere: komplexe Koeffizienten und Überlagerung mit einer einzigen Kopie. Es gibt noch viele weitere Unterschiede, die in zukünftigen Lektionen behandelt werden, darunter Verschränkung und Interferenz.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n",
        "Richtig oder falsch? Hochgradig verschränkte Quantenzustände ermöglichen es uns, die meisten Probleme des maschinellen Lernens auf einem Quantencomputer effizienter zu lösen.\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"Antwort\">\n",
        "    Falsch. Die meisten Probleme des maschinellen Lernens werden durch klassische Algorithmen sehr effizient gelöst, und Quantenalgorithmen werden wahrscheinlich keine wesentliche Beschleunigung bieten. Das Ziel von QML ist es, Datensätze mit Merkmalen zu finden, die durch Quantenzustände gut beschrieben sind, und/oder Zuordnungen von Datenmerkmalen zu finden, die die Genauigkeit der Modelle optimieren.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "0158cbee-9b6e-4b74-a449-a4cb6ef27f18",
      "metadata": {},
      "source": [
        "<span id=\"course-learning-goals\" />\n",
        "\n",
        "## Lernziele des Kurses\n",
        "\n",
        "Durch den Abschluss dieses Kurses können Sie erwarten, dass Sie die folgenden Kernfähigkeiten und -kompetenzen erwerben. Die Lernenden sind in der Lage:\n",
        "\n",
        "1. Erklären Sie, was QML ist und wo die Verbindung zwischen Quanten- und klassischem maschinellem Lernen liegt.\n",
        "\n",
        "2. Anwendung von Quantenvokabular und Schlüsselbegriffen auf ML-Workflows.\n",
        "\n",
        "3. Identifizierung der Hauptkomponenten eines QML-Workflows (verschiedene Typen).\n",
        "\n",
        "4. Die verschiedenen Arten von QML zu identifizieren und zu unterscheiden.\n",
        "\n",
        "5. Implementieren Sie Quantenkernel-Methoden und variationale Quantenklassifikatoren unter Verwendung von Primitiven aus „ IBM Quantum “ und gemäß den Qiskit-Mustern.\n",
        "\n",
        "6. Ermitteln Sie, wo QML am vielversprechendsten ist und wo nicht.\n",
        "\n",
        "7. Ein Beispielproblem an ihren eigenen Datensatz anpassen.\n",
        "\n",
        "8. Achten Sie bei QML auf Probleme wie Trainingszeit, Rauschen und Compounding Error bei der Anzeige mehrerer Zustände.\n",
        "\n",
        "9. Empfehlungen aussprechen, wo QML für ihr Unternehmen von Nutzen sein könnte.\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "cb9bf2a7-8487-482f-8fcc-95d2210bc314",
      "metadata": {},
      "source": [
        "<span id=\"course-structure\" />\n",
        "\n",
        "## Kursstruktur\n",
        "\n",
        "Dieser Kurs setzt sich aus mehreren Lektionen zusammen. In jeder Lektion gibt es mehrere Kontrollfragen, mit denen Sie neue Fertigkeiten üben oder Ihr Verständnis überprüfen können, während Sie den Text lesen. Diese sind nicht erforderlich.\n",
        "\n",
        "Am Ende des Kurses steht ein Quiz mit 20 Aufgaben. Sie müssen bei diesem Quiz mindestens 70 % erreichen, um Ihr Quantum Machine Learning Abzeichen über Credly zu erhalten. Wenn Sie mindestens 70 % erreicht haben, wird Ihnen Ihr Abzeichen kurz darauf automatisch per E-Mail zugeschickt. Sie dürfen das Quiz nur zweimal abgeben. Nach der ersten Einsendung haben Sie die Möglichkeit, die Fragen, die Sie nicht beantwortet haben, ein zweites Mal zu bearbeiten. Nach der zweiten Einsendung ist Ihr Ergebnis endgültig. Weitere Einzelheiten finden Sie im Quiz.\n",
        "\n",
        "Der Kurs ist wie folgt aufgebaut:\n",
        "\n",
        "* Lektion 1: Einführung und Überblick\n",
        "* Lektion 2: Rekapitulation des maschinellen Lernens\n",
        "* Lektion 3: Datenkodierung\n",
        "* Lektion 4: Quantum-Kernel-Methoden und Support-Vektor-Maschinen\n",
        "* Lektion 5: Variationale Quantenklassifikatoren / Neuronale Netze\n",
        "* Prüfung für Abzeichen\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "622774e8-c23c-4610-b204-80390b639852",
      "metadata": {},
      "source": [
        "<span id=\"run-your-first-qml-code\" />\n",
        "\n",
        "## Führen Sie Ihren ersten QML-Code aus\n",
        "\n",
        "Es ist oft hilfreich zu sehen, wo wir hinwollen, bevor wir es in seine Einzelteile zerlegen und den Hintergrund erforschen. Die nachstehenden Codezellen führen ein einfaches Beispiel für eine Quantenkernmethode aus. Konkret wird ein einziges Element der Kernelmatrix berechnet. Benutzer, die sich noch nicht mit Kernel-Methoden oder Quantenkerneln auskennen, sollten sich davon nicht einschüchtern lassen; mehrere Lektionen in diesem Kurs werden sich damit beschäftigen, was genau in diesen Zellen geschieht.\n",
        "\n",
        "Mit diesem Code stellen wir gleichzeitig Qiskit-Muster vor: ein Rahmenwerk für die Annäherung an das Quantencomputing auf der Skala der Versorgungsunternehmen. Dieser Rahmen besteht aus vier Schritten, die sehr allgemein gehalten sind und auf die meisten Probleme angewandt werden können (obwohl in einigen Arbeitsabläufen bestimmte Schritte mehrfach wiederholt werden können).\n",
        "\n",
        "<span id=\"qiskit-patterns\" />\n",
        "\n",
        "### Qiskit-Muster:\n",
        "\n",
        "* Schritt 1: Abbildung klassischer Eingaben auf ein Quantenproblem\n",
        "* Schritt 2: Optimieren des Problems für die Quantenausführung\n",
        "* Schritt 3: Ausführung mithilfe von „ IBM Quantum “-Primitiven\n",
        "* Schritt 4: Analyse/Nachbearbeitung\n",
        "\n",
        "In den nachstehenden Zellen werden die einzelnen Schritte nur kursorisch erläutert, damit Sie die entsprechende Lektion finden, um mehr zu erfahren.\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "63b85808-7f02-446e-9ef6-38369c95a4bb",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "--2025-05-09 10:04:28--  https://raw.githubusercontent.com/qiskit-community/prototype-quantum-kernel-training/main/data/dataset_graph7.csv\n",
            "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.110.133, 185.199.109.133, 185.199.108.133, ...\n",
            "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.110.133|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 49405 (48K) [text/plain]\n",
            "Saving to: ‘dataset_graph7.csv.2’\n",
            "\n",
            "dataset_graph7.csv. 100%[===================>]  48.25K  --.-KB/s    in 0.03s   \n",
            "\n",
            "2025-05-09 10:04:29 (1.37 MB/s) - ‘dataset_graph7.csv.2’ saved [49405/49405]\n",
            "\n"
          ]
        },
        {
          "data": {
            "text/plain": [
              "0.8199"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "# Import some qiskit packages required for setting up our quantum circuits.\n",
        "from qiskit.circuit import Parameter, ParameterVector, QuantumCircuit\n",
        "from qiskit.circuit.library import unitary_overlap\n",
        "\n",
        "# Import StatevectorSampler as our sampler.\n",
        "from qiskit.primitives import StatevectorSampler\n",
        "\n",
        "# Step 1: Map classical inputs to a quantum problem:\n",
        "\n",
        "# Start by getting some appropriate data.\n",
        "# The data imported below consist of 128 rows or data points.\n",
        "# Each row has 14 columns that correspond to data features, and a 15th column with a label (+/-1).\n",
        "!wget https://raw.githubusercontent.com/qiskit-community/prototype-quantum-kernel-training/main/data/dataset_graph7.csv\n",
        "\n",
        "# Import some required packages, and write a function to pull some\n",
        "# training data out of the csv file you got above.\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "\n",
        "\n",
        "def get_training_data():\n",
        "    \"\"\"Read the training data.\"\"\"\n",
        "    df = pd.read_csv(\"dataset_graph7.csv\", sep=\",\", header=None)\n",
        "    training_data = df.values[:20, :]\n",
        "    ind = np.argsort(training_data[:, -1])\n",
        "    X_train = training_data[ind][:, :-1]\n",
        "\n",
        "    return X_train\n",
        "\n",
        "\n",
        "# Prepare training data\n",
        "X_train = get_training_data()\n",
        "\n",
        "# Empty kernel matrix\n",
        "num_samples = np.shape(X_train)[0]\n",
        "\n",
        "# Prepare feature map for computing overlap between two data points.\n",
        "# This could be pre-built feature maps like ZZFeatureMap, or a custom quantum circuit,\n",
        "# as shown here.\n",
        "num_features = np.shape(X_train)[1]\n",
        "num_qubits = int(num_features / 2)\n",
        "entangler_map = [[0, 2], [3, 4], [2, 5], [1, 4], [2, 3], [4, 6]]\n",
        "fm = QuantumCircuit(num_qubits)\n",
        "training_param = Parameter(\"θ\")\n",
        "feature_params = ParameterVector(\"x\", num_qubits * 2)\n",
        "fm.ry(training_param, fm.qubits)\n",
        "for cz in entangler_map:\n",
        "    fm.cz(cz[0], cz[1])\n",
        "for i in range(num_qubits):\n",
        "    fm.rz(-2 * feature_params[2 * i + 1], i)\n",
        "    fm.rx(-2 * feature_params[2 * i], i)\n",
        "\n",
        "# Pick two data points, here 14 and 19, and assign the features to the circuits as parameters.\n",
        "x1 = 14\n",
        "x2 = 19\n",
        "unitary1 = fm.assign_parameters(list(X_train[x1]) + [np.pi / 2])\n",
        "unitary2 = fm.assign_parameters(list(X_train[x2]) + [np.pi / 2])\n",
        "\n",
        "# Create the overlap circuit\n",
        "overlap_circ = unitary_overlap(unitary1, unitary2)\n",
        "overlap_circ.measure_all()\n",
        "overlap_circ.draw(\"mpl\", scale=0.6, style=\"iqp\")\n",
        "\n",
        "# Step 2: Optimize problem for quantum execution\n",
        "\n",
        "# Use IBM Quantum Compute Service to get the least busy backend for running on real quantum computers.\n",
        "# from qiskit_ibm_runtime import QiskitRuntimeService\n",
        "\n",
        "# service = QiskitRuntimeService(channel=\"ibm_quantum\")\n",
        "# backend = service.least_busy(\n",
        "#    operational=True, simulator=False, min_num_qubits=overlap_circ.num_qubits\n",
        "# )\n",
        "\n",
        "# Transpile the circuits optimally for the chosen backend using a pass manager.\n",
        "# from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager\n",
        "# pm = generate_preset_pass_manager(optimization_level=3, backend=backend)\n",
        "# overlap_ibm = pm.run(overlap_circ)\n",
        "\n",
        "# Step 3: Execute using IBM Quantum primitives\n",
        "\n",
        "# Specify the number of shots to use.\n",
        "num_shots = 10_000\n",
        "\n",
        "## Evaluate the problem using statevector-based primitives from Qiskit\n",
        "sampler = StatevectorSampler()\n",
        "counts = (\n",
        "    sampler.run([overlap_circ], shots=num_shots).result()[0].data.meas.get_int_counts()\n",
        ")\n",
        "\n",
        "# Step 4: Analyze and post-processing\n",
        "\n",
        "# Find the probability of 0.\n",
        "counts.get(0, 0.0) / num_shots"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "453db58e-80b2-41df-8b9c-52dc17be6174",
      "metadata": {},
      "source": [
        "Auch wenn Sie nicht alle der oben genannten Schritte verstehen müssen, sollten wir versuchen, die Ausgabe zu verstehen, damit wir wissen, warum wir dies tun. Viele Prozesse des maschinellen Lernens verwenden innere Produkte als Teil der binären Klassifikation (unter anderem). Die Quantenmechanik hat eine offensichtliche Verbindung dazu, da die Wahrscheinlichkeiten der Messung verschiedener Zustände $|\\phi_i\\rangle$ durch das innere Produkt mit einem Ausgangszustand $|\\psi\\rangle$ durch das innere Produkt gegeben sind: $P_i = |\\langle\\phi_i|\\psi\\rangle|^2$. Wir haben also einen Quantenschaltkreis geschaffen, der die Merkmale unserer beiden Datenpunkte enthält und sie in den Raum eines Quantenvektors abbildet, um dann das innere Produkt in diesem Raum durch Messungen zu schätzen. Dies ist ein Beispiel für eine Quanten-Kernel-Schätzung. Beachten Sie, dass wir diesen Prozess nur für zwei der Datenpunkte (den 14. und 19.) durchgeführt haben. Wenn wir dies für alle möglichen Paare tun würden, könnten wir die Ausgabe nehmen (in diesem Fall die Nummer 0.821...) und füllen eine Ergebnismatrix auf, die die Überlappung zwischen allen Punkten im Trainingsdatensatz beschreibt. Dies ist die \"Kernel-Matrix\".\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "29a0f015-46a3-4b6d-8afa-c188cc5aab36",
      "metadata": {},
      "source": [
        "<span id=\"check-your-understanding\" />\n",
        "\n",
        "#### Überprüfen Sie Ihr Verständnis\n",
        "\n",
        "Bei dem obigen Verfahren haben wir einen Kernelmatrixeintrag für den 14. und 19. Welchen Wert sollten wir erhalten, wenn wir hier denselben Datenpunkt zweimal verwenden (z. B. 14. und nochmals 14.)? Mit anderen Worten: Wie lauten die Diagonaleinträge in der Kernelmatrix? Beantworten Sie diese Frage ohne Rauschen, aber beachten Sie, dass Abweichungen von Ihrer Antwort möglich sind, wenn Rauschen vorhanden ist.\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"Antwort\">\n",
        "    Die Diagonalen sollten 1.0 sein. Bei diesem Prozess sollte das normierte innere Produkt eines Vektors mit sich selbst berechnet werden, das immer eins sein muss.\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 4
}