Informatik @ Exorciser

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
p:ki:machinelearning4 [2026/07/12 10:13] – [2. Das Gradientenverfahren von Hand durchrechnen] Ralf Kretzschmarp:ki:machinelearning4 [2026/07/31 12:02] (aktuell) – [1.2 Fehlerfunktion] Ralf Kretzschmar
Zeile 24: Zeile 24:
 ℹ️ Abb.1 zeigt ein neuronales Netz vom Typ "Feedforward Neural Network (FNN)". Ein FNN ist aus mehreren miteinander verbundenen Neuronen (die Kreise ◯) aufgebaut, welche in mehreren Spalten angeordnet sind. Diese Spalten werden als Schichten (layers) bezeichnet. Die Spalte ganz links ist der Input Layer, die Spalte ganz rechts ist der Output Layer und alle Spalten dazwischen sind Hidden Layers. Die schwarzen Kreise ● bezeichnen spezielle Neuronen, welche immer den Ausgangswert $1$ haben. Sie werden als "Bias" bezeichnet. Jede Verbindungslinie, welche zwei Neuronen ◯ (oder Bias ● und Neuron ◯) miteinander verbindet, stellt ein Gewicht dar. Im Training werden diese Gewichte angepasst. Der Input Layer ist zwar mit Kreisen ◯ eingezeichnet, jedoch wird in diesen Neuronen nichts verarbeitet, sie leiten die Eingangswerte direkt weiter.  ℹ️ Abb.1 zeigt ein neuronales Netz vom Typ "Feedforward Neural Network (FNN)". Ein FNN ist aus mehreren miteinander verbundenen Neuronen (die Kreise ◯) aufgebaut, welche in mehreren Spalten angeordnet sind. Diese Spalten werden als Schichten (layers) bezeichnet. Die Spalte ganz links ist der Input Layer, die Spalte ganz rechts ist der Output Layer und alle Spalten dazwischen sind Hidden Layers. Die schwarzen Kreise ● bezeichnen spezielle Neuronen, welche immer den Ausgangswert $1$ haben. Sie werden als "Bias" bezeichnet. Jede Verbindungslinie, welche zwei Neuronen ◯ (oder Bias ● und Neuron ◯) miteinander verbindet, stellt ein Gewicht dar. Im Training werden diese Gewichte angepasst. Der Input Layer ist zwar mit Kreisen ◯ eingezeichnet, jedoch wird in diesen Neuronen nichts verarbeitet, sie leiten die Eingangswerte direkt weiter. 
  
-FIXME Neuron als 1Punkt einführen und Aktivierung als weiteren Punkt einführen +  * **Neuron:** Ein Neuron ist eine Verarbeitungseinheit eines neuronalen NetzesEin Neuron bekommt einen Wert (Aktivierung), verarbeitet diesen mit seiner Aktivierungsfunktion und gibt das Resultat weiter. 
- +  * **Input Layer:** Besteht aus mehreren Input-Neuronen, die mit dem Index $h$ von $0$ bis $n_{input}$ (der Anzahl Input-Neuronen) durchnummeriert werden. Jedes Input-Neuron gibt den Eingangswert $x_h$, den es bekommt, unverarbeitet weiter, daher trägt das Input-Neuron auch das Symbol $x$. Das Input-Neuron $x_0$ ist der Bias und gibt stets den Wert $1$ weiter. 
-  * **Input Layer:** Besteht aus mehreren Input-Neuronen, die mit dem Index $h$ von $0$ bis $n_i$ (der Anzahl Input-Neuronen) durchnummeriert werden. Jedes Input-Neuron gibt den zugehörigen Eingangswert $x_h$ weiter. Das Input-Neuron $0$ ist das Bias und gibt stets den Wert $1$ weiter. +  * **Hidden Layer:** Besteht aus mehreren Hidden-Neuronen, die mit dem Index $i$ von $0$ bis $n_{hidden}$ (der Anzahl Hidden-Neuronen) durchnummeriert werden. Jedes Hidden-Neuron bekommt als Aktivierung die gewichtete Summe der Ausgänge der vorangehenden Neuronen und gibt den Funktionswert der zugehörigen Aktivierungsfunktion $\phi_i$ weiter. Daher trägt das Hidden-Neuron auch das Symbol $\phi$. Das Hidden-Neuron $\phi_0$ ist das Bias und gibt stets den Wert $1$ weiter. 
-  * **Hidden Layer:** Besteht aus mehreren Hidden-Neuronen, die mit dem Index $i$ von $0$ bis $n_h$ (der Anzahl Hidden-Neuronen) durchnummeriert werden. Jedes Hidden-Neuron gibt den Funktionswert der zugehörigen Aktivierungsfunktion $\phi_i$ weiter. Das Hidden-Neuron $0$ ist das Bias und gibt stets den Wert $1$ weiter. +  * **Output Layer:** Besteht aus mehreren Output-Neuronen, die mit dem Index $j$ von $1$ bis $n_{output}$ (der Anzahl Ouput-Neuronen) durchnummeriert werden. Jedes Output-Neuron bekommt als Aktivierung die gewichtete Summe der Ausgänge der vorangehenden Neuronen und gibt den Funktionswert der zugehörigen Aktivierungsfunktion $\varphi_j$ als Ausgangswert $y_j$ aus. Das Output-Neuron trägt das Symbol $\varphi$. Im Output Layer gibt es keinen Bias.
-  * **Output Layer:** Besteht aus mehreren Output-Neuronen, die mit dem Index $j$ von $1$ bis $n_o$ (der Anzahl Ouput-Neuronen) durchnummeriert werden. Jedes Output-Neuron gibt den Funktionswert der zugehörigen Aktivierungsfunktion $\varphi_j$ als Ausgangswert $y_j$ aus. Im Output Layer gibt es kein Bias.+
   * **Gewichte:** Das Gewicht vom Input-Neuron $h$ zum Hidden-Neuron $i$ ist: $v_{hi}$ . Das Gewicht vom Hidden-Neuron $h$ zum Ouput-Neuron $j$ ist: $w_{ij}$.   * **Gewichte:** Das Gewicht vom Input-Neuron $h$ zum Hidden-Neuron $i$ ist: $v_{hi}$ . Das Gewicht vom Hidden-Neuron $h$ zum Ouput-Neuron $j$ ist: $w_{ij}$.
  
-|  {{gdraw>1GQ_c83aoIoCfToSuW-kk0ppRWYYXNImX3NzFBrgc2H8 width=400 center}}  |  {{gdraw>1xhOqM2uBoZDyw3U7HEIHTKBMGL0Re1WM3Klm_0GP_mU width=217 center}}  |+|  {{gdraw>1GQ_c83aoIoCfToSuW-kk0ppRWYYXNImX3NzFBrgc2H8 width=400 center}}  |  {{gdraw>1xhOqM2uBoZDyw3U7HEIHTKBMGL0Re1WM3Klm_0GP_mU width=249 center}}  |
 |  Abb.1 FNN mit einem Hidden Layer((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]]))  |  Abb.2 Das Neuron in der Mitte des Hidden Layers((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]]))  | |  Abb.1 FNN mit einem Hidden Layer((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]]))  |  Abb.2 Das Neuron in der Mitte des Hidden Layers((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]]))  |
  
-  * **Neuron**: Das Neuron in der Mitte des Hidden Layers ist in Abb.2 abgebildet. Jedes Neuron (abgesehen von den Input-Neuronen und dem Bias) empfängt als "Aktivierung" die Summe aller Eingänge multipliziert mit den zugehörigen Gewichten. D.h. für das Neuron in der Abb.2 ist die Aktivierung $a = v_{02} \cdot 1 + v_{12} \cdot x_1 + v_{22} \cdot x_2$ . Danach wird die Aktivierung $a$ mit der Aktivierungsfunktion $\phi_2(a)$ verrechnet und der Funktionswert den rechts angeschlossenen Neuronen übergeben.+  * **Aktivierung**: Das Neuron in der Mitte des Hidden Layers ist in Abb.2 abgebildet. Es empfängt als "Aktivierung" die gewichtete Summe der Ausgänge der vorangehenden Neuronen. D.h. für das Neuron in der Abb.2 ist die Aktivierung $a = v_{02} \cdot 1 + v_{12} \cdot x_1 + v_{22} \cdot x_2$ . Danach wird die Aktivierung $a$ mit der Aktivierungsfunktion $\phi_2(a)$ verrechnet und der Funktionswert den rechts angeschlossenen Neuronen übergeben.
   * **Aktivierungsfunktion**: Es kommen in der Praxis verschiedene Aktivierungsfunktionen $\phi(.)$ und $\varphi(.)$ zum Einsatz. Wichtig ist, dass zumindest in einem Layer eine nicht-lineare Funktion verwendet wird (sonst kann das neuronale Netz nicht viel lernen). Ein Beispiel für eine nicht-lineare Aktivierungsfunktion ist die "logistische Funktion" $f_{\textrm{logistic}}(z) = \frac{1}{1 + e^{-z}}$ . Für die Output-Neuronen kommen manchmal auch lineare Aktivierungsfunktionen zum Einsatz, z.B. die "lineare Funktion" $f_{\textrm{linear}}(z) = z$ .    * **Aktivierungsfunktion**: Es kommen in der Praxis verschiedene Aktivierungsfunktionen $\phi(.)$ und $\varphi(.)$ zum Einsatz. Wichtig ist, dass zumindest in einem Layer eine nicht-lineare Funktion verwendet wird (sonst kann das neuronale Netz nicht viel lernen). Ein Beispiel für eine nicht-lineare Aktivierungsfunktion ist die "logistische Funktion" $f_{\textrm{logistic}}(z) = \frac{1}{1 + e^{-z}}$ . Für die Output-Neuronen kommen manchmal auch lineare Aktivierungsfunktionen zum Einsatz, z.B. die "lineare Funktion" $f_{\textrm{linear}}(z) = z$ . 
  
 ℹ️ Alles kombiniert ergibt sich für jeden Ausgang $y_j$ folgende Formel für ein FNN mit einem Hidden Layer: ℹ️ Alles kombiniert ergibt sich für jeden Ausgang $y_j$ folgende Formel für ein FNN mit einem Hidden Layer:
  
