lernalgorithmus
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
lernalgorithmus [2025/01/22 14:38] – [Vorbereitung] torsten.roehl | lernalgorithmus [2025/01/29 10:58] (aktuell) – [Netzeingabe $net$] torsten.roehl | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Perzeptron Lernalgorithmus ====== | ====== Perzeptron Lernalgorithmus ====== | ||
- | + | //Im Folgenden wird der Lernalgorithmus für das **einfache Perzeptron** beschrieben. Um das Prinzip zu verstehen, werden lediglich zwei Eingangsneuronen und ein Ausgangsneuron verwendet. Mithilfe des Lernalgorithmus kann dann (z. B. in Java) gezeigt werden, dass einfache Probleme wie das UND-Problem gelernt werden können.// | |
- | ==== Topologie ==== | + | ===== Topologie ===== |
- | * Gegeben: | + | |
- | * Eingangsneurone $x_1$ und $x_2$ | + | |
- | * $x_3$ dieses Neuron hat __immer__ den Wert 1. | + | |
- | * ein Ausgabeneuron $y_1$ oder $o$ für **O**utput. | + | |
- | * Drei Gewichte $w_{11}$ , $w_{21}$, $w_3$ | + | |
- | * Das Gewicht $w_{31}$ hat immer den Wert $w_{31}=-0.1$ . | + | |
- | {{ : | + | |
- | ===== Forward Pass ===== | + | * **Eingangsneurone** $x_1$, |
- | Unter dem „Forward Pass“ versteht man die Berechnung der Ausgabe eines neuronalen Netzes bei gegebener Eingabe und gegebenen Gewichten. Im ersten Schritt wird die Netzeingabe | + | * Das Neuron $x_3$ hat __immer__ den Wert <color # |
- | < | + | * **Ausgabeneuron** $y_1$ oder $o$ für **O**utput. |
+ | * **Gewichte** $w_{11}$ , $w_{21}$ und $w_{31}$ | ||
+ | * Das Gewicht $w_{31}$ hat (in unserem Beispiel) immer den Wert< | ||
+ | {{ : | ||
+ | <WRAP center round tip 90%> | ||
+ | Die Schwelle θ wird durch ein konstantes Gewicht (in unserem Beispiel) $w_{31}=−0.1$ festgelegt. Nur die Gewichte $w_{11}$ und $w_{21}$ werden gelernt, um alle Trainingsmuster wiedergeben zu können. | ||
+ | |||
+ | |||
+ | Im **Perzeptron** kann anstelle der Schwelle ein Bias verwendet werden, da dieser als zusätzliches Gewicht modelliert wird, das mit einem konstanten Eingabewert von 1 multipliziert wird und dadurch die Schwelle direkt in die Gewichtsanpassung integriert. | ||
+ | |||
+ | //Der Zusammenhang zwischen Schwelle und Bias kann mathematisch gezeigt werden, was an anderer Stelle erfolgt.// | ||
+ | |||
+ | |||
+ | |||
+ | </ | ||
+ | ===== forward pass ===== | ||
+ | Unter dem „forward pass“ versteht man die Berechnung der Ausgabe eines neuronalen Netzes bei gegebener Eingabe und gegebenen Gewichten. Im ersten Schritt wird die Netzeingabe | ||
+ | < | ||
==== Netzeingabe $net$ ==== | ==== Netzeingabe $net$ ==== | ||
- | Allgemein gilt für die Netzeingabe. | + | Allgemein gilt für die Netzeingabe |
\begin{equation} net_j = \sum w_{ij} \cdot x_i \end{equation} | \begin{equation} net_j = \sum w_{ij} \cdot x_i \end{equation} | ||
Da wir nur ein Ausgabeneuron haben ist $net_j=net_1=net$ also folgt für drei Eingabeneuronen: | Da wir nur ein Ausgabeneuron haben ist $net_j=net_1=net$ also folgt für drei Eingabeneuronen: | ||
- | \begin{equation} net = \sum_1^3 w_{1j} \cdot x_i = w_{11} | + | \begin{equation} net = \sum_{i=1}^3 w_{i1} \cdot x_i = w_{11} |
+ | Dabei wird verwendet, dass $x_3=1$ gesetzt worden ist. | ||
==== Aktivierungsfunktion ==== | ==== Aktivierungsfunktion ==== | ||
- | Die Aktivierungsfunktion für // | + | Die Aktivierungsfunktion für das // |
Zeile 29: | Zeile 39: | ||
{{ : | {{ : | ||
- | === Trainingsmuster ($x_1$, | + | ===== Trainingsmuster ($x_1$, |
- | Der Perzeptron-Lernalgorithmus wird auf Trainingsmuster angewendet. Ein Trainingsmuster (//engl. Training Pattern//) besteht aus der Eingabe zusammen mit der gewünschten Ausgabe, die es zu lernen gilt. Das neuronale Netz lernt die Gewichte so anzupassen, dass alle Trainingsmuster richtig wiedergegeben werden. | + | Der Perzeptron-Lernalgorithmus wird auf Trainingsmuster angewendet. Ein Trainingsmuster (//engl. Training Pattern//) besteht aus der Eingabe zusammen mit der gewünschten Ausgabe, die es zu lernen gilt. Das neuronale Netz lernt die Gewichte so anzupassen, dass alle Trainingsmuster richtig wiedergegeben werden. |
+ | **Für das AND-Problem gibt es vier Trainingsmuster: | ||
- | * (0,0) → 0 | + | |
- | | + | ^Input^Output t^ |
- | | + | |$(0,0)$| 0| |
- | | + | |$(0,1)$| 0| |
+ | |$(1,0)$| 0| | ||
+ | |$(1,1)$| 1| | ||
+ | |||
===== Perzeptron lernen ===== | ===== Perzeptron lernen ===== | ||
- | m Folgenden wird ein Algorithmus vorgestellt, | + | |
==== Vorbereitung ==== | ==== Vorbereitung ==== | ||
* Wähle eine Lernrate $\eta$ zwischen 0 und 1, z.B. $\eta=0.1$. | * Wähle eine Lernrate $\eta$ zwischen 0 und 1, z.B. $\eta=0.1$. | ||
* Wähle zufällige Zahlen für die Gewichte $w_{ij}$ zwischen 0 und 1 für die Initialisierung. | * Wähle zufällige Zahlen für die Gewichte $w_{ij}$ zwischen 0 und 1 für die Initialisierung. | ||
- | <WRAP center round tip 90%> | + | |
- | Die Schwelle θ wird durch ein konstantes Gewicht $w_{31}=−0.1$ festgelegt. Die Gewichte $w_{11} und $w_21$ werden gelernt, um alle Trainingsmuster wiedergeben zu können. | + | |
- | </ | + | |
==== Algorithmus ==== | ==== Algorithmus ==== | ||
+ | <WRAP center round box 100%> | ||
+ | // | ||
+ | |||
- | - **forward pass** Wähle ein Trainingsmuster und berechne die Ausgabe $o$ | + | - **forward pass:** Wähle |
- | - Berechne den Fehler zwischen der gewünschten Ausgabe (**t** //für Target//) und der tatsächlicher | + | - **error: |
- | - Berechne die Gewichtsänderung $\Delta w_{ij} = \eta\cdot (o-j)\cdot x_i$ | + | - **hebb rule: |
- | - Berechne | + | - **update:** Ändere |
- Wiederhole ab Schritt 1. für eine Anzahl an Iterationen, | - Wiederhole ab Schritt 1. für eine Anzahl an Iterationen, | ||
+ | </ | ||
+ | ===== Test & Aufgaben ===== | ||
+ | - Implementieren Sie den Perzeptron-Lernalgorithmus für das UND-Problem. | ||
+ | - Überprüfen Sie, ob das UND-Problem korrekt gelernt wurde, indem Sie für alle Inputvektoren $(x_1,x_2)$ die Ausgaben berechnen. | ||
+ | - Ändern Sie die Implementierung um auch das ODER-Problem zu lernen. | ||
+ | - Wiederholen Sie das Lernen mehrmals und untersuchen Sie die gelernten Gewichte $w_{11}$ und $w_{21}$. | ||
+ | - Untersuchen Sie die Abhängigkeit der Lernrate von der Anzahl der Iterationen, | ||
+ | - Erstellen Sie hierfür einen aussagekräftigen Graphen. | ||
+ | - | ||
+ | - Ändern Sie den Code um auch dieses Problem zu studieren.**🕱 🕱 🕱** | ||
- | ===== Test ===== | + | <WRAP center round tip 90%> |
- | + | Passen Sie gegebenenfalls die Lernrate oder die Anzahl der Iterationen an, damit das Problem erfolgreich gelernt werden kann. | |
- | Überprüfen Sie, ob das UND-Problem korrekt gelernt wurde, indem Sie für alle Inputvektoren $(x_1,x_2)$ die Ausgaben berechnen. | + | </ |
lernalgorithmus.1737556693.txt.gz · Zuletzt geändert: 2025/01/22 14:38 von torsten.roehl