Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Implementierung Eines Einzelnen Neurons | Neural Network von Grund Auf
Einführung in Neuronale Netze

bookImplementierung Eines Einzelnen Neurons

Note
Definition

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:

  1. Jede Eingabe wird mit einem entsprechenden Gewicht multipliziert; die Gewichte sind lernbare Parameter, die die Bedeutung jeder Eingabe bestimmen;
  2. Alle gewichteten Eingaben werden aufsummiert;
  3. Ein Bias-Term wird zur Eingabesumme addiert, wodurch das Neuron seine Ausgabe verschieben kann und das Modell zusätzliche Flexibilität erhält;
  4. 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)(0, 1) zu komprimieren.
Note
Hinweis

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.

Note
Hinweis

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_inputs ist 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 zz die gewichtete Summe der Eingaben mit hinzugefügtem Bias (Rohwertausgabe) für dieses spezielle Neuron darstellt:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Mit 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 zz gesetzt wird, wenn dieser positiv ist, und andernfalls auf 0:

ReLU(z)=max(0,z)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?

question mark

Welche Rolle spielt der Bias-Term in einem einzelnen Neuron?

Select the correct answer

question mark

Warum initialisieren wir Gewichte mit kleinen Zufallswerten anstatt mit Nullen?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 1

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Suggested prompts:

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

bookImplementierung Eines Einzelnen Neurons

Swipe um das Menü anzuzeigen

Note
Definition

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:

  1. Jede Eingabe wird mit einem entsprechenden Gewicht multipliziert; die Gewichte sind lernbare Parameter, die die Bedeutung jeder Eingabe bestimmen;
  2. Alle gewichteten Eingaben werden aufsummiert;
  3. Ein Bias-Term wird zur Eingabesumme addiert, wodurch das Neuron seine Ausgabe verschieben kann und das Modell zusätzliche Flexibilität erhält;
  4. 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)(0, 1) zu komprimieren.
Note
Hinweis

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.

Note
Hinweis

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_inputs ist 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 zz die gewichtete Summe der Eingaben mit hinzugefügtem Bias (Rohwertausgabe) für dieses spezielle Neuron darstellt:

σ(z)=11+ez\sigma(z) = \frac1{1 + e^{-z}}

Mit 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 zz gesetzt wird, wenn dieser positiv ist, und andernfalls auf 0:

ReLU(z)=max(0,z)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?

question mark

Welche Rolle spielt der Bias-Term in einem einzelnen Neuron?

Select the correct answer

question mark

Warum initialisieren wir Gewichte mit kleinen Zufallswerten anstatt mit Nullen?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 1
some-alt