-$y_j = \varphi_j \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij} \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi} \cdot x_h \right) \right]\enspace ,\quad \phi_0(.) = x_0 = 1 , \quad$ (FNN mit einem Hidden Layer). +$y_j = \varphi_j \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij} \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi} \cdot x_h \right) \right]\enspace ,\quad \phi_0(.) = x_0 = 1 , \quad$ (FNN mit einem Hidden Layer). 
  
-Dabei bezeichnet das Zeichen $\sum$ eine Summe. Z.B. ist $\sum_{h=0}^{n_i} v_{hi} \cdot x_h$ die Summe aller $v_{hi} \cdot x_h$ mit einem Index $h$ von $0$ bis $n_i$. Für $i = 1$ wird die Summe zu $\sum_{h=0}^{n_i} v_{h1} \cdot x_h = v_{01}\cdot x_0 + v_{11}\cdot x_1 +v_{21}\cdot x_2$. Wird in dieser Formel berücksichtigt, dass das Bias $x_0 = 1$ ist, ergibt sich $\sum_{h=0}^{n_i} v_{h1} \cdot x_h = v_{01} + v_{11}\cdot x_1 +v_{21}\cdot x_2$ . +Dabei bezeichnet $\sum$ eine Summe. Z. B. ist $\sum_{h=0}^{n_{input}} v_{hi} \cdot x_h$ die Summe aller $v_{hi} \cdot x_h$ mit einem Index $h$ von $0$ bis $n_{input}$. Für $i = 2$ wird die Summe zu $\sum_{h=0}^{n_{input}} v_{h2} \cdot x_h = v_{02}\cdot x_0 + v_{12}\cdot x_1 +v_{22}\cdot x_2$. Wird in dieser Formel berücksichtigt, dass das Bias $x_0 = 1$ ist, ergibt sich $\sum_{h=0}^{n_{input}} v_{h2} \cdot x_h = v_{02} + v_{12}\cdot x_1 +v_{22}\cdot x_2$ . 
  
 \\  \\ 
Zeile 48: Zeile 47:
 ℹ️ Um das neuronale Netz zu trainieren, braucht es eine Fehlerfunktion $J[k]$ (da zwei verschiedene Buchstaben $v$ und $w$ für die Gewichte verwendet werden, wird nicht $J(w[k])$ geschrieben, sondern nur $J[k]$. Für das FNN in Abb.1 verwenden wir die einfache Fehlerfunktion "squared error (SE)". Diese wird für jedes Sample (Trainingsbeispiel) einzeln berechnet, und gleich danach (d.h. nach jedem Sample) werden die Gewichte angepasst. Das ist ein anderes Vorgehen, als z.B. für die gebräuchlichere Fehlerfunktion "mean squared error (MSE)". Beim MSE wird zuerst der Fehler über mehrere Samples gemittelt und erst danach die Gewichte angepasst. Die Formel für den SE ist ℹ️ Um das neuronale Netz zu trainieren, braucht es eine Fehlerfunktion $J[k]$ (da zwei verschiedene Buchstaben $v$ und $w$ für die Gewichte verwendet werden, wird nicht $J(w[k])$ geschrieben, sondern nur $J[k]$. Für das FNN in Abb.1 verwenden wir die einfache Fehlerfunktion "squared error (SE)". Diese wird für jedes Sample (Trainingsbeispiel) einzeln berechnet, und gleich danach (d.h. nach jedem Sample) werden die Gewichte angepasst. Das ist ein anderes Vorgehen, als z.B. für die gebräuchlichere Fehlerfunktion "mean squared error (MSE)". Beim MSE wird zuerst der Fehler über mehrere Samples gemittelt und erst danach die Gewichte angepasst. Die Formel für den SE ist
  
-$J[k] = \frac{1}{2} \displaystyle\sum_{j=1}^{n_0} (y_j[k]-d_j)^2\quad$ (SE),+$J[k] = \frac{1}{2} \displaystyle\sum_{j=1}^{n_{output}} (y_j[k]-d_j)^2\quad$ (SE),
  
 Dabei ist $d_j$ der gewünschte Ausgangswert (Desired Output) zum Ausgang $y_j$. Die Differenz zwischen erhaltenem Ausgang $y_j$ und Desired Output $d_j$ bildet die Basis für die Fehlerberechnung. Das Quadrat bei $(y_j[k]-d_j)^2$ sorgt dafür, dass der Fehler eine positive Zahl ist. Zudem werden grosse Differenzen $y_j[k]-d_j$ durch das Quadrat stärker bestraft als kleine. Der Faktor $\frac{1}{2}$ spielt für das Training selber keine Rolle. Er wird jedoch im Gebiet der neuronalen Netze häufig dazu genommen, weil damit die Gleichungen für das Gradientenverfahren vereinfacht werden((Streng genommen ist somit die obige Formel nicht eine Formel für den SE, sondern für den halben SE)). Dabei ist $d_j$ der gewünschte Ausgangswert (Desired Output) zum Ausgang $y_j$. Die Differenz zwischen erhaltenem Ausgang $y_j$ und Desired Output $d_j$ bildet die Basis für die Fehlerberechnung. Das Quadrat bei $(y_j[k]-d_j)^2$ sorgt dafür, dass der Fehler eine positive Zahl ist. Zudem werden grosse Differenzen $y_j[k]-d_j$ durch das Quadrat stärker bestraft als kleine. Der Faktor $\frac{1}{2}$ spielt für das Training selber keine Rolle. Er wird jedoch im Gebiet der neuronalen Netze häufig dazu genommen, weil damit die Gleichungen für das Gradientenverfahren vereinfacht werden((Streng genommen ist somit die obige Formel nicht eine Formel für den SE, sondern für den halben SE)).
Zeile 54: Zeile 53:
 Wird die Formel für das FNN mit einem Hidden Layer in die Formel für den SE eingesetzt, ergibt sich: Wird die Formel für das FNN mit einem Hidden Layer in die Formel für den SE eingesetzt, ergibt sich:
  
-$J[k] = \frac{1}{2} \displaystyle\sum_{j=1}^{n_0} \left(\varphi_j \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_{h} \right) \right] - d_j \right)^2\enspace ,\quad \phi_0(.) = x_{0} = 1$+$J[k] = \frac{1}{2} \displaystyle\sum_{j=1}^{n_{output}} \left(\varphi_j \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_{h} \right) \right] - d_j \right)^2\enspace ,\quad \phi_0(.) = x_{0} = 1$
  
 \\  \\ 
 ++++Falls du wissen möchtest, wie die Formel für den "mean squared error (MSE)" aussieht, hier klicken!| ++++Falls du wissen möchtest, wie die Formel für den "mean squared error (MSE)" aussieht, hier klicken!|
 \\  \\ 
-Als Fehlerfunktion $J[k]$ ist der "mean squared error (MSE)" geläufiger, der über mehrere Samples (Trainingsbeispiele) hinweg berechnet wird. In der nachfolgenden Formel zeigt $\frac{1}{n_b} \sum_{s=1}^{n_b}$ an, dass der Fehler für $n_b$ viele Samples berechnet, summiert und anschliessend durch die Anzahl Samples geteilt wird. +Als Fehlerfunktion $J[k]$ ist der "mean squared error (MSE)" geläufiger, der über mehrere Samples (Trainingsbeispiele) hinweg berechnet wird. In der nachfolgenden Formel zeigt $\frac{1}{n_{samples}} \sum_{s=1}^{n_{samples}}$ an, dass der Fehler für $n_{samples}$ viele Samples berechnet, summiert und anschliessend durch die Anzahl Samples geteilt wird. 
  
-$J[k] = \frac{1}{2} \frac{1}{n_b} \displaystyle\sum_{s=1}^{n_b} \displaystyle\sum_{j=1}^{n_0} (y_{s,j}[k]-d_{s,j})^2\quad$ (MSE)+$J[k] = \frac{1}{2} \frac{1}{n_{samples}} \displaystyle\sum_{s=1}^{n_{samples}} \displaystyle\sum_{j=1}^{n_{output}} (y_{s,j}[k]-d_{s,j})^2\quad$ (MSE)
  
 Für jedes Sample gibt das neuronale Netz einen anderen Ausgangswert aus und für jedes Sample stellt das Trainingsset einen anderen Desired Output zur Verfügung. Dies wird mit den $s$ in $y_{s,j}[k]$ und $d_{s,j}$ angezeigt.  Weiter hängen die Ausgangswerte des neuronalen Netzes auch von der aktuellen Gewicht-Einstellung ab (von der $k$-ten Gewicht-Einstellung). Dies wird mit dem $[k]$ in $y_{s,j}[k]$ verdeutlicht. Der Faktor $\frac{1}{2}$ dient wie beim SE nur dazu, die Formel für das Gradientenverfahren zu vereinfachen((Streng genommen ist somit auch hier die obige Formel nicht eine Formel für den MSE, sondern für den halben MSE)). Für jedes Sample gibt das neuronale Netz einen anderen Ausgangswert aus und für jedes Sample stellt das Trainingsset einen anderen Desired Output zur Verfügung. Dies wird mit den $s$ in $y_{s,j}[k]$ und $d_{s,j}$ angezeigt.  Weiter hängen die Ausgangswerte des neuronalen Netzes auch von der aktuellen Gewicht-Einstellung ab (von der $k$-ten Gewicht-Einstellung). Dies wird mit dem $[k]$ in $y_{s,j}[k]$ verdeutlicht. Der Faktor $\frac{1}{2}$ dient wie beim SE nur dazu, die Formel für das Gradientenverfahren zu vereinfachen((Streng genommen ist somit auch hier die obige Formel nicht eine Formel für den MSE, sondern für den halben MSE)).
