Zurück zu den Herausforderungen
Einfach 0 gelöst 0% Erfolgsquote

Ableitungen von Aktivierungsfunktionen

Berechne die Ableitung von Sigmoid, ReLU, Leaky ReLU oder tanh an jedem Wert, die Steigungen, die Backpropagation braucht.

Das lernst du

  • Steigungen gängiger Aktivierungen berechnen
  • Die Sigmoid-Ausgabe für ihre Ableitung wiederverwenden
  • Die Bausteine für Backpropagation vorbereiten

Problem

Backpropagation multipliziert Gradienten mit der Ableitung jeder Aktivierungsfunktion. Implementiere activation_derivative(name, values) und gib die Ableitung an jedem Wert zurück:

nameAbleitung
"sigmoid"s × (1 - s), wobei s = 1 / (1 + e^(-x))
"relu"1, wenn x > 0, sonst 0
"leaky_relu"1, wenn x > 0, sonst 0.01
"tanh"1 - tanh(x)²

Eingabe

name: Einer der Werte "sigmoid", "relu", "leaky_relu" oder "tanh".

values: Die Eingaben x der Aktivierung.

Ausgabe

Gib die Ableitung an jedem Wert in derselben Reihenfolge zurück.

Einschränkungen

1 ≤ Länge ≤ 1.000

-50 ≤ jeder Wert ≤ 50

Beispiele

Beispiel 1
Eingabe:
name = "sigmoid"
values = [0.0, 2.0]

Erwartete Ausgabe:
expected = [0.25, 0.104994]
Eingabe:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0};

Erwartete Ausgabe:
std::vector<double> expected = {0.25, 0.104994};
Eingabe:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0};

Erwartete Ausgabe:
double[] expected = new double[] {0.25, 0.104994};

Erläuterung

Bei 0 ist s = 0.5 und die Steigung 0.5 × 0.5 = 0.25, die steilste Stelle der Sigmoidfunktion. Bei 2 ist s ≈ 0.880797 und die Steigung etwa 0.104994.

Beispiel 2
Eingabe:
name = "relu"
values = [-3.0, 0.0, 4.5]

Erwartete Ausgabe:
expected = [0.0, 0.0, 1.0]
Eingabe:
std::string name = "relu";
std::vector<double> values = {-3.0, 0.0, 4.5};

Erwartete Ausgabe:
std::vector<double> expected = {0.0, 0.0, 1.0};
Eingabe:
string name = "relu";
double[] values = new double[] {-3.0, 0.0, 4.5};

Erwartete Ausgabe:
double[] expected = new double[] {0.0, 0.0, 1.0};

Erläuterung

ReLU ist für x ≤ 0 flach (Steigung 0) und hat für x > 0 die Steigung 1, also ist das Ergebnis [0, 0, 1].

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

Die Ableitung hängt vom Aktivierungstyp ab, also behandle jede Funktion für jeden Eingabewert separat.

Hinweis 2

Bei sigmoid und tanh verwende den Aktivierungs-Output oder den Funktionswert direkt statt ihn auf komplizierte Weise neu zu berechnen.

Hinweis 3

Achte auf die Vorzeichen-Grenzen: ReLU nutzt einen strikten Positivtest, während leaky ReLU für nichtpositive Werte eine kleine Steigung behält values.

Erwartete Komplexität

Zeit O(n), zusätzlicher Speicher O(n)

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.