Die Mathematik hinter künstlichen neuronalen Netzen – mit einem Beispielproblem

Dec 27 2022
Einleitung Künstliche neuronale Netze sind eine Methode, die vom menschlichen Gehirn abgeleitet wurde, einem System, das noch nicht vollständig verstanden wurde. Das menschliche Gehirn ist der komplexeste Teil des menschlichen Körpers, es ist die Gesamtheit der Intelligenz, der Dolmetscher der Sinne, der Initiator der Körperbewegung und der Kontrolleur des Verhaltens.
Neuronale Netze versuchen, das Gehirn zu simulieren, indem sie Daten durch Schichten künstlicher Neuronen verarbeiten. MF3d / E+ über Getty Images

Einführung

Künstliche neuronale Netze sind eine Methode, die vom menschlichen Gehirn abgeleitet wurde, einem System, das noch nicht vollständig verstanden wurde. Das menschliche Gehirn ist der komplexeste Teil des menschlichen Körpers, es ist die Gesamtheit der Intelligenz, der Dolmetscher der Sinne, der Initiator der Körperbewegung und der Kontrolleur des Verhaltens. Dies macht das menschliche Gehirn zu einem faszinierenden System, das in der Computerwelt nachgeahmt werden kann (Brain Basics, 2022)

Künstliche neuronale Netze sind wichtig, weil sie Computern dabei helfen, intelligente Entscheidungen mit wenig menschlicher Hilfe zu treffen. Sie sind nichtlineare statistische Modelle, die Muster aus der Beziehung zwischen Inputs und Outputs lernen und aufdecken.

Ich werde die Mathematik und das Rechnen hinter künstlichen neuronalen Netzen erörtern, einschließlich Nicht-Zahlen-Beispielen und Beispielen mit Zahlen. Und die Teile, aus denen künstliche neuronale Netze bestehen, von Komponenten bis hin zu Lernalgorithmen.

1. Komponenten

Künstliche neuronale Netze umfassen eine breite Palette von Modellen mit vielen verschiedenen Stärken und Verwendungsmöglichkeiten für Anwendungen auf reale Probleme. In diesem Artikel werde ich auf das Multilayer Perceptron (MLPs), auch Deep Feed Forward Neural Networks (DFF) genannt, eingehen; die für Deep Learning bekannt ist. Anwendungen, die dieses Netzwerk verwenden, sind Spracherkennung, maschinelle Übersetzung und komplexe Klassifizierung.

Unten ist ein Diagramm, das ein MLP eines künstlichen neuronalen Netzwerks zeigt.

Wie das Diagramm zeigt, gibt es in diesem Beispiel fünf Komponenten; Input-Neuronen (x-blau), versteckte Neuronen (h-gelb), Bias-Neuronen (b-rot), Output-Neuronen (y-grün) und Gewicht (Linienverbindungen).

Ein Bais-Neuron ist keine notwendige Komponente; Es ist jedoch ein sehr wichtiger Wert, der verwendet wird, um einen zusätzlichen Parameter aufzunehmen, um die Kurve positiv oder negativ zu verschieben, um die Aktivierung eines Knotens zu beschleunigen oder zu verzögern.

https://www.wovenware.com/blog/2020/07/in-machine-learning-bias-bias-and-bias-are-three-different-things/

Ein Gewicht in künstlichen neuronalen Netzen muss auf kleine zufällige Gewichte initialisiert werden, große Gewichte werden nicht bevorzugt, da sie nach der ersten Iteration zu großen Werten führen. Je größer der Wert, desto mehr Lernzeit. (Jordanien, 2018).

2. Vorwärtsausbreitung (ohne Zahlen)

Das einzelne Net Hidden Neuron wird berechnet, indem die Eingabe mit der Gewichtung multipliziert und die Abweichung addiert wird

x ~ Eingabe, w ~ Gewicht, b ~ Bais, Net.h ~ Wert des h-Neurons

Aktivierungsfunktionen werden in künstlichen neuronalen Netzwerken verwendet, um die Neuronen flexibel zu machen, was bedeutet, dass unsere linearen Werte aufgrund der Aktivierungsfunktion nichtlinear werden.

