Implementierung Eines Einzelnen Neurons
Ein Neuron ist die grundlegende Recheneinheit eines neuronalen Netzwerks. Es verarbeitet mehrere Eingaben und erzeugt eine einzelne Ausgabe, wodurch das Netzwerk lernen und Vorhersagen treffen kann.
In diesem Beispiel besteht das Ziel darin, ein neuronales Netzwerk mit einem einzelnen Neuron zu erstellen. Es wird für eine binäre Klassifikationsaufgabe verwendet, wie zum Beispiel die Erkennung von Spam, wobei 0 einer Ham-E-Mail (Nicht-Spam) und 1 einer Spam-E-Mail entspricht.
Das Neuron erhält als Eingaben numerische Merkmale, die aus E-Mails extrahiert wurden, und erzeugt eine Ausgabe zwischen 0 und 1, die die Wahrscheinlichkeit angibt, dass eine bestimmte E-Mail Spam ist.
Der Ablauf im Einzelnen:
- Jede Eingabe wird mit einem entsprechenden Gewicht multipliziert; die Gewichte sind lernbare Parameter, die die Bedeutung jeder Eingabe bestimmen;
- Alle gewichteten Eingaben werden aufsummiert;
- Ein Bias-Term wird zur Eingabesumme addiert, wodurch das Neuron seine Ausgabe verschieben kann und das Modell zusätzliche Flexibilität erhält;
- Die Summe wird durch eine Aktivierungsfunktion geleitet. Da ein einzelnes Neuron direkt die endgültige Ausgabe (eine Wahrscheinlichkeit) erzeugt, wird die Sigmoid-Funktion verwendet, um Werte in den Bereich (0,1) zu komprimieren.
Bias des Neurons ist ebenfalls ein trainierbarer Parameter.
Neuron-Klasse
Ein Neuron muss seine Gewichte und den Bias speichern, wodurch sich eine Klasse als natürliche Möglichkeit zur Gruppierung dieser zusammengehörigen Eigenschaften anbietet.
Auch wenn diese Klasse nicht Teil der endgültigen Implementierung des neuronalen Netzes sein wird, veranschaulicht sie dennoch wichtige Prinzipien.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: Eine Liste von zufällig initialisierten Werten, die bestimmen, wie wichtig jeder Eingang (n_inputsist die Anzahl der Eingänge) für das Neuron ist;bias: Ein zufällig initialisierter Wert, der dem Neuron hilft, flexible Entscheidungen zu treffen.
Gewichte und Bias sollten zufällig initialisiert werden, mit kleinen Werten zwischen -1 und 1, gezogen aus einer gleichverteilten Verteilung, um Symmetrie zu brechen und sicherzustellen, dass verschiedene Neuronen unterschiedliche Merkmale lernen.
Zur Wiederholung: NumPy stellt die Funktion random.uniform() bereit, um eine Zufallszahl oder ein Array (durch Angabe des Arguments size) von Zufallszahlen aus einer gleichverteilten Verteilung im Bereich [low, high) zu erzeugen.
import numpy as np
np.random.uniform(low, high, size=...)
Vorwärtspropagation
Die Klasse Neuron sollte eine Methode activate() enthalten, die die gewichtete Summe der Eingaben berechnet und anschließend die Aktivierungsfunktion (in diesem Fall die Sigmoid-Funktion) anwendet.
Wenn zwei Vektoren gleicher Länge — weights und inputs — vorliegen, kann die gewichtete Summe effizient mit dem Skalarprodukt dieser Vektoren berechnet werden.
Damit lässt sich die gewichtete Summe in einer einzigen Codezeile mit der Funktion numpy.dot() berechnen, wodurch eine Schleife überflüssig wird. Der Bias kann dann direkt zum Ergebnis addiert werden, um input_sum_with_bias zu erhalten. Die Ausgabe wird anschließend durch Anwendung der Sigmoid-Aktivierungsfunktion berechnet:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Aktivierungsfunktionen
Die Formel für die Sigmoid-Funktion lautet wie folgt, wobei z die gewichtete Summe der Eingaben mit hinzugefügtem Bias (Rohwertausgabe) für dieses spezielle Neuron darstellt:
σ(z)=1+e−z1Mit dieser Formel kann die Sigmoid-Funktion als einfache Funktion in Python implementiert werden:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
Die Formel für die ReLU-Funktion ist wie folgt, wobei der Ausgabewert im Wesentlichen auf z gesetzt wird, wenn dieser positiv ist, und andernfalls auf 0:
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Welche Rolle spielt der Bias-Term in einem einzelnen Neuron?
2. Warum initialisieren wir Gewichte mit kleinen Zufallswerten anstatt mit Nullen?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you show me how to complete the Neuron class with the random initialization?
How do I use the activate method with some example inputs?
What is the difference between using sigmoid and ReLU in this context?
Awesome!
Completion rate improved to 4
Implementierung Eines Einzelnen Neurons
Swipe um das Menü anzuzeigen
Ein Neuron ist die grundlegende Recheneinheit eines neuronalen Netzwerks. Es verarbeitet mehrere Eingaben und erzeugt eine einzelne Ausgabe, wodurch das Netzwerk lernen und Vorhersagen treffen kann.
In diesem Beispiel besteht das Ziel darin, ein neuronales Netzwerk mit einem einzelnen Neuron zu erstellen. Es wird für eine binäre Klassifikationsaufgabe verwendet, wie zum Beispiel die Erkennung von Spam, wobei 0 einer Ham-E-Mail (Nicht-Spam) und 1 einer Spam-E-Mail entspricht.
Das Neuron erhält als Eingaben numerische Merkmale, die aus E-Mails extrahiert wurden, und erzeugt eine Ausgabe zwischen 0 und 1, die die Wahrscheinlichkeit angibt, dass eine bestimmte E-Mail Spam ist.
Der Ablauf im Einzelnen:
- Jede Eingabe wird mit einem entsprechenden Gewicht multipliziert; die Gewichte sind lernbare Parameter, die die Bedeutung jeder Eingabe bestimmen;
- Alle gewichteten Eingaben werden aufsummiert;
- Ein Bias-Term wird zur Eingabesumme addiert, wodurch das Neuron seine Ausgabe verschieben kann und das Modell zusätzliche Flexibilität erhält;
- Die Summe wird durch eine Aktivierungsfunktion geleitet. Da ein einzelnes Neuron direkt die endgültige Ausgabe (eine Wahrscheinlichkeit) erzeugt, wird die Sigmoid-Funktion verwendet, um Werte in den Bereich (0,1) zu komprimieren.
Bias des Neurons ist ebenfalls ein trainierbarer Parameter.
Neuron-Klasse
Ein Neuron muss seine Gewichte und den Bias speichern, wodurch sich eine Klasse als natürliche Möglichkeit zur Gruppierung dieser zusammengehörigen Eigenschaften anbietet.
Auch wenn diese Klasse nicht Teil der endgültigen Implementierung des neuronalen Netzes sein wird, veranschaulicht sie dennoch wichtige Prinzipien.
class Neuron:
def __init__(self, n_inputs):
self.weights = ...
self.bias = ...
weights: Eine Liste von zufällig initialisierten Werten, die bestimmen, wie wichtig jeder Eingang (n_inputsist die Anzahl der Eingänge) für das Neuron ist;bias: Ein zufällig initialisierter Wert, der dem Neuron hilft, flexible Entscheidungen zu treffen.
Gewichte und Bias sollten zufällig initialisiert werden, mit kleinen Werten zwischen -1 und 1, gezogen aus einer gleichverteilten Verteilung, um Symmetrie zu brechen und sicherzustellen, dass verschiedene Neuronen unterschiedliche Merkmale lernen.
Zur Wiederholung: NumPy stellt die Funktion random.uniform() bereit, um eine Zufallszahl oder ein Array (durch Angabe des Arguments size) von Zufallszahlen aus einer gleichverteilten Verteilung im Bereich [low, high) zu erzeugen.
import numpy as np
np.random.uniform(low, high, size=...)
Vorwärtspropagation
Die Klasse Neuron sollte eine Methode activate() enthalten, die die gewichtete Summe der Eingaben berechnet und anschließend die Aktivierungsfunktion (in diesem Fall die Sigmoid-Funktion) anwendet.
Wenn zwei Vektoren gleicher Länge — weights und inputs — vorliegen, kann die gewichtete Summe effizient mit dem Skalarprodukt dieser Vektoren berechnet werden.
Damit lässt sich die gewichtete Summe in einer einzigen Codezeile mit der Funktion numpy.dot() berechnen, wodurch eine Schleife überflüssig wird. Der Bias kann dann direkt zum Ergebnis addiert werden, um input_sum_with_bias zu erhalten. Die Ausgabe wird anschließend durch Anwendung der Sigmoid-Aktivierungsfunktion berechnet:
def activate(self, inputs):
input_sum_with_bias = ...
output = ...
return output
Aktivierungsfunktionen
Die Formel für die Sigmoid-Funktion lautet wie folgt, wobei z die gewichtete Summe der Eingaben mit hinzugefügtem Bias (Rohwertausgabe) für dieses spezielle Neuron darstellt:
σ(z)=1+e−z1Mit dieser Formel kann die Sigmoid-Funktion als einfache Funktion in Python implementiert werden:
def sigmoid(z):
return 1 / (1 + np.exp(-z))
Die Formel für die ReLU-Funktion ist wie folgt, wobei der Ausgabewert im Wesentlichen auf z gesetzt wird, wenn dieser positiv ist, und andernfalls auf 0:
ReLU(z)=max(0,z)def relu(z):
return np.maximum(0, z)
1. Welche Rolle spielt der Bias-Term in einem einzelnen Neuron?
2. Warum initialisieren wir Gewichte mit kleinen Zufallswerten anstatt mit Nullen?
Danke für Ihr Feedback!