Zeile 67: Zeile 66:
 Die Formel für das FNN mit einem Hidden Layer ist: Die Formel für das FNN mit einem Hidden Layer ist:
  
-$y_j = \varphi_j \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij} \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi} \cdot x_h \right) \right]\enspace ,\quad \phi_0(.) = x_0 = 1 , \quad$ . +$y_j = \varphi_j \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij} \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi} \cdot x_h \right) \right]\enspace ,\quad \phi_0(.) = x_0 = 1 , \quad$ . 
  
 Wird diese Formel für das FNN mit einem Hidden Layer in die Formel für den MSE eingesetzt, ergibt sich: Wird diese Formel für das FNN mit einem Hidden Layer in die Formel für den MSE eingesetzt, ergibt sich:
  
-$J[k] = \frac{1}{2} \frac{1}{n_b} \displaystyle\sum_{s=1}^{n_b} \displaystyle\sum_{j=1}^{n_0} \left(\varphi_j \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_{s,h} \right) \right] - d_j \right)^2\enspace ,\quad \phi_0(.) = x_{s,0} = 1$+$J[k] = \frac{1}{2} \frac{1}{n_{samples}} \displaystyle\sum_{s=1}^{n_{samples}} \displaystyle\sum_{j=1}^{n_{output}} \left(\varphi_j \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_{s,h} \right) \right] - d_{s,j} \right)^2\enspace ,\quad \phi_0(.) = x_{s,0} = 1$
  
 D. h., der Fehler $J[k]$ zum Zeitpunkt $k$ hängt somit ab von den Eingangsgrössen $x_{s,h}$ , den Desired Outputs $d_{s,j}$ der berücksichtigten Samples und den Gewichten $v_{hi}[k]$ und $w_{ij}[k]$.  D. h., der Fehler $J[k]$ zum Zeitpunkt $k$ hängt somit ab von den Eingangsgrössen $x_{s,h}$ , den Desired Outputs $d_{s,j}$ der berücksichtigten Samples und den Gewichten $v_{hi}[k]$ und $w_{ij}[k]$. 
Zeile 97: Zeile 96:
   - Markiere diesen Auftrag als "Erledigt!".   - Markiere diesen Auftrag als "Erledigt!".
  
