Backpropagation vereinfacht!. Kern des Deep Learning | von Jay Muthialu | Juni 2023

0
25


Als ich vor ein paar Jahren meine Reise zum maschinellen Lernen begann, struggle ich neugierig zu erfahren, wie die Maschinen „lernen“. Was genau „lernen“ sie? Lernt es wirklich oder ist es eine Artwork mathematischer Brute-Pressure-Algorithmus, der uns die Antworten liefert? Ich habe Unmengen von Artikeln aus dem Web durchforstet, mehrere Kurse besucht und mittlere Beiträge gelesen, aber immer noch keine überzeugende Antwort erhalten.

Ich habe festgestellt, dass die meisten Artikel, die ich gelesen habe, die Grundlagen im Element vermitteln, aber wenn es um die Kernfunktionalität geht, neigen sie dazu, sofort komplex zu werden, wie eine Schrittfunktion, und sie erklären auch nicht in einfachen Worten mit den richtigen Daten einstellen oder mit einem Code zum Ausprobieren. Ich habe mich mit diesem Thema ein wenig schwergetan, aber mit der Zeit konnte ich die Dinge zusammenfügen und jetzt habe ich ein ziemlich gutes Verständnis und dieser Beitrag ist geboren!

Das Kernkonzept des maschinellen Lernens ist „Backpropagation“. Dies ist einer der wenigen Algorithmen, die Maschinen zum „Lernen“ bringen und in den vielen KI/ML-Anwendungen von heute weit verbreitet sind.

Für wen ist das gedacht?

Dieser Artikel konzentriert sich darauf, die Rückausbreitung in einfachen Worten zu erklären, damit er jedem helfen kann, der die gleichen Herausforderungen hatte wie ich. Sie können den Code herunterladen und ihn selbst mit einem echten Datensatz ausprobieren.

In diesem Beitrag werden jedoch nicht die Grundlagen von ML behandelt, da es zahlreiche Artikel/ChatGPT gibt, die diesem Zweck dienen. Wenn Sie ein absoluter ML-Neuling sind, empfehle ich Ihnen, diesen Beitrag mit einem Lesezeichen zu versehen und ihn erneut zu besuchen, wenn Sie den Teich für Neulinge überquert haben, oder es jetzt auszuprobieren und zu sehen, ob es hilft!

Code-Obtain

Github: https://github.com/jmuthialu/BackPropBinaryClassification

Wenn wir einem neuronalen Netzwerk Eingaben X (X ⋲ R) bereitstellen, erhalten wir eine Ausgabe y (y ⋲ R). Die Daten fließen von hyperlinks nach rechts durch das Netzwerk. Dies wird als „Vorwärtsausbreitung“ bezeichnet. Die Ausgabe ist die „Vorhersage“. Dies wird anhand der Zielbezeichnungen validiert und der Verlust (auch Differenz genannt) wird berechnet.

Wenn der Verlust sehr gering ist, können wir sagen, dass unser Netzwerk genaue Vorhersagen treffen kann. Wenn der Verlust hoch ist, könnte dies bedeuten, dass das Netzwerk nicht richtig modelliert ist. Unser Ziel ist es, das Netzwerk so zu optimieren, dass der Verlust minimal ist.

Wie reduzieren wir den Verlust? Wir geben den Verlust von rechts nach hyperlinks rückwärts an das Netzwerk weiter und berechnen die Gewichte neu. Wir machen das eine Million Mal (nicht wörtlich) und wenn es richtig gemacht wird, hätte es wahrscheinlich die richtigen Gewichte, die eine Vorhersage mit akzeptabler Genauigkeit ermöglichen.

Klassifizierung eines neuronalen Netzwerks anhand des Iris-Datensatzes

Wir werden einen Klassifizierungsalgorithmus für den Iris-Datensatz verwenden, um Pflanzen zu klassifizieren und das Konzept zu erklären. Dies ist ein beliebter Datensatz, der in vielen ML-Anwendungen wie Clustering, Hauptkomponenten, Assist-Vektor-Maschinen, Naive Bayes und natürlich in unserem eigenen Klassifizierungsproblem verwendet wird.

Dieser Datensatz enthält Informationen über drei verschiedene Arten von Irispflanzen, Iris Versicolor, Iris Setosa und Iris Virginica. Forscher fanden heraus, dass Irisarten anhand von nur vier Merkmalen, der Höhe und Breite der Blütenblätter und Kelchblätter, klassifiziert werden können! Der Datensatz enthält 50 Proben von jeder Artwork und ist somit ein einfacher und effektiver Datensatz zur Erklärung von Backprops.

Quelle: Maschinelles Lernen in R

Lassen Sie uns die Daten anhand der Höhe und Breite des Kelchblatts und der Höhe und Breite des Blütenblatts visualisieren. Wie Sie sehen, handelt es sich bei den Daten größtenteils um linear trennbare Daten, die ideally suited für unser einfaches Netzwerk sind.

Wenn ich dies für eine echte Anwendung mache, würde ich wahrscheinlich die folgende Architektur verwenden, sie mit dem Adam-Optimierer kompilieren und Kreuzentropie als Verlustfunktion verwenden.

  • Eingabeebene: 4 Einheiten
  • Versteckte Ebene: 10 Einheiten mit ReLU
  • Ausgabeschicht: 3 Einheiten mit Softmax

