i

Fehler-Rückleitung (Error-Backpropagation)

Wir versuchen jetzt, wie bei der Delta-Regel eine Lernregel zu finden, die auch bei mehrlagigen Perzeptronen funktioniert.

Wir gehen von einem mehrlagigen (genauer 2-lagigen) Perzeptron mit 2 variablen Eingängen und einem konstanten Eingang aus. Diese sind jetzt jeweils mit zwei verschiedenen Neuronen der Schicht $A$ verbunden. Deren Ausgänge wiederum sind mit einem Neuron in der Schicht $B$ verbunden.

Damit haben wir folgende synaptische Gewichte, die im Laufe des Lernvorgangs angepasst werden müssen:

  • Schicht $A$
    • Neuron $j=1$: $w^{(A)}_{0,1},w^{(A)}_{1,1},w^{(A)}_{2,1}$
    • Neuron $j=2$: $w^{(A)}_{0,2},w^{(A)}_{1,2},w^{(A)}_{2,2}$
  • Schicht $B$
    • Neuron $k=1$: $w^{(B)}_{0,1},w^{(B)}_{1,1},w^{(A)}_{2,1}$
All diese Gewichte sollen am Anfang rein zufällig gesetzt sein.

Das mehrlagige Perzeptron soll nun wieder anhand von Trainingsbeispielen eine bestimmte Zuordnung lernen.

Für jedes solche Trainingsbeispiel erzeugt das (noch zufällige) Perzeptron, genauer gesagt: das Neuron in der Schicht $B$, eine Ausgabe ($y^{(B)}_1$). Entweder ist das bereits die gewünsche Ausgabe $y_\textrm{soll}$ oder eben noch eine falsche. Wieder drücken wir den Fehler ("Error") durch die folgende Formel aus: \begin{equation} \varepsilon_1 = y^{(B)}_1 - y_\textrm{soll} \end{equation}

Nun konstruieren wir die Größe $\delta^{(B)}$ für das Neuron in der Schicht $B$ etwas anders als bei der Perzeptron-Regel: Wir multiplizieren den Fehler $\varepsilon$ mit der Steigung der Ausgabefunktion: \begin{equation} \delta^{(B)}_1 = \varepsilon_1 \cdot f'(a_1) \end{equation} wobei $a_1$ die Aktivierung des Neurons in der Schicht $B$ ist. Das sorgt dafür, dass später die Änderung der synaptischen Gewichte umso größer wird, je stärker sich eine Änderung der Aktivierung beim betreffenden Neuron auf die Ausgabe auswirkt. Da $f'(a_1)$ jedoch immer positive Werte hat, gilt weiterhin:

  • $\delta^{(B)} > 0$: Die Ausgabe ist zu groß (größer als das Soll).
    Die Gewichte vor positiven x-Werten sind zu groß, die Gewichte vor negativen x-Werten zu klein. Man sollte die Gewichte vor positiven x-Werten also ein bisschen verkleinern, die vor negativen x-Werten ein bisschen vergrößern.
  • $\delta^{(B)} \lt 0$: Die Ausgabe ist zu klein (kleiner als das Soll)
    Die Gewichte vor negativen x-Werten sind zu groß, die Gewichte vor positiven x-Werten zu klein. Man sollte die Gewichte vor negativen x-Werten also ein bisschen verkleinern, die vor positiven x-Werten ein bisschen vergrößern.
Wie aber steht es mit den $\delta$-Werten in der Schicht $A$. Hier gibt es keine Ausgabe, die mit einer Soll-Ausgabe direkt verglichen werden könnte. Stattdessen behilft man sich anders: Man berechnet die $\delta$-Werte dieser Neuronen aus dem $\delta$-Wert des (einen) Neurons in der Schicht $B$: \begin{equation} \delta_j^{(A)} = w_{j,1}\cdot f'(a_j) \cdot \delta_1^{(B)} \end{equation} wobei $a_j$ die Aktivierung des $j$-ten Neurons in der Schicht $A$ ist. Die Multiplikation mit $f'(a_j)$ sorgt dafür, dass sich später vor allem die synaptischen Gewichte derjenigen Neuronen ändern, wo (beim betreffenden Trainingsbeispiel) eine kleine Änderung der Gewichte besonders viel Wirkung erzielt.

Das ist aus folgendem Grunde sinnvoll: Zu einem fortgeschrittenen Zeitpunkt des Lernens haben sich die Gewichte schon recht gut an die bisherigen Trainingsbeispiele angepasst. Diese bisherige Anpassung soll nicht durch das neue Trainingsbeispiel wieder unnötig zerstört werden. Deshalb sollen die Gewichte vor allem an den Neuronen verändert werden, wo eine kleine Änderung wirklich auch eine besonders starke Verbesserung bewirkt. Bei den anderen Neuronen geht man davon aus, dass sie durch das Training mit den vorangegangenen Trainingsbeispielen möglicherweise schon recht gut eingestellt sind.

Für die Änderung der synaptischen Gewichte verwenden wir exakt die gleiche Formel wie bei der Delta-Regel auch. Für die Neuronen in der Schicht $B$ heißt das: \begin{equation} w^{(B)}_{j,1} \leftarrow w^{(B)}_{j,1} - \alpha \cdot \delta_j^{(B)} \cdot x^{(B)}_j \end{equation} bzw. wegen $x^{(B)}_j=y^{(A)}_j$ entsprechend \begin{equation} w^{(B)}_{j,1} \leftarrow w^{(B)}_{j,1} - \alpha \cdot \delta_j^{(B)} \cdot y^{(A)}_j \end{equation} Für die Neuronen in der Schicht $A$ gilt: \begin{equation} w^{(A)}_{i,j} \leftarrow w^{(A)}_{i,j} - \alpha \cdot \delta_j^{(A)} \cdot x_i^{(A)} \end{equation} Dabei ist $\alpha$ wieder die Lernrate.

Suche

v
16.5.5.10
dev.inf-schule.de/lehrkraefte/archiv/deeplearning_ohne_numpy/fehler_rueckleitung
dev.inf-schule.de/16.5.5.10
dev.inf-schule.de/@/page/C5PvHH1WCqQzf4gN

Rückmeldung geben