Machine Learning für Softwareentwickler. Paolo Perrotta
Dann sind wir zu dreidimensionalen Beispielen mit einem zweidimensionalen Modell übergegangen. Jetzt haben wir schon vierdimensionale Beispiele, zu deren Annäherung wir ein dreidimensionales Modell benötigen. Dieser Prozess setzt sich fort, wenn wir weitere Eingabevariablen hinzufügen. Allgemein ist eine (n -1)-dimensionale Form erforderlich, um Beispiele in n Dimensionen anzunähern.
Mit Ausnahme einiger Figuren von H. P. Lovecraft können Menschen allerdings nicht mehr als drei räumliche Dimensionen wahrnehmen. In der Mathematik stellt der Umgang mit solchen mehrdimensionalen Räumen, die einen um den Verstand bringen könnten, jedoch kein Problem dar. Sie werden als Hyperräume bezeichnet und mit denselben Gleichungen beschrieben wie zwei- und dreidimensionale Räume. Unabhängig davon, wie viele Dimensionen wir insgesamt haben, können wir einfach Eingabevariablen und Gewichte zu der Geraden- oder Ebenenformel hinzufügen:
ŷ = x1 * w1 + x2 * w2 + x3 * w3 + ... + b
Die vorstehende Formel ist die gewichtete Summe der Eingaben. Die Geradengleichung ist nur ein Sonderfall davon, nämlich die gewichtete Summe einer einzigen Eingabe. Unser Plan zur Erweiterung des ML-Programms auf mehrere Eingabevariablen klingt daher ganz einfach: Wir müssen nur die Geradengleichung durch eine allgemeinere Formel für gewichtete Summen ersetzen.
Um diesen Plan zu verwirklichen, brauchen wir jedoch einige mathematische Operationen, die wir uns in dem folgenden kleinen Exkurs ansehen werden.
Matrizenrechnung
Um unser System auf mehrere Variablen zu erweitern, brauchen wir zwei Matrizenoperationen. Ich möchte die Einführung dieser Operationen nicht auf den Zeitpunkt verschieden, an dem wir schon mit der Programmierung genug zu tun haben, sondern hier einige Seiten einschalten, um diese Hürde aus dem Weg zu räumen.
Eine Matrix ist ein zweidimensionales Arrays. Beispielsweise zeigt die folgende Abbildung eine (4, 3)-Matrix mit vier Zeilen und drei Spalten:
Die beiden Operationen, mit denen wir uns hier beschäftigen, sind die Matrizenmultiplikation und die Transposition. Beide sind im Machine Learning allgegenwärtig und verdienen daher jeweils ihren eigenen Abschnitt.
Mathematischer Hintergrund: Lineare Algebra
Matrizenoperationen wie die Matrizenmultiplikation und die Transposition gehören zu einem Teilgebiet der Mathematik, das als lineare Algebra bezeichnet wird. Wenn Sie mehr darüber erfahren wollen, schauen Sie sich die Lektionen der Khan Academy an.1
Matrizen multiplizieren
Haben Sie sich jemals gefragt, warum für ML gewöhnlich große Anlagen mit vielen Grafikprozessoren verwendet werden? Das liegt daran, dass ML-Systeme den Großteil der Zeit mit einer einzigen Operation beschäftigt sind, die sich auf Grafikprozessoren besonders schnell ausführen lässt, nämlich mit der Multiplikation großer Matrizen.
Die »goldene Regel« der Matrizenmultiplikation lautet: Zwei Matrizen können genau dann miteinander multipliziert werden, wenn die Anzahl der Zeilen in der zweiten Matrix gleich der Anzahl der Spalten in der ersten ist.
M1 ist eine (4, 3)-Matrix und M2 eine (3, 2)-Matrix. Laut der obigen Regel können wir sie also miteinander multiplizieren. Doch was steckt hinter dieser Regel? Um diese Frage zu beantworten, schreiben wir die Operation wie folgt:
Wenn die inneren Dimensionen gleich sind – wie in diesem Fall –, ist die Multiplikation zulässig. Das Ergebnis ist dann eine Matrix mit den äußeren Dimensionen, hier also (4, 2):
Schauen wir uns das an einigen konkreten Beispielen genauer an. Der einfachste Fall ist dabei eine Matrix mit einer einzigen Zeile, die mit einer Matrix mit einer einzigen Spalte multipliziert wird:
Als Erstes prüfen wir wieder, ob die Multiplikation zulässig ist. Wir haben hier eine (1, 3)- und eine (3, 1)-Matrix, und nach unserer goldenen Regel ist die Multiplikation (1, 3)·(3, 1) zulässig und ergibt eine (1, 1)-Matrix, also eine Matrix mit nur einem Element.
Um dieses eine Element zu berechnen, multiplizieren wir jedes Element von M1 mit dem korrespondierenden Element von M2, also das erste mit dem ersten, das zweite mit dem zweiten usw., und addieren schließlich die einzelnen Produkte:
2 * 2.5 + 3 * 4 + 5 * 1 = 22
Die Multiplikation sieht also wie folgt aus:
Vielleicht ist Ihnen schon die Ähnlichkeit zwischen dieser Multiplikation und der Formel am Ende des Abschnitts »Noch mehr Dimensionen« auf Seite 58 aufgefallen. Diese Ähnlichkeit ist natürlich kein Zufall. Wenn wir uns hinreichend mit der Matrizenmultiplikation beschäftigt haben, werden wir sie zur Implementierung unseres Modells mit linearer Regression verwenden.
Was aber müssen wir tun, wenn die Matrizen mehrere Zeilen und Spalten aufweisen? In diesem Fall gehen wir im Prinzip genauso vor wie im ersten Beispiel, multiplizieren aber jede Zeile der ersten Matrix mit jeder Spalte der zweiten. Jedes Element (i, j) der resultierenden Matrix enthält das Produkt von Zeile i von M1 und Spalte j von M2:
M3[i][j] = i-te_Zeile_von_M1 · j-te_Spalte_von_M2
Konkret sieht das wie folgt aus:
Prüfen wir das anhand eines der Elemente von M3 nach, z. B. M3[0][1]. Dieses Element hat den Wert 40. Nach unserer Rechenregel muss M3[0][1] gleich dem Produkt von Zeile 0 von M1 und Spalte 1 von M2 sein:
Das Produkt dieser Zeile mit dieser Spalte ist wie erwartet 2 * -3 + 3 * 12 + 5 * 2 = 40. Auf die gleiche Weise können Sie auch alle anderen Elemente von M3 überprüfen.
Anders als bei der regulären Multiplikation kommt es bei der Matrizenmultiplikation auf die Reihenfolge an. Wenn wir die beiden Matrizen vertauschen, erhalten wir im Allgemeinen ein anderes Ergebnis; in den meisten Fällen ist die Multiplikation dann nicht einmal mehr zulässig. In unserem Beispiel können wir M2 nicht mit M1 multiplizieren, da bei (3, 2)·(4, 3) die inneren Dimensionen ungleich sind.
In diesem Buch kommen sehr viele Matrizenmultiplikationen vor, allerdings werden wir sie nicht selbst ausrechnen, sondern dazu NumPy heranziehen. Es erleichtert die Sache jedoch, wenn Sie sich die goldene Regel merken: Die inneren Dimensionen müssen bei der Matrizenmultiplikation identisch sein, und die äußeren sind die Dimensionen der resultierenden Matrix. In unserem Beispiel haben wir (4, 3)·(3, 2) gerechnet und als Ergebnis eine (4, 2)-Matrix erhalten.
Das war es auch schon zum Thema Matrizenmultiplikation. Wenden wir uns nun der Transposition zu.
Matrizen transponieren
Im Vergleich zur Matrizenmultiplikation ist die Transposition einfach. Dabei spiegeln Sie die Matrix lediglich an der Diagonale, die von oben links nach unten rechts verläuft. In der folgenden Abbildung wird dies durch die verschiedenen Farbschattierungen der einzelnen Zellen deutlich gemacht:
Beim