Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Perzeptron-Schichten | Neural Network von Grund Auf
Einführung in Neuronale Netze mit Python

bookPerzeptron-Schichten

Perzeptron ist das einfachste neuronale Netzwerk—nur ein Neuron. Für komplexere Aufgaben wird ein mehrschichtiges Perzeptron (MLP) verwendet, das eine oder mehrere versteckte Schichten enthält, die es dem Netzwerk ermöglichen, komplexere Muster zu erlernen.

Ein MLP besteht aus:

  1. Eingabeschicht — empfängt Daten;
  2. Versteckte Schichten — extrahieren Muster;
  3. Ausgabeschicht — erzeugt Vorhersagen.

Jede Schicht enthält mehrere Neuronen; die Ausgabe einer Schicht wird zur Eingabe der nächsten.

Schicht-Gewichte und -Biases

Zuvor speicherte ein Neuron seine Gewichte als Vektor und den Bias als Skalar. Eine Schicht enthält jedoch viele Neuronen, daher werden die Gewichte zu einer Matrix, wobei jede Zeile die Gewichte eines Neurons speichert. Die Biases aller Neuronen bilden einen Vektor.

Für eine Schicht mit 3 Eingaben und 2 Neuronen:

W=[W11W12W13W21W22W23],b=[b1b2]W=\begin{bmatrix} W_{11} & W_{12} & W_{13} \\ W_{21} & W_{22} & W_{23} \end{bmatrix}, \qquad b=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix}

Hier ist WijW_{ij} das Gewicht von der jj-ten Eingabe zum ii-ten Neuron; bib_i ist der Bias des Neurons ii.

Vorwärtspropagation

Die Vorwärtspropagation aktiviert jedes Neuron, indem sie eine gewichtete Summe berechnet, den Bias addiert und die Aktivierungsfunktion anwendet.

Zuvor verwendete ein einzelnes Neuron:

[ z = W \cdot x + b ]

Da nun jede Zeile von (W) der Gewichtungsvektor eines Neurons ist, berechnet die Matrixmultiplikation zwischen der Gewichtsmatrix und dem Eingabevektor automatisch die gewichteten Summen aller Neuronen gleichzeitig.

Um die Biases zu den Ausgaben der jeweiligen Neuronen hinzuzufügen, sollte ebenfalls ein Bias-Vektor addiert werden:

Abschließend wird die Aktivierungsfunktion auf das Ergebnis angewendet — in unserem Fall Sigmoid oder ReLU. Die resultierende Formel für die Vorwärtsausbreitung in der Schicht lautet:

a=activation(Wx+b)a = activation(Wx + b)

wobei aa den Vektor der Neuronenaktivierungen (Ausgaben) bezeichnet.

Layer-Klasse

Da MLPs aus Schichten aufgebaut sind, definieren wir eine eigene Layer-Klasse. Ihre Attribute:

  • inputs: Eingabevektor (n_inputs Elemente);
  • outputs: Roh-Ausgaben der Neuronen (n_neurons Elemente);
  • weights: Gewichtsmatrix;
  • biases: Bias-Vektor;
  • activation_function: in der Schicht verwendete Aktivierungsfunktion.

Gewichte und Biases werden mit Zufallswerten aus einer gleichverteilten Verteilung in ([-1, 1]) initialisiert. inputs und outputs werden als mit Nullen gefüllte NumPy-Arrays initialisiert, um konsistente Formen für das spätere Backpropagation-Verfahren zu gewährleisten.

class Layer:
    def __init__(self, n_inputs, n_neurons, activation_function):
        self.inputs = np.zeros((n_inputs, 1))
        self.outputs = np.zeros((n_neurons, 1))
        self.weights = ...
        self.biases = ...
        self.activation = activation_function
Note
Hinweis

Das Initialisieren von inputs und outputs mit Nullen verhindert Formfehler und stellt sicher, dass die Schichten während der Vorwärts- und Rückwärtsdurchläufe konsistent bleiben.

Forward-Methode

Die Vorwärtsausbreitung einer Schicht berechnet rohe Ausgaben und wendet die Aktivierungsfunktion an:

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs: weighted sum + bias
    self.outputs = ...
    # Apply activation
    return ...

Das Umformen der Eingabe in einen Spaltenvektor stellt sicher, dass sie korrekt mit der Gewichtsmatrix multipliziert wird und die erwarteten Dimensionen im gesamten Netzwerk erfüllt.

Note
Hinweis

Auf Wunsch kann ich dies auch weiter kürzen, ein Diagramm der Schichtstruktur erstellen oder den vollständigen funktionierenden Code für die Layer-Klasse generieren.

1. Was macht ein Multilayer-Perzeptron (MLP) leistungsfähiger als ein einfaches Perzeptron?

2. Warum ist es notwendig, diesen Code auszuführen, bevor inputs mit der Gewichtsmatrix multipliziert werden?

question mark

Was macht ein Multilayer-Perzeptron (MLP) leistungsfähiger als ein einfaches Perzeptron?

Select the correct answer

question mark

Warum ist es notwendig, diesen Code auszuführen, bevor inputs mit der Gewichtsmatrix multipliziert werden?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3

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 explain how the weights and biases are initialized in the Layer class?

What activation functions can I use in the Layer class?

Can you walk me through how forward propagation works step by step?

