| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
| p:ki:machinelearning4 [2026/07/12 19:28] – [2. Das Gradientenverfahren von Hand durchrechnen] Ralf Kretzschmar | p:ki:machinelearning4 [2026/07/31 12:02] (aktuell) – [1.2 Fehlerfunktion] Ralf Kretzschmar |
|---|
| |
| * **Neuron:** Ein Neuron ist eine Verarbeitungseinheit eines neuronalen Netzes. Ein Neuron bekommt einen Wert (Aktivierung), verarbeitet diesen mit seiner Aktivierungsfunktion und gibt das Resultat weiter. | * **Neuron:** Ein Neuron ist eine Verarbeitungseinheit eines neuronalen Netzes. Ein 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_i$ (der Anzahl Input-Neuronen) durchnummeriert werden. Jedes Input-Neuron gibt den Eingangswert $x_h$, den es bekommt, unverarbeitet weiter. Das Input-Neuron $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_{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. |
| * **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 bekommt als Aktivierung die gewichtete Summe der Ausgänge der vorangehenden Neuronen und gibt den Funktionswert der zugehörigen Aktivierungsfunktion $\phi_i$ weiter. Das Hidden-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. |
| * **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 bekommt als Aktivierung die gewichtete Summe der Ausgänge der vorangehenden Neuronen und gibt gibt den Funktionswert der zugehörigen Aktivierungsfunktion $\varphi_j$ als Ausgangswert $y_j$ aus. Im Output Layer gibt es keinen Bias. | * **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. |
| * **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]])) | |
| |
| ℹ️ 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$ . |
| |
| \\ | \\ |
| ℹ️ 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)). |
| 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)). |
| 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]$. |
| - 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> |
| 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. |
| 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.) |
| 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$ |
| |
| \\ | \\ |
| $\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$ |
| $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](.)$ |
| 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(.))$\\ \\ \\ ++ |
| **Vorwärtsschritt zum Zeitpunkt [k] inklusive Berechnung des Fehlerwerts** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen) | **Vorwärtsschritt zum Zeitpunkt [k] inklusive Berechnung des Fehlerwerts** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen) |
| |
| | $a_1[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_1[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** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen) | **Rückwärtsschritt zum Zeitpunkt [k] inklusive Gewicht-Update** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen) |
| |
| | $\phi'_1[k](.)= \phi_1[k](.) \cdot (1 - \phi_1[k](.)) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQBMAzANoCMxAuiAL5A#8a6433a6600f1ecd}} | | | $\phi'_1[k](.)= \phi_1[k](.) \cdot (1 - \phi_1[k](.)) =$ | {{gem/match?0=N4IgLgpgHmIFwhAGhAJwgc2gB3iADAHQBMAzMSAL5A#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** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen) | **Vorwärtsschritt zum Zeitpunkt [k] inklusive Berechnung des Fehlerwerts** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen) |
| |
| | $a_1[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_1[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]$** (immer mit den auf drei Stellen gerundeten Resultaten weiterrechnen) | **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> |
| |