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.

Wir möchten zunächst ein neuronales Netzwerk mit einem einzelnen Neuron erstellen. Als Beispiel nehmen wir eine binäre Klassifizierungsaufgabe, wie etwa die Spam-Erkennung, bei der 0 für eine Ham-E-Mail (keine Spam-E-Mail) und 1 für eine Spam-E-Mail steht.

Das Neuron erhält numerische Merkmale zu E-Mails als Eingaben und erzeugt eine Ausgabe zwischen 0 und 1, die die Wahrscheinlichkeit angibt, dass eine E-Mail Spam ist.

Der Ablauf Schritt für Schritt:

  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 zusätzlicher Parameter, der sogenannte Bias, wird zur Eingabesumme addiert. Der Bias ermöglicht es dem Neuron, seine Ausgabe nach oben oder unten zu verschieben und verleiht dem Modell Flexibilität;
  4. Die Eingabesumme wird anschließend durch eine Aktivierungsfunktion geleitet. Da wir nur ein einzelnes Neuron haben, das direkt die endgültige Ausgabe (eine Wahrscheinlichkeit) erzeugt, verwenden wir die Sigmoid-Funktion, die Werte in den Bereich (0,1)(0, 1) komprimiert.
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 mit kleinen Werten zwischen -1 und 1 aus einer gleichverteilten Zufallsverteilung initialisiert werden, 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 Zufallsverteilung im Bereich [low, high) zu erzeugen.

import numpy as np

np.random.uniform(low, high, size=...)

Vorwärtspropagation

Zusätzlich sollte die Klasse Neuron eine Methode activate() enthalten, die die gewichtete Summe der Eingaben berechnet und die Aktivierungsfunktion (in unserem Fall Sigmoid) anwendet.

Tatsächlich kann, wenn zwei Vektoren gleicher Länge (weights und inputs) vorliegen, die gewichtete Summe durch das Skalarprodukt dieser Vektoren berechnet werden:

Dies ermöglicht es, die gewichtete Summe in einer einzigen Codezeile mit der Funktion numpy.dot() zu 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 gleich zz gesetzt wird, falls dieser positiv ist, und ansonsten 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 statt 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 statt 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 random initialization?

How does the activate method work in practice?

Can you explain why we use the sigmoid function for binary classification?

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.

Wir möchten zunächst ein neuronales Netzwerk mit einem einzelnen Neuron erstellen. Als Beispiel nehmen wir eine binäre Klassifizierungsaufgabe, wie etwa die Spam-Erkennung, bei der 0 für eine Ham-E-Mail (keine Spam-E-Mail) und 1 für eine Spam-E-Mail steht.

Das Neuron erhält numerische Merkmale zu E-Mails als Eingaben und erzeugt eine Ausgabe zwischen 0 und 1, die die Wahrscheinlichkeit angibt, dass eine E-Mail Spam ist.

Der Ablauf Schritt für Schritt:

  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 zusätzlicher Parameter, der sogenannte Bias, wird zur Eingabesumme addiert. Der Bias ermöglicht es dem Neuron, seine Ausgabe nach oben oder unten zu verschieben und verleiht dem Modell Flexibilität;
  4. Die Eingabesumme wird anschließend durch eine Aktivierungsfunktion geleitet. Da wir nur ein einzelnes Neuron haben, das direkt die endgültige Ausgabe (eine Wahrscheinlichkeit) erzeugt, verwenden wir die Sigmoid-Funktion, die Werte in den Bereich (0,1)(0, 1) komprimiert.
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 mit kleinen Werten zwischen -1 und 1 aus einer gleichverteilten Zufallsverteilung initialisiert werden, 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 Zufallsverteilung im Bereich [low, high) zu erzeugen.

import numpy as np

np.random.uniform(low, high, size=...)

Vorwärtspropagation

Zusätzlich sollte die Klasse Neuron eine Methode activate() enthalten, die die gewichtete Summe der Eingaben berechnet und die Aktivierungsfunktion (in unserem Fall Sigmoid) anwendet.

Tatsächlich kann, wenn zwei Vektoren gleicher Länge (weights und inputs) vorliegen, die gewichtete Summe durch das Skalarprodukt dieser Vektoren berechnet werden:

Dies ermöglicht es, die gewichtete Summe in einer einzigen Codezeile mit der Funktion numpy.dot() zu 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 gleich zz gesetzt wird, falls dieser positiv ist, und ansonsten 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 statt 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 statt 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