-{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20X_CANVAS_SIZE%20%3D%20500%3B%0Aconst%20Y_CANVAS_SIZE%20%3D%20220%3B%0Aconst%20TEXT_SIZE%20%3D%2018%3B%0Aconst%20SEQUENCE_LENGTH%20%3D%2020%3B%0A%0A%0A%2F%2F%20global%20variables%0Alet%20button%2C%20isButtonStart%3B%0Alet%20counter%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20input%0A%2F%2F%0Afunction%20drawInput%28color%29%20%7B%0A%09%2F%2F%20input%20labels%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22x%22%2C%2010%2C%2060%29%3B%0A%09text%28%221%22%2C%2010%20%2B%209%2C%2060%20%2B%206%29%3B%0A%09text%28%22x%22%2C%2010%2C%20120%29%3B%0A%09text%28%222%22%2C%2010%20%2B%209%2C%20120%20%2B%206%29%3B%0A%09%2F%2F%20label%0A%09text%28%22x%22%2C%2010%2C%20190%29%3B%0A%09text%28%22h%22%2C%2010%20%2B%2010%2C%20190%20%2B%206%29%3B%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2830%2C%2060%2C%2050%2C%2060%29%3B%0A%09line%2830%2C%20120%2C%2050%2C%20120%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20input%20layer%0A%2F%2F%0Afunction%20drawInputLayer%28color%29%20%7B%0A%09%2F%2F%20circles%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09noFill%28%29%3B%0A%09circle%2870%2C%2060%2C%2040%29%3B%0A%09circle%2870%2C%20120%2C%2040%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20weight%20layer%201%0A%2F%2F%0Afunction%20drawWeightLayer1%28color%29%20%7B%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2890%2C%2060%2C%20130%2C%2030%29%3B%0A%09line%2890%2C%2060%2C%20130%2C%2090%29%3B%0A%09line%2890%2C%2060%2C%20130%2C%20150%29%3B%0A%09line%2890%2C%20120%2C%20130%2C%2030%29%3B%0A%09line%2890%2C%20120%2C%20130%2C%2090%29%3B%0A%09line%2890%2C%20120%2C%20130%2C%20150%29%3B%0A%09%2F%2F%20label%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22v%22%2C%20100%2C%20190%29%3B%0A%09text%28%22hi%22%2C%20100%20%2B%2010%2C%20190%20%2B%206%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20hidden%20layer%0A%2F%2F%0Afunction%20drawHiddenLayer%28color%29%20%7B%0A%09%2F%2F%20circles%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09noFill%28%29%3B%0A%09circle%28150%2C%2030%2C%2040%29%3B%0A%09circle%28150%2C%2090%2C%2040%29%3B%0A%09circle%28150%2C%20150%2C%2040%29%3B%0A%09%2F%2F%20label%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22%CF%86%22%2C%20150%2C%20190%29%3B%0A%09text%28%22i%22%2C%20150%20%2B%20TEXT_SIZE%20%2F%202%2C%20190%20%2B%20TEXT_SIZE%20%2F%203%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20weight%20layer%202%0A%2F%2F%0Afunction%20drawWeightLayer2%28color%29%20%7B%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%28170%2C%2030%2C%20210%2C%2060%29%3B%0A%09line%28170%2C%2090%2C%20210%2C%2060%29%3B%0A%09line%28170%2C%20150%2C%20210%2C%2060%29%3B%0A%09line%28170%2C%2030%2C%20210%2C%20120%29%3B%0A%09line%28170%2C%2090%2C%20210%2C%20120%29%3B%0A%09line%28170%2C%20150%2C%20210%2C%20120%29%3B%0A%09%2F%2F%20label%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22w%22%2C%20190%2C%20190%29%3B%0A%09text%28%22ij%22%2C%20190%20%2B%2010%2C%20190%20%2B%206%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20output%20layer%0A%2F%2F%0Afunction%20drawOutputLayer%28color%29%20%7B%0A%09%2F%2F%20circles%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09noFill%28%29%3B%0A%09circle%28230%2C%2060%2C%2040%29%3B%0A%09circle%28230%2C%20120%2C%2040%29%3B%0A%09%2F%2F%20label%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22%F0%9D%9C%91%22%2C%20230%2C%20190%29%3B%0A%09text%28%22j%22%2C%20230%20%2B%209%2C%20190%20%2B%206%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20draw%20output%20values%0A%2F%2F%0Afunction%20drawOutput%28color%29%20%7B%0A%09%2F%2F%20output%20labels%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22y%22%2C%20280%2C%2060%29%3B%0A%09text%28%221%22%2C%20280%20%2B%209%2C%2060%20%2B%206%29%3B%0A%09text%28%22y%22%2C%20280%2C%20120%29%3B%0A%09text%28%222%22%2C%20280%20%2B%209%2C%20120%20%2B%206%29%3B%0A%09%2F%2F%20label%0A%09text%28%22y%22%2C%20280%2C%20190%29%3B%0A%09text%28%22j%22%2C%20280%20%2B%208%2C%20190%20%2B%206%29%3B%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%28250%2C%2060%2C%20270%2C%2060%29%3B%0A%09line%28250%2C%20120%2C%20270%2C%20120%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20error%0A%2F%2F%0Afunction%20drawError%28color%29%20%7B%0A%09%2F%2F%20desired%20output%20labels%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22d%22%2C%20360%2C%2060%29%3B%0A%09text%28%221%22%2C%20360%20%2B%2010%2C%2060%20%2B%206%29%3B%0A%09text%28%22d%22%2C%20360%2C%20120%29%3B%0A%09text%28%222%22%2C%20360%20%2B%2010%2C%20120%20%2B%206%29%3B%0A%09%2F%2F%20label%0A%09text%28%22d%22%2C%20360%2C%20190%29%3B%0A%09text%28%22j%22%2C%20360%20%2B%209%2C%20190%20%2B%206%29%3B%0A%09%2F%2F%20error%20text%0A%09text%28%22Fehler%22%2C%20325%2C%2090%29%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09fill%28color%29%3B%0A%09line%28310%2C%2060%2C%20340%2C%2060%29%3B%0A%09line%28310%2C%20120%2C%20340%2C%20120%29%3B%0A%09triangle%28310%2C%2060%2C%20316%2C%2057%2C%20316%2C%2063%29%3B%0A%09triangle%28340%2C%2060%2C%20334%2C%2057%2C%20334%2C%2063%29%3B%0A%09triangle%28310%2C%20120%2C%20316%2C%20117%2C%20316%2C%20123%29%3B%0A%09triangle%28340%2C%20120%2C%20334%2C%20117%2C%20334%2C%20123%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20let%20button%20start%20and%20stop%20animation%0A%2F%2F%0Afunction%20toggleButton%28%29%20%7B%0A%09if%20%28isButtonStart%29%20%7B%0A%09%09console.clear%28%29%3B%0A%09%09isButtonStart%20%3D%20false%3B%0A%09%09button.html%28%22Start%22%29%3B%0A%09%09button.style%28%22border-color%22%2C%20%22green%22%29%3B%0A%09%09button.style%28%22background%22%2C%20%22lightgreen%22%29%3B%0A%09%09frameRate%280%29%3B%0A%09%7D%20else%20%7B%0A%09%09frameRate%281%29%3B%0A%09%09isButtonStart%20%3D%20true%3B%0A%09%09button.html%28%22Stop%22%29%3B%0A%09%09button.style%28%22border-color%22%2C%20%22red%22%29%3B%0A%09%09button.style%28%22background%22%2C%20%22orange%22%29%3B%0A%09%09counter%20%3D%201%3B%0A%09%7D%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%0A%09%2F%2F%20create%20canvas%20%0A%09createCanvas%28X_CANVAS_SIZE%2C%20Y_CANVAS_SIZE%29%3B%0A%0A%09%2F%2F%20counter%0A%09counter%20%3D%200%3B%0A%0A%09%2F%2F%20create%20button%0A%09isButtonStart%20%3D%20false%3B%0A%09button%20%3D%20createButton%28%22Start%22%29%3B%0A%09button.size%2880%2C%2030%29%3B%0A%09button.position%28410%2C%2020%29%3B%0A%09%2F%2F%20cosmetics%0A%09button.style%28%22font-size%22%2C%20%2220px%22%29%3B%0A%09button.style%28%22border-radius%22%2C%20%2220px%22%29%3B%0A%09button.style%28%22color%22%2C%20%22black%22%29%3B%0A%09button.style%28%22border-color%22%2C%20%22green%22%29%3B%0A%09button.style%28%22background%22%2C%20%22lightgreen%22%29%3B%0A%09%2F%2F%20add%20button%20functionality%0A%09button.mouseClicked%28toggleButton%29%3B%0A%0A%09%2F%2F%20set%20text%20properties%0A%09textSize%28TEXT_SIZE%29%3B%0A%09textAlign%28CENTER%2C%20CENTER%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20draw%28%29%0A%2F%2F%0Afunction%20draw%28%29%20%7B%0A%09%2F%2F%20clear%20everything%0A%09background%28%22white%22%29%3B%0A%0A%09%2F%2F%20wait%20for%20start%0A%09if%20%28counter%20%3D%3D%3D%200%29%20%7B%0A%09%09frameRate%280%29%3B%0A%09%7D%0A%09%2F%2F%20speed%20control%0A%09if%20%28counter%20%3D%3D%3D%206%29%20%7B%0A%09%09frameRate%280.5%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%207%29%20%7B%0A%09%09frameRate%280.25%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%208%29%20%7B%0A%09%09frameRate%281%29%3B%0A%09%7D%0A%09%2F%2F%20stop%20animation%0A%09if%20%28counter%20%3D%3D%3D%2020%29%20%7B%0A%09%09toggleButton%28%29%3B%0A%09%7D%0A%0A%09%2F%2F%20color%20animation%0A%09if%20%28counter%20%3D%3D%3D%201%29%20%7B%0A%09%09console.log%28%22Vorw%C3%A4rtsschritt%3A%20x%20-%3E%20y%22%29%3B%0A%09%09drawInput%28%22cyan%22%29%3B%0A%09%09drawInputLayer%28%22cyan%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawInput%28%22black%22%29%3B%0A%09%09drawInputLayer%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%202%29%20%7B%0A%09%09drawWeightLayer1%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2014%29%20%7B%0A%09%09drawWeightLayer1%28%22red%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2015%29%20%7B%0A%09%09drawWeightLayer1%28%22yellow%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawWeightLayer1%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%203%29%20%7B%0A%09%09drawHiddenLayer%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2013%29%20%7B%0A%09%09drawHiddenLayer%28%22red%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawHiddenLayer%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%204%29%20%7B%0A%09%09drawWeightLayer2%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2010%20%7C%7C%20counter%20%3D%3D%3D%2012%29%20%7B%0A%09%09drawWeightLayer2%28%22red%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2011%29%20%7B%0A%09%09drawWeightLayer2%28%22yellow%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawWeightLayer2%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%205%29%20%7B%0A%09%09drawOutputLayer%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%209%29%20%7B%0A%09%09drawOutputLayer%28%22red%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawOutputLayer%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%206%29%20%7B%0A%09%09drawOutput%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%207%20%7C%7C%20counter%20%3D%3D%3D%208%29%20%7B%0A%09%09if%20%28counter%20%3D%3D%3D%208%29%20%7B%0A%09%09%09console.log%28%22R%C3%BCckw%C3%A4rtsschritt%3A%20Passe%20Gewichte%20an%22%29%3B%0A%09%09%7D%0A%09%09drawOutput%28%22red%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawOutput%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%207%29%20%7B%0A%09%09console.log%28%22Berechne%20Fehler%22%29%3B%0A%09%09drawError%28%22red%22%29%3B%0A%09%7D%0A%0A%09%2F%2F%20increase%20counter%0A%09counter%20%3D%20counter%20%2B%201%3B%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E&height=400px#MulilayerPerceptron}}+{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20X_CANVAS_SIZE%20%3D%20500%3B%0Aconst%20Y_CANVAS_SIZE%20%3D%20220%3B%0Aconst%20TEXT_SIZE%20%3D%2018%3B%0Aconst%20SEQUENCE_LENGTH%20%3D%2015%3B%0A%0A%0A%2F%2F%20global%20variables%0Alet%20button%2C%20isButtonStart%3B%0Alet%20counter%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20input%0A%2F%2F%0Afunction%20drawInput%28color%29%20%7B%0A%09%2F%2F%20input%20labels%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22x%22%2C%2010%2C%2060%29%3B%0A%09text%28%221%22%2C%2010%20%2B%209%2C%2060%20%2B%206%29%3B%0A%09text%28%22x%22%2C%2010%2C%20120%29%3B%0A%09text%28%222%22%2C%2010%20%2B%209%2C%20120%20%2B%206%29%3B%0A%09%2F%2F%20label%0A%09text%28%22x%22%2C%2010%2C%20190%29%3B%0A%09text%28%22h%22%2C%2010%20%2B%2010%2C%20190%20%2B%206%29%3B%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2830%2C%2060%2C%2050%2C%2060%29%3B%0A%09line%2830%2C%20120%2C%2050%2C%20120%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20input%20layer%0A%2F%2F%0Afunction%20drawInputLayer%28color%29%20%7B%0A%09%2F%2F%20circles%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09noFill%28%29%3B%0A%09circle%2870%2C%2060%2C%2040%29%3B%0A%09circle%2870%2C%20120%2C%2040%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20weight%20layer%201%0A%2F%2F%0Afunction%20drawWeightLayer1%28color%29%20%7B%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%2890%2C%2060%2C%20130%2C%2030%29%3B%0A%09line%2890%2C%2060%2C%20130%2C%2090%29%3B%0A%09line%2890%2C%2060%2C%20130%2C%20150%29%3B%0A%09line%2890%2C%20120%2C%20130%2C%2030%29%3B%0A%09line%2890%2C%20120%2C%20130%2C%2090%29%3B%0A%09line%2890%2C%20120%2C%20130%2C%20150%29%3B%0A%09%2F%2F%20label%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22v%22%2C%20100%2C%20190%29%3B%0A%09text%28%22hi%22%2C%20100%20%2B%2010%2C%20190%20%2B%206%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20hidden%20layer%0A%2F%2F%0Afunction%20drawHiddenLayer%28color%29%20%7B%0A%09%2F%2F%20circles%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09noFill%28%29%3B%0A%09circle%28150%2C%2030%2C%2040%29%3B%0A%09circle%28150%2C%2090%2C%2040%29%3B%0A%09circle%28150%2C%20150%2C%2040%29%3B%0A%09%2F%2F%20label%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22%CF%86%22%2C%20150%2C%20190%29%3B%0A%09text%28%22i%22%2C%20150%20%2B%20TEXT_SIZE%20%2F%202%2C%20190%20%2B%20TEXT_SIZE%20%2F%203%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20weight%20layer%202%0A%2F%2F%0Afunction%20drawWeightLayer2%28color%29%20%7B%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%28170%2C%2030%2C%20210%2C%2060%29%3B%0A%09line%28170%2C%2090%2C%20210%2C%2060%29%3B%0A%09line%28170%2C%20150%2C%20210%2C%2060%29%3B%0A%09line%28170%2C%2030%2C%20210%2C%20120%29%3B%0A%09line%28170%2C%2090%2C%20210%2C%20120%29%3B%0A%09line%28170%2C%20150%2C%20210%2C%20120%29%3B%0A%09%2F%2F%20label%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22w%22%2C%20190%2C%20190%29%3B%0A%09text%28%22ij%22%2C%20190%20%2B%2010%2C%20190%20%2B%206%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20output%20layer%0A%2F%2F%0Afunction%20drawOutputLayer%28color%29%20%7B%0A%09%2F%2F%20circles%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09noFill%28%29%3B%0A%09circle%28230%2C%2060%2C%2040%29%3B%0A%09circle%28230%2C%20120%2C%2040%29%3B%0A%09%2F%2F%20label%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22%F0%9D%9C%91%22%2C%20230%2C%20190%29%3B%0A%09text%28%22j%22%2C%20230%20%2B%209%2C%20190%20%2B%206%29%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20draw%20output%20values%0A%2F%2F%0Afunction%20drawOutput%28color%29%20%7B%0A%09%2F%2F%20output%20labels%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22y%22%2C%20280%2C%2060%29%3B%0A%09text%28%221%22%2C%20280%20%2B%209%2C%2060%20%2B%206%29%3B%0A%09text%28%22y%22%2C%20280%2C%20120%29%3B%0A%09text%28%222%22%2C%20280%20%2B%209%2C%20120%20%2B%206%29%3B%0A%09%2F%2F%20label%0A%09text%28%22y%22%2C%20280%2C%20190%29%3B%0A%09text%28%22j%22%2C%20280%20%2B%208%2C%20190%20%2B%206%29%3B%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09line%28250%2C%2060%2C%20270%2C%2060%29%3B%0A%09line%28250%2C%20120%2C%20270%2C%20120%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20error%0A%2F%2F%0Afunction%20drawError%28color%29%20%7B%0A%09%2F%2F%20desired%20output%20labels%0A%09noStroke%28%29%3B%0A%09fill%28color%29%3B%0A%09text%28%22d%22%2C%20360%2C%2060%29%3B%0A%09text%28%221%22%2C%20360%20%2B%2010%2C%2060%20%2B%206%29%3B%0A%09text%28%22d%22%2C%20360%2C%20120%29%3B%0A%09text%28%222%22%2C%20360%20%2B%2010%2C%20120%20%2B%206%29%3B%0A%09%2F%2F%20label%0A%09text%28%22d%22%2C%20360%2C%20190%29%3B%0A%09text%28%22j%22%2C%20360%20%2B%209%2C%20190%20%2B%206%29%3B%0A%09%2F%2F%20error%20text%0A%09text%28%22Fehler%22%2C%20325%2C%2090%29%0A%09%2F%2F%20lines%0A%09stroke%28color%29%3B%0A%09strokeWeight%282%29%3B%0A%09fill%28color%29%3B%0A%09line%28310%2C%2060%2C%20340%2C%2060%29%3B%0A%09line%28310%2C%20120%2C%20340%2C%20120%29%3B%0A%09triangle%28310%2C%2060%2C%20316%2C%2057%2C%20316%2C%2063%29%3B%0A%09triangle%28340%2C%2060%2C%20334%2C%2057%2C%20334%2C%2063%29%3B%0A%09triangle%28310%2C%20120%2C%20316%2C%20117%2C%20316%2C%20123%29%3B%0A%09triangle%28340%2C%20120%2C%20334%2C%20117%2C%20334%2C%20123%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20let%20button%20start%20and%20stop%20animation%0A%2F%2F%0Afunction%20toggleButton%28%29%20%7B%0A%09if%20%28isButtonStart%29%20%7B%0A%09%09console.clear%28%29%3B%0A%09%09isButtonStart%20%3D%20false%3B%0A%09%09button.html%28%22Start%22%29%3B%0A%09%09button.style%28%22border-color%22%2C%20%22green%22%29%3B%0A%09%09button.style%28%22background%22%2C%20%22lightgreen%22%29%3B%0A%09%09frameRate%280%29%3B%0A%09%7D%20else%20%7B%0A%09%09frameRate%281%29%3B%0A%09%09isButtonStart%20%3D%20true%3B%0A%09%09button.html%28%22Stop%22%29%3B%0A%09%09button.style%28%22border-color%22%2C%20%22red%22%29%3B%0A%09%09button.style%28%22background%22%2C%20%22orange%22%29%3B%0A%09%09counter%20%3D%201%3B%0A%09%7D%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%0A%09%2F%2F%20create%20canvas%20%0A%09createCanvas%28X_CANVAS_SIZE%2C%20Y_CANVAS_SIZE%29%3B%0A%0A%09%2F%2F%20counter%0A%09counter%20%3D%200%3B%0A%0A%09%2F%2F%20create%20button%0A%09isButtonStart%20%3D%20false%3B%0A%09button%20%3D%20createButton%28%22Start%22%29%3B%0A%09button.size%2880%2C%2030%29%3B%0A%09button.position%28410%2C%2020%29%3B%0A%09%2F%2F%20cosmetics%0A%09button.style%28%22font-size%22%2C%20%2220px%22%29%3B%0A%09button.style%28%22border-radius%22%2C%20%2220px%22%29%3B%0A%09button.style%28%22color%22%2C%20%22black%22%29%3B%0A%09button.style%28%22border-color%22%2C%20%22green%22%29%3B%0A%09button.style%28%22background%22%2C%20%22lightgreen%22%29%3B%0A%09%2F%2F%20add%20button%20functionality%0A%09button.mouseClicked%28toggleButton%29%3B%0A%0A%09%2F%2F%20set%20text%20properties%0A%09textSize%28TEXT_SIZE%29%3B%0A%09textAlign%28CENTER%2C%20CENTER%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20draw%28%29%0A%2F%2F%0Afunction%20draw%28%29%20%7B%0A%09%2F%2F%20clear%20everything%0A%09background%28%22white%22%29%3B%0A%0A%09%2F%2F%20wait%20for%20start%0A%09if%20%28counter%20%3D%3D%3D%200%29%20%7B%0A%09%09frameRate%280%29%3B%0A%09%7D%0A%09%2F%2F%20speed%20control%0A%09if%20%28counter%20%3D%3D%3D%206%29%20%7B%0A%09%09frameRate%280.5%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%207%29%20%7B%0A%09%09frameRate%280.25%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%208%29%20%7B%0A%09%09frameRate%281%29%3B%0A%09%7D%0A%09%2F%2F%20stop%20animation%0A%09if%20%28counter%20%3D%3D%3D%2015%29%20%7B%0A%09%09toggleButton%28%29%3B%0A%09%7D%0A%0A%09%2F%2F%20color%20animation%0A%09if%20%28counter%20%3D%3D%3D%201%29%20%7B%0A%09%09console.log%28%22Vorw%C3%A4rtsschritt%3A%20x%20-%3E%20y%22%29%3B%0A%09%09drawInput%28%22cyan%22%29%3B%0A%09%09drawInputLayer%28%22cyan%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawInput%28%22black%22%29%3B%0A%09%09drawInputLayer%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%202%29%20%7B%0A%09%09drawWeightLayer1%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2013%29%20%7B%0A%09%09drawWeightLayer1%28%22red%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2014%29%20%7B%0A%09%09drawWeightLayer1%28%22yellow%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawWeightLayer1%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%203%29%20%7B%0A%09%09drawHiddenLayer%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2012%29%20%7B%0A%09%09drawHiddenLayer%28%22red%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawHiddenLayer%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%204%29%20%7B%0A%09%09drawWeightLayer2%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2010%29%20%7B%0A%09%09drawWeightLayer2%28%22red%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%2011%29%20%7B%0A%09%09drawWeightLayer2%28%22yellow%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawWeightLayer2%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%205%29%20%7B%0A%09%09drawOutputLayer%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%209%29%20%7B%0A%09%09drawOutputLayer%28%22red%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawOutputLayer%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%206%29%20%7B%0A%09%09drawOutput%28%22cyan%22%29%3B%0A%09%7D%20else%20if%20%28counter%20%3D%3D%3D%207%20%7C%7C%20counter%20%3D%3D%3D%208%29%20%7B%0A%09%09if%20%28counter%20%3D%3D%3D%208%29%20%7B%0A%09%09%09console.log%28%22R%C3%BCckw%C3%A4rtsschritt%3A%20Passe%20Gewichte%20an%22%29%3B%0A%09%09%7D%0A%09%09drawOutput%28%22red%22%29%3B%0A%09%7D%20else%20%7B%0A%09%09drawOutput%28%22black%22%29%3B%0A%09%7D%0A%09if%20%28counter%20%3D%3D%3D%207%29%20%7B%0A%09%09console.log%28%22Berechne%20Fehler%22%29%3B%0A%09%09drawError%28%22red%22%29%3B%0A%09%7D%0A%0A%09%2F%2F%20increase%20counter%0A%09counter%20%3D%20counter%20%2B%201%3B%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E&height=400px#MulilayerPerceptron}}
  
 </WRAP> </WRAP>
Zeile 118: Zeile 117:
 Werden als Fehlerfunktion $J$ der SE und als Stellvertreter-Funktion $f_{ML}(x)$ die Formeln für das FNN mit einem Hidden Layer verwendet, resultieren die partiellen Ableitungen in: Werden als Fehlerfunktion $J$ der SE und als Stellvertreter-Funktion $f_{ML}(x)$ die Formeln für das FNN mit einem Hidden Layer verwendet, resultieren die partiellen Ableitungen in:
  
-$\displaystyle\frac{\partial J[k]}{\partial v_{hi}} = \displaystyle\sum_{j=1}^{n_0}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \phi'_i(.) \cdot x_h[k]; \quad \displaystyle\frac{\partial J[k]}{\partial w_{ij}} = (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \phi_i(.)$+$\displaystyle\frac{\partial J[k]}{\partial v_{hi}} = \displaystyle\sum_{j=1}^{n_{output}}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \phi'_i(.) \cdot x_h[k]; \quad \displaystyle\frac{\partial J[k]}{\partial w_{ij}} = (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \phi_i(.)$
  
 wobei wobei
  
-$\phi_i(.)= \phi_i\left( \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right); \quad \varphi_j(.) = \varphi_j\left( \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i(.)\right); \quad \phi_0(.) = x_0 = 1$+$\phi_i(.)= \phi_i\left( \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right); \quad \varphi_j(.) = \varphi_j\left( \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i(.)\right); \quad \phi_0(.) = x_0 = 1$
  
 und $\phi'_i(.)$ und $\varphi'_j(.)$ die Ableitungen von $\phi_i(.)$ und $\varphi_j(.)$ sind. und $\phi'_i(.)$ und $\varphi'_j(.)$ die Ableitungen von $\phi_i(.)$ und $\varphi_j(.)$ sind.
Zeile 132: Zeile 131:
 Die Formeln für den SE für ein FNN mit einem Hidden Layer sind: Die Formeln für den SE für ein FNN mit einem Hidden Layer sind:
  
-$J[k] = \frac{1}{2} \displaystyle\sum_{j=1}^{n_0} (y_j[k]-d_j)^2\quad , \quad y_j[k] = \varphi_j \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right) \right]\enspace ,\quad \phi_0(.) = x_0 = 1$ . +$J[k] = \frac{1}{2} \displaystyle\sum_{j=1}^{n_{output}} (y_j[k]-d_j)^2\quad , \quad y_j[k] = \varphi_j \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right) \right]\enspace ,\quad \phi_0(.) = x_0 = 1$ . 
  
 \\ \\  \\ \\ 
 Die Formel für das Gewichts-Update des Gewichts $w_{ij}$ lässt sich durch mehrfaches konsequentes Anwenden der [[wpde>Kettenregel|Kettenregel]] ableiten: Die Formel für das Gewichts-Update des Gewichts $w_{ij}$ lässt sich durch mehrfaches konsequentes Anwenden der [[wpde>Kettenregel|Kettenregel]] ableiten:
  
