Articles

Neuronale Netze verstehen 2: Die Mathematik neuronaler Netze in 3 Gleichungen

Im ersten Teil dieser Serie haben wir das Konzept eines neuronalen Netzes sowie die Mathematik zur Beschreibung eines einzelnen Neurons diskutiert. Es gibt jedoch viele Neuronen in einer einzigen Schicht und viele Schichten im gesamten Netzwerk, daher müssen wir eine allgemeine Gleichung erstellen, die ein neuronales Netzwerk beschreibt.

Einzelnes Neuron

Das erste, was unser Netzwerk tun muss, ist, Informationen durch die Schichten weiterzuleiten. Wir wissen bereits, wie dies für ein einzelnes Neuron zu tun:

Die Ausgabe des Neurons ist die Aktivierungsfunktion einer gewichteten Summe der Eingabe des Neurons

2 neuronen

Jetzt können wir die gleiche Logik anwenden, wenn wir 2 Neuronen in der zweiten Schicht haben.

In diesem Beispiel ist jedes Neuron der ersten Schicht mit jedem Neuron der zweiten Schicht verbunden, diese Art von Netzwerk wird als vollständig verbundenes Netzwerk bezeichnet. Das Neuron Y1 ist mit den Neuronen X1 und X2 mit den Gewichten W11 und W12 verbunden, und das Neuron Y2 ist mit den Neuronen X1 und X2 mit den Gewichten W21 und W22 verbunden. In dieser Notation gibt der erste Index des Gewichts das Ausgangsneuron und der zweite Index das Eingangsneuron an, so dass beispielsweise W12 das Gewicht bei der Verbindung von X2 zu Y1 ist. Jetzt können wir die Gleichungen für Y1 und Y2 schreiben:

Nun kann diese Gleichung durch Matrixmultiplikation ausgedrückt werden.

visualisierung der Matrixmultiplikation von http://matrixmultiplication.xyz/

Wenn Sie neu in der Matrixmultiplikation und linearen Algebra sind und dies Sie verwirrt, empfehle ich die lineare Algebra-Serie 3blue1brown.

Jetzt können wir die Ausgabe des ersten Neurons als Y1 und die Ausgabe des zweiten Neurons als Y2 schreiben. Dies gibt uns die folgende Gleichung:

Ganze Ebene

Daraus können wir die allgemeine Regel für die Ausgabe der Ebene abstrahieren:

In dieser Gleichung sind nun alle Variablen Matrizen und das Multiplikationszeichen steht für die Matrixmultiplikation.

Die Verwendung der Matrix in der Gleichung ermöglicht es uns, sie in einer einfachen Form zu schreiben, und macht sie für eine beliebige Anzahl von Ein- und Neuronen in der Ausgabe wahr.

Bei der Programmierung neuronaler Netze verwenden wir auch die Matrixmultiplikation, da dies es uns ermöglicht, das Rechnen parallel zu gestalten und effiziente Hardware wie Grafikkarten dafür zu verwenden.

Jetzt haben wir eine Gleichung für eine einzelne Ebene, aber nichts hindert uns daran, die Ausgabe dieser Ebene als Eingabe für die nächste Ebene zu verwenden. Dies gibt uns die generische Gleichung, die die Ausgabe jeder Schicht des neuronalen Netzwerks beschreibt. Eine weitere Sache, die wir hinzufügen müssen, ist Aktivierungsfunktion, Ich werde erklären, warum wir Aktivierungsfunktionen im nächsten Teil der Serie benötigen, denn jetzt können Sie darüber nachdenken, wie Sie die Ausgabe skalieren können, damit sie nicht zu groß oder zu unbedeutend wird.

Mit dieser Gleichung können wir die Informationen durch so viele Schichten des neuronalen Netzwerks verbreiten, wie wir wollen. Aber ohne zu lernen, ist das neuronale Netzwerk nur eine Reihe von zufälligen Matrixmultiplikationen, die nichts bedeuten.

Wie kann man also unser neuronales Netzwerk unterrichten? Zuerst müssen wir den Fehler des neuronalen Netzwerks berechnen und überlegen, wie wir diesen Fehler an alle Schichten weitergeben können.

2: Übergeben der Fehlerrückausbreitung

Um den Fehlerausbreitungsalgorithmus zu verstehen, müssen wir zu einem Beispiel mit 2 Neuronen in der ersten Schicht und 1 Neuron in der zweiten Schicht zurückkehren.

