Tous les défis
Facile 0 résolus 0 % de réussite

Fonctions d'activation

Appliquez sigmoïde, ReLU, Leaky ReLU ou tanh à chaque valeur d'une liste.

Ce que vous allez apprendre

  • Implémenter les fonctions d'activation courantes
  • Comprendre pourquoi les réseaux ont besoin de non-linéarité
  • Éviter le dépassement dans la sigmoïde

Problème

Une fois qu'un neurone a additionné ses entrées pondérées, une fonction d'activation décide de sa sortie. Sans elle, un réseau de neurones ne pourrait apprendre que des droites.

Implémentez activate(name, values) et appliquez la fonction indiquée à chaque valeur :

nameformule
"sigmoid"1 / (1 + e^(-x))
"relu"max(0, x)
"leaky_relu"x si x > 0, sinon 0.01 × x
"tanh"(e^x - e^(-x)) / (e^x + e^(-x))

Entrée

name : l'une des valeurs "sigmoid", "relu", "leaky_relu" ou "tanh".

values : une liste de nombres.

Sortie

Renvoyez une liste où l'activation est appliquée à chaque valeur, dans le même ordre.

Contraintes

1 ≤ longueur de values ≤ 1 000

-50 ≤ chaque valeur ≤ 50

Exemples

Exemple 1
Entrée :
name = "sigmoid"
values = [0.0, 2.0, -2.0]

Sortie attendue :
expected = [0.5, 0.880797, 0.119203]
Entrée :
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0, -2.0};

Sortie attendue :
std::vector<double> expected = {0.5, 0.880797, 0.119203};
Entrée :
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0, -2.0};

Sortie attendue :
double[] expected = new double[] {0.5, 0.880797, 0.119203};

Explication

sigmoid(0) = 1 / (1 + 1) = 0.5, sigmoid(2) ≈ 0.880797 et sigmoid(-2) ≈ 0.119203. La sigmoïde ramène n'importe quel nombre entre 0 et 1.

Exemple 2
Entrée :
name = "relu"
values = [-1.5, 0.0, 3.0]

Sortie attendue :
expected = [0.0, 0.0, 3.0]
Entrée :
std::string name = "relu";
std::vector<double> values = {-1.5, 0.0, 3.0};

Sortie attendue :
std::vector<double> expected = {0.0, 0.0, 3.0};
Entrée :
string name = "relu";
double[] values = new double[] {-1.5, 0.0, 3.0};

Sortie attendue :
double[] expected = new double[] {0.0, 0.0, 3.0};

Explication

ReLU garde les valeurs positives et remplace les valeurs négatives par 0 : [0, 0, 3].

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Chaque activation s’applique indépendamment à chaque nombre, donc concentre-toi sur une valeur à la fois.

Indice 2

Utilise la formule correspondant au nom donné et construis une nouvelle liste à partir des résultats.

Indice 3

Fais attention aux entrées négatives, surtout pour ReLU et la pente faible du côté non positif.

Complexité attendue

temps O(n), espace supplémentaire O(n)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.