Awesome!

Completion rate improved to 4

bookPerzeptron-Schichten

Swipe um das Menü anzuzeigen

Perzeptron ist das einfachste neuronale Netzwerk—nur ein Neuron. Für komplexere Aufgaben wird ein mehrschichtiges Perzeptron (MLP) verwendet, das eine oder mehrere versteckte Schichten enthält, die es dem Netzwerk ermöglichen, komplexere Muster zu erlernen.

Ein MLP besteht aus:

  1. Eingabeschicht — empfängt Daten;
  2. Versteckte Schichten — extrahieren Muster;
  3. Ausgabeschicht — erzeugt Vorhersagen.

Jede Schicht enthält mehrere Neuronen; die Ausgabe einer Schicht wird zur Eingabe der nächsten.

Schicht-Gewichte und -Biases

Zuvor speicherte ein Neuron seine Gewichte als Vektor und den Bias als Skalar. Eine Schicht enthält jedoch viele Neuronen, daher werden die Gewichte zu einer Matrix, wobei jede Zeile die Gewichte eines Neurons speichert. Die Biases aller Neuronen bilden einen Vektor.

Für eine Schicht mit 3 Eingaben und 2 Neuronen:

W=[W11W12W13W21W22W23],b=[b1b2]W=\begin{bmatrix} W_{11} & W_{12} & W_{13} \\ W_{21} & W_{22} & W_{23} \end{bmatrix}, \qquad b=\begin{bmatrix} b_1 \\ b_2 \end{bmatrix}

Hier ist WijW_{ij} das Gewicht von der jj-ten Eingabe zum ii-ten Neuron; bib_i ist der Bias des Neurons ii.

Vorwärtspropagation

Die Vorwärtspropagation aktiviert jedes Neuron, indem sie eine gewichtete Summe berechnet, den Bias addiert und die Aktivierungsfunktion anwendet.

Zuvor verwendete ein einzelnes Neuron:

[ z = W \cdot x + b ]

Da nun jede Zeile von (W) der Gewichtungsvektor eines Neurons ist, berechnet die Matrixmultiplikation zwischen der Gewichtsmatrix und dem Eingabevektor automatisch die gewichteten Summen aller Neuronen gleichzeitig.

Um die Biases zu den Ausgaben der jeweiligen Neuronen hinzuzufügen, sollte ebenfalls ein Bias-Vektor addiert werden:

Abschließend wird die Aktivierungsfunktion auf das Ergebnis angewendet — in unserem Fall Sigmoid oder ReLU. Die resultierende Formel für die Vorwärtsausbreitung in der Schicht lautet:

a=activation(Wx+b)a = activation(Wx + b)

wobei aa den Vektor der Neuronenaktivierungen (Ausgaben) bezeichnet.

Layer-Klasse

Da MLPs aus Schichten aufgebaut sind, definieren wir eine eigene Layer-Klasse. Ihre Attribute:

  • inputs: Eingabevektor (n_inputs Elemente);
  • outputs: Roh-Ausgaben der Neuronen (n_neurons Elemente);
  • weights: Gewichtsmatrix;
  • biases: Bias-Vektor;
  • activation_function: in der Schicht verwendete Aktivierungsfunktion.

Gewichte und Biases werden mit Zufallswerten aus einer gleichverteilten Verteilung in ([-1, 1]) initialisiert. inputs und outputs werden als mit Nullen gefüllte NumPy-Arrays initialisiert, um konsistente Formen für das spätere Backpropagation-Verfahren zu gewährleisten.

class Layer:
    def __init__(self, n_inputs, n_neurons, activation_function):
        self.inputs = np.zeros((n_inputs, 1))
        self.outputs = np.zeros((n_neurons, 1))
        self.weights = ...
        self.biases = ...
        self.activation = activation_function
Note
Hinweis

Das Initialisieren von inputs und outputs mit Nullen verhindert Formfehler und stellt sicher, dass die Schichten während der Vorwärts- und Rückwärtsdurchläufe konsistent bleiben.

Forward-Methode

Die Vorwärtsausbreitung einer Schicht berechnet rohe Ausgaben und wendet die Aktivierungsfunktion an:

def forward(self, inputs):
    self.inputs = np.array(inputs).reshape(-1, 1)
    # Raw outputs: weighted sum + bias
    self.outputs = ...
    # Apply activation
    return ...

Das Umformen der Eingabe in einen Spaltenvektor stellt sicher, dass sie korrekt mit der Gewichtsmatrix multipliziert wird und die erwarteten Dimensionen im gesamten Netzwerk erfüllt.

Note
Hinweis

Auf Wunsch kann ich dies auch weiter kürzen, ein Diagramm der Schichtstruktur erstellen oder den vollständigen funktionierenden Code für die Layer-Klasse generieren.

1. Was macht ein Multilayer-Perzeptron (MLP) leistungsfähiger als ein einfaches Perzeptron?

2. Warum ist es notwendig, diesen Code auszuführen, bevor inputs mit der Gewichtsmatrix multipliziert werden?

question mark

Was macht ein Multilayer-Perzeptron (MLP) leistungsfähiger als ein einfaches Perzeptron?

Select the correct answer

question mark

Warum ist es notwendig, diesen Code auszuführen, bevor inputs mit der Gewichtsmatrix multipliziert werden?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
some-alt