-$\displaystyle\frac{\partial J[k]}{\partial w_{ij}} = \frac{1}{2} \displaystyle\frac{\partial}{\partial w_{ij}} (y_j[k]-d_j)^2 \quad$ (die Summe $\sum_{j=1}^{n_0}$ fällt weg, da es nur um ein bestimmtes $_j$ geht.)+$\displaystyle\frac{\partial J[k]}{\partial w_{ij}} = \frac{1}{2} \displaystyle\frac{\partial}{\partial w_{ij}} (y_j[k]-d_j)^2 \quad$ (die Summe $\sum_{j=1}^{n_{output}}$ fällt weg, da es nur um ein bestimmtes $_j$ geht.)
  
-$= (y_j[k] - d_j) \cdot \displaystyle\frac{\partial}{\partial w_{ij}} y_j[k] = (y_j[k] - d_j) \cdot \displaystyle\frac{\partial}{\partial w_{ij}} \varphi_j \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right)\right]$ +$= (y_j[k] - d_j) \cdot \displaystyle\frac{\partial}{\partial w_{ij}} y_j[k] = (y_j[k] - d_j) \cdot \displaystyle\frac{\partial}{\partial w_{ij}} \varphi_j \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right)\right]$ 
  
-$= (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \displaystyle\frac{\partial }{\partial w_{ij}} \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right)\right ] \quad$ (Ableitung der Funktion $\varphi_j(.)$ mal Ableitung des Inneren.)+$= (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \displaystyle\frac{\partial }{\partial w_{ij}} \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right)\right ] \quad$ (Ableitung der Funktion $\varphi_j(.)$ mal Ableitung des Inneren.)
  
