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

Fonction softmax

Transformez des scores bruts en probabilités dont la somme vaut 1, sans dépassement de capacité avec de grandes valeurs.

Ce que vous allez apprendre

  • Transformer des scores en probabilités
  • Soustraire le maximum pour éviter le dépassement
  • Faire en sorte que les sorties somment à 1

Problème

La fonction softmax transforme une liste de scores (logits) en probabilités. Les modèles de langage s'en servent pour choisir le mot suivant :

softmax(x)_i = e^(x_i) / (e^(x_1) + e^(x_2) + … + e^(x_n))

De grands scores font déborder e^x : soustrayez d'abord le plus grand score de chaque score. Le résultat est mathématiquement identique.

Implémentez softmax(logits).

Entrée

logits : une liste de scores.

Sortie

Renvoyez la liste des probabilités, dans le même ordre. Elles sont toutes entre 0 et 1 et leur somme vaut 1.

Contraintes

1 ≤ longueur ≤ 1 000

-1 000 ≤ chaque score ≤ 1 000

Exemples

Exemple 1
Entrée :
logits = [1.0, 2.0, 3.0]

Sortie attendue :
expected = [0.090031, 0.244728, 0.665241]
Entrée :
std::vector<double> logits = {1.0, 2.0, 3.0};

Sortie attendue :
std::vector<double> expected = {0.090031, 0.244728, 0.665241};
Entrée :
double[] logits = new double[] {1.0, 2.0, 3.0};

Sortie attendue :
double[] expected = new double[] {0.090031, 0.244728, 0.665241};

Explication

e¹ ≈ 2.718, e² ≈ 7.389 et e³ ≈ 20.086 font au total 30.193, donc les probabilités sont d'environ [0.090031, 0.244728, 0.665241].

Exemple 2
Entrée :
logits = [1000.0, 1000.0]

Sortie attendue :
expected = [0.5, 0.5]
Entrée :
std::vector<double> logits = {1000.0, 1000.0};

Sortie attendue :
std::vector<double> expected = {0.5, 0.5};
Entrée :
double[] logits = new double[] {1000.0, 1000.0};

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

Explication

Calculer directement e^1000 provoque un dépassement de capacité. Soustraire le maximum donne [0, 0], et e⁰ / (e⁰ + e⁰) = 0.5 pour les deux.

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.