Nehmen wir an, die Y-Schicht ist die Ausgabeschicht des Netzwerks und das Y1-Neuron sollte einen Wert zurückgeben. Jetzt kann dieser Wert um einiges vom erwarteten Wert abweichen, daher liegt ein Fehler im Y1-Neuron vor. Wir können uns diesen Fehler als die Differenz zwischen dem zurückgegebenen Wert und dem erwarteten Wert vorstellen. Wir kennen den Fehler auf Y1, aber wir müssen diesen Fehler an die unteren Schichten des Netzwerks weitergeben, da wir möchten, dass alle Schichten lernen, nicht nur die Y-Schicht. Wie kann man diesen Fehler an X1 und X2 übergeben? Nun, ein naiver Ansatz wäre, den Y1-Fehler gleichmäßig aufzuteilen, da es 2 Neuronen in der X-Schicht gibt, könnten wir sagen, dass sowohl der X1- als auch der X2-Fehler gleich dem Y1-Fehler ist, der durch 2 multipliziert wird.

Es gibt jedoch ein großes Problem mit diesem Ansatz — die Neuronen haben unterschiedliche Gewichte, die mit ihnen verbunden sind. Wenn das mit dem X1-Neuron verbundene Gewicht viel größer ist als das mit dem X2-Neuron verbundene Gewicht, wird der Fehler auf Y1 viel stärker von X1 beeinflusst, da Y1 = (X1 * W11 + X2 * X12). Wenn also W11 größer als W12 ist, sollten wir mehr von dem Y1-Fehler an das X1-Neuron übergeben, da dies das Neuron ist, das dazu beiträgt.

Jetzt, da wir es beobachtet haben, können wir unseren Algorithmus aktualisieren, um den Fehler nicht gleichmäßig aufzuteilen, sondern ihn entsprechend dem Verhältnis des Gewichts des Eingangsneurons zu allen Gewichten, die zum Ausgangsneuron kommen, aufzuteilen.

aktualisieren Sie das Gewicht

Jetzt können wir noch einen Schritt weiter gehen und das Beispiel analysieren, in dem sich mehr als ein Neuron in der Ausgabeschicht befindet.

In diesem Beispiel sehen wir, dass z.B. das Neuron X1 nicht nur zum Fehler von Y1, sondern auch zum Fehler von Y2 beiträgt und dieser Fehler immer noch proportional zu seinen Gewichten ist. Also, in der Gleichung, die den Fehler von X1 beschreibt, brauchen wirum sowohl den Fehler von Y1 multipliziert mit dem Verhältnis der Gewichte als auch den Fehler von Y2 multipliziert mit dem Verhältnis der Gewichte, die zu Y2 kommen, zu haben.

Diese Gleichung kann auch in Form einer Matrixmultiplikation geschrieben werden.

Jetzt gibt es noch einen Trick, mit dem wir dieses Angebot vereinfachen können, ohne viele relevante Informationen zu verlieren. Der Nenner des Gewichtsverhältnisses fungiert als Normalisierungsfaktor, so dass wir uns nicht so sehr darum kümmern, teilweise weil die endgültige Gleichung Wir werden andere Mittel haben, um das Lernen von zu regulieren neuronales Netzwerk.

Dies ist auch eine weitere Beobachtung, die wir machen können. Wir können sehen, dass die Matrix mit dem Gewicht in dieser Gleichung der Matrix des Feed-Forward-Algorithmus sehr ähnlich ist. Der Unterschied besteht darin, dass die Zeilen und Spalten gewechselt werden. In der Algebra nennen wir diese Transposition der Matrix.

Da keine 2 verschiedenen Variablen verwendet werden müssen, können wir einfach dieselbe Variable aus dem Feed-Forward-Algorithmus verwenden. Dies gibt uns die allgemeine Gleichung des Rückausbreitungsalgorithmus

Beachten Sie, dass wir im Feed-Forward-Algorithmus von der ersten bis zur letzten Schicht gehen, aber in der Back-Propagation von der letzten bis zur ersten Schicht des Netzwerks, da wir zur Berechnung des Fehlers in einer bestimmten Schicht Informationen benötigen Fehler in der nächsten Schicht.

Trending AI Artikel:

1. Wie ich maschinelles Lernen als Inspiration für physische Gemälde verwendet habe

2. MS oder Startup-Job – Welchen Weg gehen, um eine Karriere im Bereich Deep Learning aufzubauen?

3. TOP 100 Medium Artikel im Zusammenhang mit Künstlicher Intelligenz

4. Konferenz über künstliche Intelligenz