Dieses Netzwerk wird uns Ergebnisse mit hoher Genauigkeit liefern, aber es wird übermäßig komplex sein, die Mechanik des Backprops durchzugehen. Ich werde das Modell additionally auf das Wesentliche vereinfachen, aber das wird auch zu einer Verringerung der Genauigkeit führen.

Lassen Sie uns die verborgene Schicht loswerden und die Problemstellung von der Mehrklassenklassifizierung in eine binäre Klassifizierung ändern, die ein einzelnes Neuron mit Sigmoidaktivierung und Kreuzentropieverlust aufweist. Dieses Netzwerk identifiziert nur Iris Setosa, wie im Bild unten gezeigt.

Einzelneuronenarchitektur

Wie bereits erwähnt, besteht unser Ziel darin, den Verlust durch Gewichtsanpassung zu reduzieren. Zur Veranschaulichung habe ich ein Trainingsbeispiel aus dem Trainingsdatensatz genommen und die Berechnung in einer der Epochen eingefroren, damit wir die Gewichtungen und Verluste gegenüber dem Ziel beobachten können (lassen Sie uns vorerst die Verzerrung ignorieren).

Der Verlust beträgt 0,799555. Wie kommen wir so nahe an 0? Wir können die Gewichte manuell anpassen und die Vorwärtsausbreitung erneut ausführen, bis sie 0 wird. Das ist möglich, aber wir werden es für immer tun und es wird als „Handlernen“ bezeichnet.

Ein besserer Weg, dies zu lösen, ist die Verwendung partieller Differentialgleichungen. Was wir finden müssen, ist dl/dw Das ist im Grunde eine Verluständerung bei einer kleinen Gewichtsänderung. Wir werden dann den Gradientenabstieg verwenden, um die lokalen Minima zu ermitteln und das Netzwerk zu optimieren.

Schauen wir uns jede Ableitung an.

∂L/∂a: Bezieht sich auf die partielle Ableitung des Verlusts in Bezug auf die Aktivierungsfunktion. Die binäre Kreuzentropieverlustfunktion ist definiert als:

∂a/∂z: Bezieht sich auf die partielle Ableitung der Aktivierungsfunktion nach z

∂z/∂w: Bezieht sich auf die partielle Ableitung von z in Bezug auf die Gewichte w

z = wX+b und seine Ableitung ist einfach X.

Durch die Kombination aller partiellen Ableitungen erhalten wir

In ähnlicher Weise finden wir durch Anwendung der Kettenregel

Sobald wir dL/dw und dL/db abgeleitet haben, können wir einen Gradientenabstieg durchführen, um die aktualisierten Gewichte wie folgt zu ermitteln

w und b werden gleichzeitig aktualisiert

Lassen Sie uns die aktualisierten Gewichte einbinden und die Vorwärtsausbreitung erneut ausführen. Jetzt können wir sehen, dass der neue Verlust 0,799945 beträgt, was einer Reduzierung um 0,00001 in einer Epoche entspricht!

Jetzt müssen wir nur noch diesen Zyklus durchlaufen, bis das Modell konvergiert!

for epoch in vary(10000):
# Ahead propagation
z = np.dot(X_train, weights) + bias
output = sigmoid(z)

# Compute the error
error = cross_entropy_loss(y_train, output)

# Backward propagation

d_output = cross_entropy_loss_derivative(y_train, output) * sigmoid_derivative(output)
weights -= alpha * np.dot(X_train.T, d_output)
bias -= alpha * np.sum(d_output, axis=0, keepdims=True)

# Print error each 1000 epochs
if epoch % 100 == 0:
print('Epoch %d error: %.4f' % (epoch, error))

print("Coaching accomplished")

# Check the mannequin
z_test = np.dot(X_test, weights) + bias
output_test = sigmoid(z_test)
predictions = output_test > 0.5
accuracy = np.imply(predictions == y_test)
print(f"Accuracy: {accuracy * 100:.2f}%")

Hoffentlich verstehen wir jetzt (zumindest teilweise), wie Backprop mit einem einfachen einzelnen Neuron funktioniert. Aber wie funktioniert das, wenn es mehrere Neuronen gibt? Im Prinzip ist es dasselbe: Wenden Sie die Kettenregel rekursiv auf alle Gewichte von rechts nach hyperlinks an und aktualisieren Sie Gewichte und Verzerrungen. Da es sich um viele komplexe Berechnungen handelt, überlassen wir es den Pytorches und Tensorflows, sie für uns zu erledigen.

Hoffentlich konnte ich einige grundlegende Aspekte der Rückenstütze abdecken. Ich bin mir bewusst, dass ich nicht genug behandelt habe, um ein umfassendes Verständnis zu erlangen, da mehr als nur ein einfacher mittlerer Beitrag erforderlich ist.

Und zum Schluss noch meine Gedanken zum Teil „Lernen“? Basierend auf meinen eigenen Forschungen verfügen Menschen nicht über die Artwork des Lernens mit Hilfe von Rückenstützen (Gott sei Dank!). Unser Lernen ist ziemlich komplex und wird von Forschern bisher nicht sehr intestine verstanden. Dennoch denke ich, dass dies eine andere Artwork des Lernens ist, die wirklich bahnbrechend ist.

Es gibt andere konkurrierende Algorithmen, und es wird immer mehr daran geforscht, Backprop durch etwas anderes zu ersetzen, das hinsichtlich des Stromverbrauchs effizienter ist und weitaus weniger Daten benötigt. Ich denke, das wird uns der AGI einen Schritt näher bringen.

Vielen Dank für das Lesen dieses Beitrags!



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here