Todos los desafíos
Fácil 0 resueltos 0% de aceptación

Función softmax

Convierte puntuaciones en bruto en probabilidades que suman 1, sin desbordamiento con valores grandes.

Lo que aprenderás

  • Convertir puntuaciones en probabilidades
  • Restar el máximo para evitar el desbordamiento
  • Hacer que las salidas sumen 1

Problema

Ver original (inglés)

La función softmax convierte una lista de puntuaciones (logits) en probabilidades. Los modelos de lenguaje la usan para elegir la siguiente palabra:

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

Las puntuaciones grandes hacen que e^x se desborde, así que primero resta la puntuación más alta a todas las puntuaciones. El resultado es matemáticamente el mismo.

Implementa softmax(logits).

Entrada

logits: Una lista de puntuaciones.

Salida

Devuelve la lista de probabilidades en el mismo orden. Todas están entre 0 y 1 y suman 1.

Restricciones

1 ≤ longitud ≤ 1000

-1000 ≤ cada puntuación ≤ 1000

Ejemplos

Ejemplo 1
Entrada:
logits = [1.0, 2.0, 3.0]

Salida esperada:
expected = [0.090031, 0.244728, 0.665241]
Entrada:
std::vector<double> logits = {1.0, 2.0, 3.0};

Salida esperada:
std::vector<double> expected = {0.090031, 0.244728, 0.665241};
Entrada:
double[] logits = new double[] {1.0, 2.0, 3.0};

Salida esperada:
double[] expected = new double[] {0.090031, 0.244728, 0.665241};

Explicación

e¹ ≈ 2.718, e² ≈ 7.389 y e³ ≈ 20.086 suman 30.193, así que las probabilidades son aproximadamente [0.090031, 0.244728, 0.665241].

Ejemplo 2
Entrada:
logits = [1000.0, 1000.0]

Salida esperada:
expected = [0.5, 0.5]
Entrada:
std::vector<double> logits = {1000.0, 1000.0};

Salida esperada:
std::vector<double> expected = {0.5, 0.5};
Entrada:
double[] logits = new double[] {1000.0, 1000.0};

Salida esperada:
double[] expected = new double[] {0.5, 0.5};

Explicación

Calcular e^1000 directamente produce desbordamiento. Restar el máximo da [0, 0], y e⁰ / (e⁰ + e⁰) = 0.5 para ambos.

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.