Nachdem wir nun wissen, wie die Informationen vorwärts und der Fehler rückwärts weitergegeben werden, können wir den Fehler auf jeder Ebene verwenden, um das Gewicht zu aktualisieren.

3: Aktualisieren der Gewichte

Jetzt, da wir wissen, welche Fehler ein neuronales Netzwerk auf jeder Ebene macht, können wir endlich anfangen, unserem Netzwerk beizubringen, die beste Lösung für das Problem zu finden.

Aber was ist die beste Lösung?

Der Fehler informiert uns darüber, wie falsch unsere Lösungen sind, daher wäre die beste Lösung natürlich die, bei der die Fehlerfunktion minimal ist.

Die Fehlerfunktion hängt von den Gewichten des Netzwerks ab, daher möchten wir solche Gewichtungswerte finden, die zum globalen Minimum in der Fehlerfunktion führen. Beachten Sie, dass dieses Bild nur zur Visualisierung dient. In realen Anwendungen haben wir mehr als 1 Gewicht, so dass die Fehlerfunktion eine hochdimensionale Funktion ist.

Aber wie finden wir das Minimum dieser Funktion? Eine einfache Idee hier ist, mit zufälligen Gewichten zu beginnen, die Fehlerfunktion für diese Gewichte zu berechnen und dann die Steigung dieser Funktion zu überprüfen, um bergab zu gehen.

Aber wie lernen wir die Steigung der Funktion kennen?

Wir können die lineare Algebra erneut verwenden und die Tatsache nutzen, dass die Ableitung einer Funktion an einem bestimmten Punkt gleich der Steigung einer Funktion an diesem Punkt ist. Wir können diese Ableitung wie folgt schreiben:

Wobei E unsere Fehlerfunktion ist und W die Gewichte darstellt. Diese Notation informiert uns, dass wir die Ableitung der Fehlerfunktion in Bezug auf das Gewicht finden möchten. Wir verwenden n +1 mit dem Fehler, da in unserer Notation die Ausgabe des neuronalen Netzwerks nach den Gewichten Wn auf+1 steht.

Wir können dann diese Ableitung verwenden, um das Gewicht zu aktualisieren:

Dies stellt die „bergab“ jede Lerniteration (Epoche) aktualisieren wir das Gewicht entsprechend der Steigung der Ableitung der Fehlerfunktion.

Es gibt noch eine Sache, die wir brauchen, bevor wir die endgültige Gleichung präsentieren, und das ist die Lernrate. Die Lernrate regelt, wie große Schritte wir beim Bergabfahren machen.

Wie Sie mit größerer Lernrate sehen können, machen wir größere Schritte. Dies bedeutet, dass wir schneller zum Optimum der Funktion gelangen können, aber es besteht auch eine größere Chance, dass wir es verpassen.

Mit der geringeren Lernrate machen wir kleinere Schritte, was dazu führt, dass mehr Epochen benötigt werden, um das Minimum der Funktion zu erreichen, aber es besteht eine geringere Chance, dass wir es verpassen.

Aus diesem Grund verwenden wir in der Praxis häufig eine Lernrate, die von den vorherigen Schritten abhängt, z. wenn es einen starken Trend gibt, in eine Richtung zu gehen, können wir größere Schritte unternehmen (größere Lernrate), aber wenn sich die Richtung ständig ändert, sollten wir kleinere Schritte unternehmen (kleinere Lernrate), um besser nach dem Minimum zu suchen. In unserem Beispiel nehmen wir jedoch den einfachen Ansatz und verwenden einen festen Lernratenwert. Dies gibt uns die folgende Gleichung.

Die Lernrate (Lr) ist eine Zahl in Rage 0 — 1. Je kleiner es ist, desto geringer ist die Änderung der Gewichte. Wenn das Lernen nahe bei 1 liegt. wir verwenden den vollen Wert der Ableitung, um die Gewichte zu aktualisieren, und wenn er nahe bei 0 liegt, verwenden wir nur einen kleinen Teil davon. Dies bedeutet, dass die Lernrate, wie der Name schon sagt, regelt, wie viel das Netzwerk in einer einzigen Iteration „lernt“.

Die Aktualisierung der Gewichte war die letzte Gleichung, die wir in unserem neuronalen Netzwerk benötigten. Es sind die Gleichungen, die für das tatsächliche Lernen des Netzwerks verantwortlich sind und dafür, dass es anstelle von Zufallswerten aussagekräftige Ausgaben liefert.

Alles zusammen

Feed-Forward

Back-Vermehrung

Aktualisierung der Gewichte

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.