Alle Herausforderungen
Einfach 0 gelöst 0% Erfolgsquote

Aktivierungsfunktionen

Wende Sigmoid, ReLU, Leaky ReLU oder tanh auf jeden Wert einer Liste an.

Das lernst du

  • Gängige Aktivierungsfunktionen implementieren
  • Verstehen, warum Netze Nichtlinearität brauchen
  • Überlauf in der Sigmoidfunktion vermeiden

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:

nameFormel
"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

Beispiel 1
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.

Beispiel 2
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.

Von anderen lernen

Community-Lösungen

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