-$= (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \displaystyle\frac{\partial }{\partial w_{ij}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right)  \quad$ (die Summe $\sum_{i=0}^{n_h}$ fällt weg, da es nur um ein bestimmtes $_i$ geht.)+$= (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \displaystyle\frac{\partial }{\partial w_{ij}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right)  \quad$ (die Summe $\sum_{i=0}^{n_{hidden}}$ fällt weg, da es nur um ein bestimmtes $_i$ geht.)
  
 $= (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \phi_i(.) \quad$ (das ist wie $\frac{\partial }{\partial x} ax = a$, wobei $x$ dem $w_{ij}$ und $a$ dem $\phi_i(.)$ entspricht.) $= (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \phi_i(.) \quad$ (das ist wie $\frac{\partial }{\partial x} ax = a$, wobei $x$ dem $w_{ij}$ und $a$ dem $\phi_i(.)$ entspricht.)
Zeile 150: Zeile 149:
 Die Formel für das Gewichts-Update des Gewichts $v_{hi}$ lässt sich durch mehrfaches konsequentes Anwenden der [[wpde>Kettenregel|Kettenregel]] ableiten: Die Formel für das Gewichts-Update des Gewichts $v_{hi}$ lässt sich durch mehrfaches konsequentes Anwenden der [[wpde>Kettenregel|Kettenregel]] ableiten:
  
-$\displaystyle\frac{\partial J[k]}{\partial v_{hi}} = \frac{1}{2} \displaystyle\sum_{j=1}^{n_0} \frac{\partial}{\partial v_{hi}}(y_j[k]-d_j)^2 = \displaystyle\sum_{j=1}^{n_0}(y_j[k] - d_j) \cdot \displaystyle\frac{\partial}{\partial v_{hi}} y_j[k] = \displaystyle\sum_{j=1}^{n_0}(y_j[k] - d_j) \cdot \displaystyle\frac{\partial}{\partial v_{hi}} \varphi_j \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right) \right]$+$\displaystyle\frac{\partial J[k]}{\partial v_{hi}} = \frac{1}{2} \displaystyle\sum_{j=1}^{n_{output}} \frac{\partial}{\partial v_{hi}}(y_j[k]-d_j)^2 = \displaystyle\sum_{j=1}^{n_{output}}(y_j[k] - d_j) \cdot \displaystyle\frac{\partial}{\partial v_{hi}} y_j[k] = \displaystyle\sum_{j=1}^{n_{output}}(y_j[k] - d_j) \cdot \displaystyle\frac{\partial}{\partial v_{hi}} \varphi_j \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right) \right]$
  
-$= \displaystyle\sum_{j=1}^{n_0}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \displaystyle\frac{\partial }{\partial v_{hi}} \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right)\right] = \displaystyle\sum_{j=1}^{n_0}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \displaystyle\frac{\partial}{\partial v_{hi}} \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right)$+$= \displaystyle\sum_{j=1}^{n_{output}}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \displaystyle\frac{\partial }{\partial v_{hi}} \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right)\right] = \displaystyle\sum_{j=1}^{n_{output}}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \displaystyle\frac{\partial}{\partial v_{hi}} \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right)$
  
  
-$= \displaystyle\sum_{j=1}^{n_0}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \phi'_i(.) \cdot \displaystyle\frac{\partial }{\partial v_{hi}} \left(\displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h\right)= \displaystyle\sum_{j=1}^{n_0}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \phi'_i(.) \cdot x_h$+$= \displaystyle\sum_{j=1}^{n_{output}}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \phi'_i(.) \cdot \displaystyle\frac{\partial }{\partial v_{hi}} \left(\displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h\right)= \displaystyle\sum_{j=1}^{n_{output}}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \phi'_i(.) \cdot x_h$
  
 \\  \\ 
Zeile 169: Zeile 168:
 <WRAP clear/> <WRAP clear/>
 \\  \\ 