Die versteckten Neuronen sind in zwei Teile gebrochen, da wir eine nichtlineare Aktivierungsfunktion einführen. Somit werden die verborgenen Neuronen in Eingabe und Ausgabe oder (h1 oder net-h1) und (out-h1) aufgeteilt, die durch die Aktivierungsfunktion geleitet werden.

Die Aktivierungsfunktion, die ich verwenden werde, ist sigmoid.

3. Lernalgorithmus – Rückwärtsausbreitung (ohne Zahlen)

Die Rückwärtsausbreitung ist der Lernalgorithmus eines künstlichen neuronalen Netzes, er übernimmt die Fehlerrate der vorherigen Vorwärtsausbreitung. Oder mit anderen Worten, der Gradient in Bezug auf das Gewicht oder die partielle Ableitung des Gesamtfehlers in Bezug auf das Gewicht. Der Zweck besteht darin, die Gewichtungen für viele Iterationen rechnerisch zu aktualisieren, um uns die gewünschte Ausgabe zu liefern (Brief erklärt).

Zunächst einmal beginnen wir mit der Berechnung des Gesamtfehlers nach der Vorwärtsausbreitung, dies würde durch diese Formel erfolgen.

y ~ Ziel, y-Hut ~ Ausgabe

Dann wissen wir, dass wir uns mit dem Gewicht und seiner Auswirkung auf den Gesamtfehler befassen.

Dies erfolgt durch Rückwärtsausbreitung von den Ausgangsneuronen, die durch die Vorwärtsausbreitung berechnet wurden, zu den zweiten verborgenen Neuronen.

Dies geschieht mit Hilfe dieser Formel, die gebrochen und vereinfacht wird,

*Dies muss für alle Gewichte durchgeführt werden.

Wir nehmen jeden Bruch und vereinfachen ihn einzeln,

Teil 1:

Kann auch geschrieben werden als

Teil 2:

Teil 3:

Wenn wir die Brüche einzeln vereinfachen und dann multiplizieren, erhalten wir die partielle Ableitung des Gesamtfehlers in Bezug auf das Gewicht.

4. Optimierungsalgorithmus (ohne Zahlen)

Schließlich müssen wir vor dem Aktualisieren der Gewichte wissen, wie wir die besten Gewichte am besten auswählen. Dies erfolgt durch Gradientenabstieg (Optimierungsalgorithmus), wobei der beste Parameter gefunden wird, der den Gradienten in Bezug auf das Gewicht minimiert. Wir werden auch die Lernrate (Alpha) verwenden, die verwendet wird, um die Gewichte während des Abstiegs zu skalieren.

w+ ~ neues Gewicht, w ~ eines der Gewichte, Alpha = 0,5

Beispiel (mit Zahlen)

In diesem Beispiel haben wir 2 Eingänge, 1 verborgene Schicht und 2 Ausgänge. Wir lösen dies mit den gegebenen Werten.

Ich zeige die Arbeit, indem ich die erste Iteration berechne,

# Value table
x1, x2 = 0.05, 0.10 # Input
w1, w2, w3, w4 = 0.15, 0.20, 0.25, 0.30 # Weights
w5, w6, w7, w8 = 0.40, 0.45, 0.50, 0.55
b1, b2 = 0.35, 0.60 # bias
T1, T2 = 0.01, 0.99 # Desired outputs

# Finding the net and output vlaues of the hidden neurons
#∑xiwi+b

h1 = x1 * w1 + x2 * w2 + b1
print("Net.h1= ", h1)
outh1 = 1 / (1 + math.exp(-h1))
print("Out.h1= ",outh1)

h2 = x1 * w3 + x2 * w4 + b1
print("net.h2= ", h2)
outh2 = 1 / (1 + math.exp(-h2))
print("Out.h2= ",outh2)

y1 = outh1 * w5 + outh2 * w6 + b2
print("net.y1= ", y1)
outy1 = 1 / (1 + math.exp(-y1))
print("Out.y1= ",outy1)

