Whatsapp Telegram Telegram Call Anrufen

Einführung in Neuronale Netzwerke


Grundlagen der Neuronalen Netzwerke

Neuronale Netzwerke sind eine Klasse von Algorithmen im Bereich des maschinellen Lernens, die von der Funktionsweise des menschlichen Gehirns inspiriert sind. Sie bestehen aus verbundenen Einheiten, sogenannten Neuronen, die in Schichten organisiert sind. Diese Neuronen sind miteinander verbunden und kommunizieren miteinander, um Daten zu verarbeiten und Muster zu erkennen.

1. Aufbau eines Neuronalen Netzwerks

  1. Eingabeschicht (Input Layer): Die erste Schicht, die die Eingangsdaten empfängt.
  2. Verborgene Schichten (Hidden Layers): Eine oder mehrere Schichten, die zwischen Eingabe- und Ausgabeschicht liegen und die Hauptverarbeitung der Daten durchführen.
  3. Ausgabeschicht (Output Layer): Die letzte Schicht, die das Ergebnis der Verarbeitung liefert.

Jedes Neuron empfängt Eingaben, wendet eine gewichtete Summe auf diese Eingaben an und gibt einen Ausgabewert weiter. Diese Gewichte werden während des Trainingsprozesses angepasst, um die Leistung des Netzwerks zu optimieren.

Beispiel eines einfachen Neuronalen Netzwerks:
import tensorflow as tf
from tensorflow.keras import layers, models

# Erstellen eines einfachen neuronalen Netzwerks
model = models.Sequential([
    # Eingabeschicht (Input Layer)
    layers.Dense(64, activation='relu', input_shape=(784,)),
    
    # Verborgene Schichten (Hidden Layers)
    layers.Dense(64, activation='relu'),
    
    # Ausgabeschicht (Output Layer)
    layers.Dense(10, activation='softmax')
])

# Kompilieren des Modells
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Anzeigen der Modellzusammenfassung
model.summary()


Erklärung der Schichten:

Eingabeschicht (Input Layer):


layers.Dense(64, activation='relu', input_shape=(784,))

  • input_shape=(784,): Diese Angabe definiert die Form der Eingangsdaten. In diesem Fall handelt es sich um einen Vektor mit 784 Dimensionen, z.B. ein abgeflachtes 28x28 Pixel-Bild.
  • Dense(64): Diese Schicht hat 64 Neuronen, die voll mit den Eingabedaten verbunden sind.
  • activation='relu': Die ReLU-Aktivierungsfunktion wird auf die Ausgaben dieser Neuronen angewendet.

Verborgene Schichten (Hidden Layers):

layers.Dense(64, activation='relu')
  • Dense(64): Eine verborgene Schicht mit 64 Neuronen.
  • activation='relu': Wieder wird die ReLU-Aktivierungsfunktion verwendet, um Nichtlinearität einzuführen.

  • Ausgabeschicht (Output Layer):

    layers.Dense(10, activation='softmax')


  • Dense(10): Die Ausgabeschicht hat 10 Neuronen, was typischerweise der Anzahl der Klassen im Klassifizierungsproblem entspricht (z.B. Ziffern von 0 bis 9 im MNIST-Datensatz).
  • activation='softmax': Die Softmax-Aktivierungsfunktion wird verwendet, um Wahrscheinlichkeiten für jede der 10 Klassen zu berechnen.

  • 2. Aktivierungsfunktionen

    Aktivierungsfunktionen spielen eine entscheidende Rolle in neuronalen Netzwerken, da sie die Ausgabe eines Neurons bestimmen und Nichtlinearität einführen. Diese Nichtlinearität ermöglicht es dem Netzwerk, komplexe Muster zu lernen und darzustellen.

    Wichtige Aktivierungsfunktionen: 

    2.1 Sigmoid

    Gibt einen Wert zwischen 0 und 1 zurück.

    σ(x)=11+ex

    Vorteile:

    • Eignet sich gut für Binärklassifikationen.

    Nachteile:

    • Sättigungsproblem: Gradienten werden sehr klein, wenn der Eingangswert sehr groß oder sehr klein ist (Vanishing Gradient Problem).

    Beispiel:

    sigmoid = tf.nn.sigmoid([1.0, 2.0, 3.0])
    print(sigmoid.numpy())  # Ausgabe: [0.7310586 0.8807971 0.95257413]


    2.2 Tanh (Hyperbolische Tangens)

     Gibt einen Wert zwischen -1 und 1 zurück.

    tanh(x)=exexex+ex\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

    Vorteile:

    • Zentriert die Daten um 0, was das Training stabiler machen kann.

    Nachteile:

    • Sättigungsproblem ähnlich wie bei Sigmoid.

    Beispiel:

    tanh_func = tf.nn.tanh([1.0, 2.0, 3.0])
    print(tanh_func.numpy())  # Ausgabe: [0.7615942 0.9640276 0.9950547]


    2.3 ReLU (Rectified Linear Unit)

    Gibt den Eingabewert zurück, wenn er positiv ist, sonst 0.

    ReLU(x)=max(0,x)\text{ReLU}(x) = \max(0, x)

    Vorteile:

    • Einfach und effizient.
    • Vermeidet das Vanishing Gradient Problem weitgehend.

    Nachteile:

    • Kann zu toten Neuronen führen (Neuron gibt immer 0 aus).

    Beispiel:

    relu_func = tf.nn.relu([-1.0, 0.0, 1.0, 2.0])
    print(relu_func.numpy())  # Ausgabe: [0. 0. 1. 2.]


    2.4 Leaky ReLU:

     Eine Variante der ReLU, die auch für negative Werte einen kleinen Gradienten erlaubt.

    Leaky ReLU(x)=max(0.01x,x)








































































































    \text{Leaky ReLU}(x) = \max(0.01x, x)

    Vorteile:

    • Löst das Problem der toten Neuronen.

    Beispiel:

    leakyRelu = tf.nn.leaky_relu([-1.0, 0.0, 1.0, 2.0])
    print(leakyRelu.numpy())  # Ausgabe: [-0.01  0.    1.    2.  ]
    


    2.5 Softmax

    Wird in der Ausgabeschicht eines Klassifikationsmodells verwendet, um Wahrscheinlichkeiten zu berechnen.


    softmax(xi)=exijexj\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}

    Vorteile:

    • Liefert eine Wahrscheinlichkeitsverteilung über Klassen.

    Beispiel:

    softmax_func = tf.nn.softmax([1.0, 2.0, 3.0])
    print(softmax_func.numpy())  # Ausgabe: [0.09003057 0.24472848 0.66524094]


    Durch das Verständnis dieser Grundlagen und der Anwendung von Aktivierungsfunktionen können Sie effektiv neuronale Netzwerke entwerfen und trainieren, um komplexe Muster und Beziehungen in Daten zu erkennen. TensorFlow bietet eine benutzerfreundliche Plattform für die Implementierung und das Training solcher Modelle.



    CEO Image

    Ali Ajjoub

    info@ajjoub.com

    Adresse 0049-15773651670

    Adresse Jacob-winter-platz,1 01239 Dresden

    Buchen Sie jetzt Ihren Termin für eine umfassende und individuelle Beratung.

    Termin Buchen

    Kontaktieren Sie uns

    Lassen Sie uns K o n t a k t aufnehmen!