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

Funciones de activación

Aplica sigmoide, ReLU, Leaky ReLU o tanh a cada valor de una lista.

Lo que aprenderás

  • Implementar las funciones de activación más comunes
  • Entender por qué las redes necesitan no linealidad
  • Evitar el desbordamiento en la sigmoide

Problema

Ver original (inglés)

Después de que una neurona suma sus entradas ponderadas, una función de activación decide su salida. Sin ella, una red neuronal solo podría aprender líneas rectas.

Implementa activate(name, values) y aplica la función indicada a cada valor:

namefórmula
"sigmoid"1 / (1 + e^(-x))
"relu"max(0, x)
"leaky_relu"x si x > 0, si no 0.01 × x
"tanh"(e^x - e^(-x)) / (e^x + e^(-x))

Entrada

name: Uno de "sigmoid", "relu", "leaky_relu" o "tanh".

values: Una lista de números.

Salida

Devuelve una lista con la activación aplicada a cada valor, en el mismo orden.

Restricciones

1 ≤ longitud de values ≤ 1000

-50 ≤ cada valor ≤ 50

Ejemplos

Ejemplo 1
Entrada:
name = "sigmoid"
values = [0.0, 2.0, -2.0]

Salida esperada:
expected = [0.5, 0.880797, 0.119203]
Entrada:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0, -2.0};

Salida esperada:
std::vector<double> expected = {0.5, 0.880797, 0.119203};
Entrada:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0, -2.0};

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

Explicación

sigmoid(0) = 1 / (1 + 1) = 0.5, sigmoid(2) ≈ 0.880797 y sigmoid(-2) ≈ 0.119203. La sigmoide comprime cualquier número en el rango de 0 a 1.

Ejemplo 2
Entrada:
name = "relu"
values = [-1.5, 0.0, 3.0]

Salida esperada:
expected = [0.0, 0.0, 3.0]
Entrada:
std::string name = "relu";
std::vector<double> values = {-1.5, 0.0, 3.0};

Salida esperada:
std::vector<double> expected = {0.0, 0.0, 3.0};
Entrada:
string name = "relu";
double[] values = new double[] {-1.5, 0.0, 3.0};

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

Explicación

ReLU conserva los valores positivos y convierte los negativos en 0: [0, 0, 3].

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Cada activación se aplica de forma independiente a cada número, así que concéntrate en un valor a la vez.

Pista 2

Usa la fórmula que corresponda al nombre dado y construye una nueva lista con los resultados.

Pista 3

Ten cuidado con los valores negativos, especialmente en ReLU y en la pendiente leaky en la parte no positiva.

Complejidad esperada

tiempo O(n), espacio extra O(n)

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.