y2 = outh1 * w7 + outh2 * w8 + b2
print("net.y2= ",y2)
outy2 = 1 / (1 + math.exp(-y2))
print("Out.y2= ",outy2)

Net.h1=  0.3775
Out.h1=  0.5932699921071872
net.h2=  0.39249999999999996
Out.h2=  0.596884378259767
net.y1=  1.10590596705977
Out.y1=  0.7513650695523157
net.y2=  1.2249214040964653
Out.y2=  0.7729284653214625

# Calculating the Total Error

Ey1 = ((T1 - outy1)**2) / 2
Ey2 = ((T2 - outy2)**2) / 2
print("Total Error=", Ey1 + Ey2)

Total Error= 0.2983711087600027

w_n ~ eines der Gewichte, in diesem Beispiel n=5

# Solving each fraction - The gradient with respect to the weight - Ew_i
# /= /. * . / . *  . / 
# Using w_5 as an example

F1 = -(T1 - outy1)
F2 = outy1 * (1 - outy1)
F3 = 1 * outh1
F1 = -(T1-outy1)
Ew5 = F1 * F2 * F3
print("Gradient with respect to the weight 5 = ", Ew5)

Gradient with respect to the weight 5 =  0.08216704056423078

# Updating Weights
# Learing Rate - r

r = 0.5
Neww5 = w5-r*Ew5
print ("New weight for w5 = ",Neww5)

New weight for w5 =  0.35891647971788465

Wir sollten diese Werte jedoch erhalten, wenn wir die gleichen Schritte zum Aktualisieren der Ausgabe-Gewichtungsschicht und der Eingabe-Gewichtungsschicht ausführen.

Neue Gewichte nach der ersten Iteration.

w_1 = 0.149780716
w_2 = 0.19956143
w_3 = 0.24975114
w_4 = 0.29950229
w_5= 0.35891647971788465
w_6 = 0.408666186
w_7 = 0.51130127
w_8 = 0.561370121

Arbeit prüfen.

Wir begannen mit totalem Fehler als

Total Error= 0.2983711087600027

Total Error= 0.2910277736939813

Total Error= 0.0000351085

y1=0.015912196 # vs 0.01
y2=0.984065734 # vs 0.99

Hier finden Sie weitere Informationen, wenn Sie daran interessiert sind, tiefer in die Zweige der künstlichen neuronalen Netze einzutauchen.

Verweise

Backpropagation Schritt für Schritt . (3 CE, Oktober). Hmkcode.com.https://hmkcode.com/ai/backpropagation-step-by-step/

baeldung. (2022, 29. Juni). Mehrschichtiges Perzeptron vs. Tiefes neuronales Netzwerk | Baeldung über Informatik . www.baeldung.com. https://www.baeldung.com/cs/mlp-vs-dnn

Grundlagen des Gehirns: Kennen Sie Ihr Gehirn | Nationales Institut für neurologische Erkrankungen und Schlaganfälle . (2022, 26. September). www.ninds.nih.gov. https://www.ninds.nih.gov/health-information/public-education/brain-basics/brain-basics-know-your-brain

Ableitung der Backpropagation . (nd).https://www.cs.swarthmore.edu/~meeden/cs81/s10/BackPropDeriv.pdf

Jordan, J. (2018, 2. März). Festlegen der Lernrate Ihres neuronalen Netzwerks. Jeremy Jordan.https://www.jeremyjordan.me/nn-learning-rate/

Kalita, D. (2022, 30. März). Ein Überblick und Anwendungen künstlicher neuronaler Netze . Analytik Vidhya.https://www.analyticsvidhya.com/blog/2022/03/an-overview-and-applications-of-artificial-neural-networks-ann/

Mazur. (2015, 17. März). Ein Schritt-für-Schritt-Backpropagation-Beispiel . Matt Mazur; Matt Mazur.https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/

Shi, A. (2022, 22. Februar). Wie man ein neuronales Netz als mathematische Funktion definiert . Mittel.https://towardsdatascience.com/how-to-define-a-neural-network-as-a-mathematical-function-f7b820cde3f