Problem
Nachdem ein Neuron seine gewichteten Eingaben addiert hat, entscheidet eine Aktivierungsfunktion über seine Ausgabe. Ohne sie könnte ein neuronales Netz nur Geraden lernen.
Implementiere activate(name, values) und wende die genannte Funktion auf jeden Wert an:
| name | Formel |
|---|---|
"sigmoid" | 1 / (1 + e^(-x)) |
"relu" | max(0, x) |
"leaky_relu" | x, wenn x > 0, sonst 0.01 × x |
"tanh" | (e^x - e^(-x)) / (e^x + e^(-x)) |
Eingabe
name: Einer der Werte "sigmoid", "relu", "leaky_relu" oder "tanh".
values: Eine Liste von Zahlen.
Ausgabe
Gib eine Liste zurück, in der die Aktivierung auf jeden Wert angewendet wurde, in derselben Reihenfolge.
Einschränkungen
1 ≤ Länge von values ≤ 1.000
-50 ≤ jeder Wert ≤ 50
Beispiele
Eingabe:
name = "sigmoid"
values = [0.0, 2.0, -2.0]
Erwartete Ausgabe:
expected = [0.5, 0.880797, 0.119203]
Eingabe:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0, -2.0};
Erwartete Ausgabe:
std::vector<double> expected = {0.5, 0.880797, 0.119203};
Eingabe:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0, -2.0};
Erwartete Ausgabe:
double[] expected = new double[] {0.5, 0.880797, 0.119203};
Erläuterung
sigmoid(0) = 1 / (1 + 1) = 0.5, sigmoid(2) ≈ 0.880797 und sigmoid(-2) ≈ 0.119203. Sigmoid drückt jede Zahl in den Bereich von 0 bis 1.
Eingabe:
name = "relu"
values = [-1.5, 0.0, 3.0]
Erwartete Ausgabe:
expected = [0.0, 0.0, 3.0]
Eingabe:
std::string name = "relu";
std::vector<double> values = {-1.5, 0.0, 3.0};
Erwartete Ausgabe:
std::vector<double> expected = {0.0, 0.0, 3.0};
Eingabe:
string name = "relu";
double[] values = new double[] {-1.5, 0.0, 3.0};
Erwartete Ausgabe:
double[] expected = new double[] {0.0, 0.0, 3.0};
Erläuterung
ReLU behält positive Werte und macht negative Werte zu 0: [0, 0, 3].
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Jede Aktivierung wird unabhängig auf jede Zahl angewendet, also betrachte immer nur einen Wert auf einmal.
Hinweis 2
Nutze die Formel zum gegebenen Namen und baue daraus eine neue Liste.
Hinweis 3
Achte auf negative Eingaben, besonders bei ReLU und der leaky Steigung auf der nichtpositiven Seite.
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.