Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| ef:ki:nn [2026/04/21 19:10] – andristn | ef:ki:nn [2026/04/23 14:17] (aktuell) – andristn | ||
|---|---|---|---|
| Zeile 88: | Zeile 88: | ||
| < | < | ||
| ⎧ z wenn z > 0 | ⎧ z wenn z > 0 | ||
| - | f(z) = max(0, z) = ⎨ | + | f(z) = max(0, z) = ⎨ |
| ⎩ 0 sonst | ⎩ 0 sonst | ||
| </ | </ | ||
| Zeile 266: | Zeile 266: | ||
| **2. Ableitung der Softmax nach der gewichteten Summe** | **2. Ableitung der Softmax nach der gewichteten Summe** | ||
| - | Wie Softmax intern abgeleitet | + | Hier wird es etwas komplizierter. Softmax ist nämlich eine Funktion, bei der jeder Output |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | ──── | + | |
| - | | + | |
| - | </ | + | |
| **3. Ableitung der gewichteten Summe nach dem Gewicht** | **3. Ableitung der gewichteten Summe nach dem Gewicht** | ||
| Zeile 286: | Zeile 280: | ||
| **Alles einsetzen** | **Alles einsetzen** | ||
| - | Jetzt setzen wir die drei Teile in die Kettenregel | + | Wenn man nun alle drei Teile in die Kettenregel |
| - | + | ||
| - | < | + | |
| - | | + | |
| - | ──── | + | |
| - | | + | |
| - | </ | + | |
| - | + | ||
| - | Wenn man das ausrechnet und die Terme zusammenfasst (das y im Nenner kürzt sich teilweise weg), bleibt am Ende dieser wunderschön einfache Ausdruck übrig: | + | |
| < | < | ||
| Zeile 339: | Zeile 325: | ||
| Ist die Lernrate zu gross, springt das Netz über das Minimum hinweg. Ist sie zu klein, braucht das Training ewig. 0.01 ist ein guter Startwert für unser Netz. | Ist die Lernrate zu gross, springt das Netz über das Minimum hinweg. Ist sie zu klein, braucht das Training ewig. 0.01 ist ein guter Startwert für unser Netz. | ||
| + | |||
| + | **Das Ganze als Matrix** | ||
| + | |||
| + | Bisher haben wir so getan, als hätten wir nur ein einziges Gewicht w und einen einzigen Input x. In Wirklichkeit ist w natürlich die ganze **Gewichtsmatrix W** und x der ganze **Input-Vektor**. Schauen wir uns ein Mini-Beispiel mit 3 Inputs und 2 Hidden-Neuronen an: | ||
| + | |||
| + | < | ||
| + | X = [ x₁ x₂ x₃ ] | ||
| + | |||
| + | |||
| + | ⎡ w₁₁ | ||
| + | W = ⎢ w₂₁ | ||
| + | ⎣ w₃₁ | ||
| + | |||
| + | |||
| + | b = [ b₁ b₂ ] | ||
| + | </ | ||
| + | |||
| + | Die gewichtete Summe ist dann eine Matrix-Multiplikation: | ||
| + | |||
| + | < | ||
| + | z = X · W + b | ||
| + | |||
| + | = [x₁·w₁₁ + x₂·w₂₁ + x₃·w₃₁ + b₁ , x₁·w₁₂ + x₂·w₂₂ + x₃·w₃₂ + b₂] | ||
| + | </ | ||
| + | |||
| + | Für die Ableitung gilt genau dasselbe Prinzip wie vorher, nur eben für alle Gewichte auf einmal. Statt δ · x schreiben wir die Matrix-Version: | ||
| + | |||
| + | < | ||
| + | ∂L | ||
| + | ──── | ||
| + | ∂W | ||
| + | </ | ||
| + | |||
| + | Das Xᵀ (X transponiert) sorgt dabei einfach dafür, dass die Dimensionen zusammenpassen. Im Code ist genau das diese Zeile, die du schon von oben kennst: | ||
| + | |||
| + | <code python> | ||
| + | self.W1 -= self.lr * (X.T @ d1) / N | ||
| + | </ | ||
| + | |||
| + | Der Vorteil der Matrix-Schreibweise ist enorm: statt 100' | ||
| ==== Schritt 3: Fehler zurück durch das Netz ==== | ==== Schritt 3: Fehler zurück durch das Netz ==== | ||
| Zeile 358: | Zeile 384: | ||
| </ | </ | ||
| - | Jetzt muss dieser Fehler zurück durch die Gewichte W₂ in die Hidden Layer propagiert werden. | + | Jetzt muss dieser Fehler zurück durch die Gewichte W₂ in die Hidden Layer propagiert werden. |
| + | |||
| + | < | ||
| + | z₁ ──► | ||
| + | | ||
| + | </ | ||
| + | |||
| + | z₁ wirkt also über mehrere Zwischenschritte auf den Loss. Die Kettenregel sagt uns: | ||
| + | |||
| + | < | ||
| + | | ||
| + | ──── | ||
| + | | ||
| + | </ | ||
| + | |||
| + | Schauen wir uns jeden Teil an: | ||
| + | |||
| + | * **∂L / ∂z₂** | ||
| + | * **∂z₂ / ∂a₁** | ||
| + | * **∂a₁ / ∂z₁** | ||
| + | |||
| + | Setzen wir alles zusammen: | ||
| < | < | ||
| Zeile 364: | Zeile 411: | ||
| </ | </ | ||
| - | Das ReLU' ist die Ableitung von ReLU, also '' | + | Das ⊙ steht dabei für " |
| + | |||
| + | Das ReLU'(z₁) | ||
| <code python> | <code python> | ||
| Zeile 455: | Zeile 504: | ||
| * **Tiefe neuronale Netze (Deep Neural Networks)** – Netze mit vielen Hidden Layers | * **Tiefe neuronale Netze (Deep Neural Networks)** – Netze mit vielen Hidden Layers | ||
| * **flache vs. tiefe Netze** – eine vs. viele Hidden Layers, Komplexität und Rechenaufwand steigen | * **flache vs. tiefe Netze** – eine vs. viele Hidden Layers, Komplexität und Rechenaufwand steigen | ||
| + | |||
| + | ===== Quellen ===== | ||
| + | |||
| + | ==== Videos ==== | ||
| + | |||
| + | Die Videoserie von // | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | ==== Wikipedia ==== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | ==== Weiterführende Literatur ==== | ||
| + | |||
| + | * Michael Nielsen: //Neural Networks and Deep Learning// – kostenloses Online-Buch unter [[http:// | ||
| + | * Ian Goodfellow, Yoshua Bengio, Aaron Courville: //Deep Learning// – frei verfügbar unter [[https:// | ||
| + | |||
| + | ==== Bibliotheken und Tools ==== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||