-ℹ️ In diesem Kapitel geht es darum, einmal von Hand ein ganz einfaches neuronales Netz durchzurechnen. D.h. zuerst einen Vorwärtsschritt, um den Fehler zu berechnen. Dann einen Rückwärtsschritt um die neuen Gewicht-Einstellungen auszurechnen. Und schliessslich ein zweiter Vorwärtsschritt um erneut den neuen, hoffentlich kleineren Fehler zu bestimmen. Dafür verwenden wir das sehr einfache FNN aus Abb.3((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]])) und passen die Formeln aus dem letzten Kapitel an dieses FNN an (dadurch werden die Formeln vereinfacht).+ℹ️ In diesem Kapitel geht es darum, einmal von Hand ein ganz einfaches neuronales Netz durchzurechnen. D. h. zuerst einen Vorwärtsschritt, um den Fehler zu berechnen. Dann einen Rückwärtsschrittum die neuen Gewichtseinstellungen auszurechnen. Und schliessslich ein zweiter Vorwärtsschrittum erneut den neuen, hoffentlich kleineren Fehler zu bestimmen. Dafür verwenden wir das sehr einfache FNN aus Abb.3((eigene Darstellung, [[https://creativecommons.org/publicdomain/zero/1.0/deed.de|CC0 1.0]])) und passen die Formeln aus dem letzten Kapitel an dieses FNN an (dadurch werden die Formeln vereinfacht).
  
 | {{gdraw>1fHOsqlO8zdfaWbCEKRXPtb1q5eeaLUyo2BMzrxsEIDU width=373 left}} | | {{gdraw>1fHOsqlO8zdfaWbCEKRXPtb1q5eeaLUyo2BMzrxsEIDU width=373 left}} |
Zeile 185: Zeile 184:
 $\varphi(z) = z$ . $\varphi(z) = z$ .
  
-Da der Output Layer nur ein Neuron enthält, fällt das Summenzeichen für die Output-Neuronen weg. Und da als Aktivierungsfunktion $\varphi(.)$ die lineare Funktion verwendet wird, kann $\varphi(.)$ ebenfalls weggelassen werden ($\varphi(.)$ gibt das unverändert zurück, was ihr eingegeben wird). Somit vereinfacht sich die allgemeine Formel für ein ++FNN mit einem Hidden Layer (zum Sehen anklicken)|\\ \\ \\ Kopie der Formel für das FNN mit einem Hidden Layer aus dem letzten Kapitel zum Vergleich:\\ $y_j[k] = \varphi_j \left[ \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right) \right]\enspace ,\quad \phi_0(.) = x_0 = 1$\\ \\ \\ ++ zu:+Da der Output Layer nur ein Neuron enthält, fällt das Summenzeichen für die Output-Neuronen weg. Und da als Aktivierungsfunktion $\varphi(.)$ die lineare Funktion verwendet wird, kann $\varphi(.)$ ebenfalls weggelassen werden ($\varphi(.)$ gibt das unverändert zurück, was ihr eingegeben wird). Somit vereinfacht sich die allgemeine Formel für ein ++FNN mit einem Hidden Layer (zum Sehen anklicken)|\\ \\ \\ Kopie der Formel für das FNN mit einem Hidden Layer aus dem letzten Kapitel zum Vergleich:\\ $y_j[k] = \varphi_j \left[ \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right) \right]\enspace ,\quad \phi_0(.) = x_0 = 1$\\ \\ \\ ++ zu:
  
-$y_1[k] = \displaystyle\sum_{i=0}^{n_h} w_{i1}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right) \enspace ,\quad \phi_0(.) = x_0 = 1$+$y_1[k] = \displaystyle\sum_{i=0}^{n_{hidden}} w_{i1}[k] \cdot \phi_i \left(  \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right) \enspace ,\quad \phi_0(.) = x_0 = 1$
  
-Die ++Formel für den SE|\\ \\ \\ Kopie der Formel für den SE aus dem letzten Kapitel zum Vergleich:\\ $J[k] = \frac{1}{2} \displaystyle\sum_{j=1}^{n_0} (y_j[k]-d_j)^2$\\ \\ \\ ++ vereinfacht sich zu:+Die ++Formel für den SE|\\ \\ \\ Kopie der Formel für den SE aus dem letzten Kapitel zum Vergleich:\\ $J[k] = \frac{1}{2} \displaystyle\sum_{j=1}^{n_{output}} (y_j[k]-d_j)^2$\\ \\ \\ ++ vereinfacht sich zu:
  
 $J[k] = \displaystyle\frac{1}{2} (y_1[k]-d_1)^2$ $J[k] = \displaystyle\frac{1}{2} (y_1[k]-d_1)^2$
Zeile 197: Zeile 196:
 $v_{h1}[k+1] = v_{h1}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial v_{h1}}\enspace ;\quad w_{i1}[k+1] = w_{i1}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial w_{i1}}$ $v_{h1}[k+1] = v_{h1}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial v_{h1}}\enspace ;\quad w_{i1}[k+1] = w_{i1}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial w_{i1}}$
  
-Da für die Aktivierungsfunktion $\varphi(.)$ die lineare Funktion verwendet wird und deren Ableitung $\varphi'(.) = 1$ ist, vereinfachen sich die ++Formel für die partiellen Ableitungen|\\ \\ \\ Kopie der Formel für die partiellen Ableitungen aus dem letzten Kapitel zum Vergleich:\\ $\displaystyle\frac{\partial J[k]}{\partial v_{hi}} = \displaystyle\sum_{j=1}^{n_0}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \phi'_i(.) \cdot x_h[k]\enspace ; \quad \displaystyle\frac{\partial J[k]}{\partial w_{ij}} = (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \phi_i(.)$\\ mit\\ $\phi_i(.)= \phi_i\left( \displaystyle\sum_{h=0}^{n_i} v_{hi}[k] \cdot x_h \right); \quad \varphi_j(.) = \varphi_j\left( \displaystyle\sum_{i=0}^{n_h} w_{ij}[k] \cdot \phi_i(.)\right)\enspace ; \quad \phi_0(.) = x_0 = 1$\\ \\ \\ ++ zu:+Da für die Aktivierungsfunktion $\varphi(.)$ die lineare Funktion verwendet wird und deren Ableitung $\varphi'(.) = 1$ ist, vereinfachen sich die ++Formel für die partiellen Ableitungen|\\ \\ \\ Kopie der Formel für die partiellen Ableitungen aus dem letzten Kapitel zum Vergleich:\\ $\displaystyle\frac{\partial J[k]}{\partial v_{hi}} = \displaystyle\sum_{j=1}^{n_{output}}(y_j[k] - d_j) \cdot \varphi'_j(.) \cdot w_{ij}[k] \cdot \phi'_i(.) \cdot x_h[k]\enspace ; \quad \displaystyle\frac{\partial J[k]}{\partial w_{ij}} = (y_j[k] - d_j) \cdot \varphi'_j(.) \cdot \phi_i(.)$\\ mit\\ $\phi_i(.)= \phi_i\left( \displaystyle\sum_{h=0}^{n_{input}} v_{hi}[k] \cdot x_h \right); \quad \varphi_j(.) = \varphi_j\left( \displaystyle\sum_{i=0}^{n_{hidden}} w_{ij}[k] \cdot \phi_i(.)\right)\enspace ; \quad \phi_0(.) = x_0 = 1$\\ \\ \\ ++ zu:
  
 $\displaystyle\frac{\partial J[k]}{\partial v_{h1}} = (y_1[k] - d_1) \cdot w_{11}[k] \cdot \phi'_1[k](.) \cdot x_h[k]\enspace ; \quad \displaystyle\frac{\partial J[k]}{\partial w_{i1}} = (y_1[k] - d_1) \cdot \phi_i[k](.)$ $\displaystyle\frac{\partial J[k]}{\partial v_{h1}} = (y_1[k] - d_1) \cdot w_{11}[k] \cdot \phi'_1[k](.) \cdot x_h[k]\enspace ; \quad \displaystyle\frac{\partial J[k]}{\partial w_{i1}} = (y_1[k] - d_1) \cdot \phi_i[k](.)$
Zeile 203: Zeile 202:
 mit mit
  
-$\phi_1(.)= \phi_1\left( \displaystyle\sum_{h=0}^{n_i} v_{h1}[k] \cdot x_h \right)\enspace ; \quad x_0 = 1$+$\phi_1(.)= \phi_1\left( \displaystyle\sum_{h=0}^{n_{input}} v_{h1}[k] \cdot x_h \right)\enspace ; \quad x_0 = 1$
  
 Da für $\phi_1(.)$ die logistische Funktion gewählt wurde, wird die Ableitung $\phi'_1(.)$ zu: ++(für die Herleitung hier klicken)|\\ \\ \\ $\phi(z) = \displaystyle\frac{1}{1 + e^{-z}}$\\ \\ $\displaystyle\frac{d}{dz}\phi(z)= \frac{d}{dz}\left[\frac{1}{1+e^{-z}}\right] = -1 \cdot \frac{1}{(1+e^{-z})^2} \cdot \frac{d}{dz}\left[1+e^{-z}\right] = \frac{e^{-z}}{(1+e^{-z})^2}=$\\ \\ $\displaystyle\frac{1}{1+e^{-z}}\cdot \frac{e^{-z}}{1+e^{-z}} = \frac{1}{1+e^{-z}}\cdot \frac{1+e^{-z}-1}{1+e^{-z}}=$\\ \\ $\displaystyle\frac{1}{1+e^{-z}} \cdot \left( \frac{1+e^{-z}}{1+e^{-z}}-\frac{1}{1+e^{-z}} \right) = \frac{1}{1+e^{-z}} \cdot \left( 1-\frac{1}{1+e^{-z}} \right) =$\\ \\ $\phi_1(.) \cdot (1-\phi_1(.))$\\ \\ \\ ++ Da für $\phi_1(.)$ die logistische Funktion gewählt wurde, wird die Ableitung $\phi'_1(.)$ zu: ++(für die Herleitung hier klicken)|\\ \\ \\ $\phi(z) = \displaystyle\frac{1}{1 + e^{-z}}$\\ \\ $\displaystyle\frac{d}{dz}\phi(z)= \frac{d}{dz}\left[\frac{1}{1+e^{-z}}\right] = -1 \cdot \frac{1}{(1+e^{-z})^2} \cdot \frac{d}{dz}\left[1+e^{-z}\right] = \frac{e^{-z}}{(1+e^{-z})^2}=$\\ \\ $\displaystyle\frac{1}{1+e^{-z}}\cdot \frac{e^{-z}}{1+e^{-z}} = \frac{1}{1+e^{-z}}\cdot \frac{1+e^{-z}-1}{1+e^{-z}}=$\\ \\ $\displaystyle\frac{1}{1+e^{-z}} \cdot \left( \frac{1+e^{-z}}{1+e^{-z}}-\frac{1}{1+e^{-z}} \right) = \frac{1}{1+e^{-z}} \cdot \left( 1-\frac{1}{1+e^{-z}} \right) =$\\ \\ $\phi_1(.) \cdot (1-\phi_1(.))$\\ \\ \\ ++
Zeile 226: Zeile 225:
  
 \\  \\ 
-**Vorwärtsschritt zum Zeitpunkt [k] inklusive Berechnung des Fehlerwerts **+**Vorwärtsschritt zum Zeitpunkt [k] inklusive Berechnung des Fehlerwerts** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen)
  
-| $a_h[k] = \displaystyle\sum_{h=0}^{n_i} v_{h1}[k] \cdot x_h = v_{01}[k] + v_{11}[k]\cdot x_1 + v_{21}[k]\cdot x_2 =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0ArKQOwgC+QA#3017266837e2a42a}} | +| $a_1[k] = \displaystyle\sum_{h=0}^{n_{input}} v_{h1}[k] \cdot x_h = v_{01}[k] + v_{11}[k]\cdot x_1 + v_{21}[k]\cdot x_2 =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0ArKQOwgC+QA#3017266837e2a42a}} | 
-| $\phi_1[k](.) = \displaystyle\frac{1}{1 + e^{-a_h[k]}} =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDMAbACwgC+QA#8157b9f2738d5bad}} | +| $\phi_1[k](.) = \displaystyle\frac{1}{1 + e^{-a_1[k]}} =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDMAbACwgC+QA#8157b9f2738d5bad}} | 
-| $y_1[k] = \displaystyle\sum_{i=0}^{n_h} w_{i1}[k] \cdot \phi_i[k](.) = w_{01}[k] + w_{11}[k]\cdot \phi_1[k](.) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDMArANr4CMAuiAL5A#33570ee52b21cbaf}}|+| $y_1[k] = \displaystyle\sum_{i=0}^{n_{hidden}} w_{i1}[k] \cdot \phi_i[k](.) = w_{01}[k] + w_{11}[k]\cdot \phi_1[k](.) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDMArAIwgC+QA#33570ee52b21cbaf}} |
 | $J[k] = \displaystyle\frac{1}{2} (y_1[k]-d_1)^2 = $ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAjAHQAMArMSAL5A#572430543d67a8d1}} | | $J[k] = \displaystyle\frac{1}{2} (y_1[k]-d_1)^2 = $ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAjAHQAMArMSAL5A#572430543d67a8d1}} |
  
 \\  \\ 
-**Rückwärtsschritt zum Zeitpunkt [k] inklusive Gewicht-Update **+**Rückwärtsschritt zum Zeitpunkt [k] inklusive Gewicht-Update** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen)
  
-| $(y_1[k]-d_1) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAIwB0ALKQJwgC+QA#afc5eca7b986aab6}}| +| $\phi'_1[k](.)= \phi_1[k](.) \cdot (1 - \phi_1[k](.)) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQBMAzMSAL5A#8a6433a6600f1ecd}} |
-| $\phi'_1[k](.)= \phi_1[k](.) \cdot (1 - \phi_1[k](.)) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQBMAzANoCMxAuiAL5A#8a6433a6600f1ecd}} |+
 | $\displaystyle\frac{\partial J[k]}{\partial w_{01}} = (y_1[k] - d_1) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAIwB0ALKQJwgC+QA#3e1e02404ff2b201}} | | $\displaystyle\frac{\partial J[k]}{\partial w_{01}} = (y_1[k] - d_1) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAIwB0ALKQJwgC+QA#3e1e02404ff2b201}} |
 | $\displaystyle\frac{\partial J[k]}{\partial w_{11}} = (y_1[k] - d_1) \cdot \phi_1[k](.) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0ArAEwDsIAvkA#a5e510e211dd60dd}} | | $\displaystyle\frac{\partial J[k]}{\partial w_{11}} = (y_1[k] - d_1) \cdot \phi_1[k](.) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0ArAEwDsIAvkA#a5e510e211dd60dd}} |
-| $\displaystyle\frac{\partial J[k]}{\partial v_{01}} = (y_1[k] - d_1) \cdot w_{11}[k] \cdot \phi'_1[k](.) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQBMAHANqkCcAuiAL5A#8b42d6ec22e5a0e2}} | +| $\displaystyle\frac{\partial J[k]}{\partial v_{01}} = (y_1[k] - d_1) \cdot w_{11}[k] \cdot \phi'_1[k](.) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQBMAHAJwgC+QA#8b42d6ec22e5a0e2}} | 
-| $\displaystyle\frac{\partial J[k]}{\partial v_{11}} = (y_1[k] - d_1) \cdot w_{11}[k] \cdot \phi'_1[k](.) \cdot x_1[k] =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDMALANoBsA7ALogC+QA#f56b25c1d90bfd03}} |+| $\displaystyle\frac{\partial J[k]}{\partial v_{11}} = (y_1[k] - d_1) \cdot w_{11}[k] \cdot \phi'_1[k](.) \cdot x_1[k] =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDMALAOwgC+QA#f56b25c1d90bfd03}} |
 | $\displaystyle\frac{\partial J[k]}{\partial v_{21}} = (y_1[k] - d_1) \cdot w_{11}[k] \cdot \phi'_1[k](.) \cdot x_2[k] =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0ATIaSAL5A#d160dc27095da0cb}} | | $\displaystyle\frac{\partial J[k]}{\partial v_{21}} = (y_1[k] - d_1) \cdot w_{11}[k] \cdot \phi'_1[k](.) \cdot x_2[k] =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0ATIaSAL5A#d160dc27095da0cb}} |
-| $w_{01}[k+1] = w_{01}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial w_{01}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQCcArANoDMALALogC+QA#eecf21da3b4d3638}} | +| $w_{01}[k+1] = w_{01}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial w_{01}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQCcArACwgC+QA#eecf21da3b4d3638}} | 
-| $w_{11}[k+1] = w_{11}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial w_{11}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0A7AKwDa5AbALogC+QA#0f0c95084fd03ed1}} | +| $w_{11}[k+1] = w_{11}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial w_{11}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0A7AKwBsIAvkA#0f0c95084fd03ed1}} | 
-| $v_{01}[k+1] = v_{01}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial v_{01}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQCMA7ANqkAcAuiAL5A#cae0163ecf055c43}} |+| $v_{01}[k+1] = v_{01}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial v_{01}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQCMA7KSAL5A#cae0163ecf055c43}} |
 | $v_{11}[k+1] = v_{11}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial v_{11}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0AzAJwBMIAvkA#58d65877583d207f}} | | $v_{11}[k+1] = v_{11}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial v_{11}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0AzAJwBMIAvkA#58d65877583d207f}} |
 | $v_{21}[k+1] = v_{21}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial v_{21}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQBsAjABwgC+QA#bbff551455d4ad14}} | | $v_{21}[k+1] = v_{21}[k] - \mu \cdot \displaystyle\frac{\partial J[k]}{\partial v_{21}}=$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQBsAjABwgC+QA#bbff551455d4ad14}} |
  
 \\  \\ 
-**Vorwärtsschritt zum Zeitpunkt [k] inklusive Berechnung des Fehlerwerts **+**Vorwärtsschritt zum Zeitpunkt [k] inklusive Berechnung des Fehlerwerts** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen)
  
-| $a_h[k+1] = \displaystyle\sum_{h=0}^{n_i} v_{h1}[k+1] \cdot x_h = v_{01}[k+1] + v_{11}[k+1]\cdot x_1 + v_{21}[k+1]\cdot x_2 =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0A7AEwDaArAGwC6IAvkA#a1e3255cf55bfbfd}} | +| $a_1[k+1] = \displaystyle\sum_{h=0}^{n_{input}} v_{h1}[k+1] \cdot x_h = v_{01}[k+1] + v_{11}[k+1]\cdot x_1 + v_{21}[k+1]\cdot x_2 =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iAtAAwB0A7AEwBsIAvkA#a1e3255cf55bfbfd}} | 
-| $\phi_1[k+1](.) = \displaystyle\frac{1}{1 + e^{-a_h[k+1]}} =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDMATANoCsAbALogC+QA#34d89511cfbb4c40}} | +| $\phi_1[k+1](.) = \displaystyle\frac{1}{1 + e^{-a_1[k+1]}} =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDMATAGwgC+QA#34d89511cfbb4c40}} | 
-| $y_1[k+1] = \displaystyle\sum_{i=0}^{n_h} w_{i1}[k+1] \cdot \phi_i[k+1](.) = w_{01}[k+1] + w_{11}[k+1]\cdot \phi_1[k+1](.) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDs+A2sQBwC6IAvkA#8fba5b9000846eb1}} | +| $y_1[k+1] = \displaystyle\sum_{i=0}^{n_{hidden}} w_{i1}[k+1] \cdot \phi_i[k+1](.) = w_{01}[k+1] + w_{11}[k+1]\cdot \phi_1[k+1](.) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQDs+AHCAL5A#8fba5b9000846eb1}} | 
-| $J[k+1] = \displaystyle\frac{1}{2} (y_1[k+1]-d_1)^2 = $ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQCsAnANoBsA7ALogC+QA#188774b08b6a540e}} |+| $J[k+1] = \displaystyle\frac{1}{2} (y_1[k+1]-d_1)^2 = $ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQCsAnAGwgC+QA#188774b08b6a540e}} |
  
 \\  \\ 
-**Vergleich der Fehlerwerte $J[k+1]$ und $J[k]$**+**Vergleich der Fehlerwerte $J[k+1]$ und $J[k]$** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen)
  
-Der Fehler hat durch das Training um so viel abgenommen (d.h. trage das Resultat von $J[k] - J[k+1]$ ein): {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQAsArANoDMxAuiAL5A#9dff039c86a546be}}+Der Fehler hat durch das Training um so viel abgenommen (d.h. trage das Resultat von $J[k] - J[k+1]$ ein): {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQAsArMSAL5A#9dff039c86a546be}}
 </WRAP> </WRAP>
  
p/ki/machinelearning4.1783844033.txt.gz · Zuletzt geändert: von Ralf Kretzschmar