Todos os desafios
Fácil 0 resolvidos 0% de aceitação

Derivadas de funções de ativação

Calcule a derivada de sigmoid, ReLU, Leaky ReLU ou tanh em cada valor, as inclinações de que a retropropagação precisa.

O que você vai aprender

  • Calcular as inclinações das ativações comuns
  • Reutilizar a saída da sigmoide para sua derivada
  • Preparar as peças de que a retropropagação precisa

Problema

Ver original (inglês)

A retropropagação multiplica os gradientes pela derivada de cada função de ativação. Implemente activation_derivative(name, values) e retorne a derivada em cada valor:

nameDerivada
"sigmoid"s × (1 - s), onde s = 1 / (1 + e^(-x))
"relu"1 se x > 0, senão 0
"leaky_relu"1 se x > 0, senão 0.01
"tanh"1 - tanh(x)²

Entrada

name: Um entre "sigmoid", "relu", "leaky_relu" ou "tanh".

values: As entradas x da ativação.

Saída

Retorne a derivada em cada valor, na mesma ordem.

Restrições

1 ≤ comprimento ≤ 1.000

-50 ≤ cada valor ≤ 50

Exemplos

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

Saída esperada:
expected = [0.25, 0.104994]
Entrada:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0};

Saída esperada:
std::vector<double> expected = {0.25, 0.104994};
Entrada:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0};

Saída esperada:
double[] expected = new double[] {0.25, 0.104994};

Explicação

Em 0, s = 0.5 e a inclinação é 0.5 × 0.5 = 0.25, o ponto mais íngreme da sigmoide. Em 2, s ≈ 0.880797 e a inclinação é cerca de 0.104994.

Exemplo 2
Entrada:
name = "relu"
values = [-3.0, 0.0, 4.5]

Saída esperada:
expected = [0.0, 0.0, 1.0]
Entrada:
std::string name = "relu";
std::vector<double> values = {-3.0, 0.0, 4.5};

Saída esperada:
std::vector<double> expected = {0.0, 0.0, 1.0};
Entrada:
string name = "relu";
double[] values = new double[] {-3.0, 0.0, 4.5};

Saída esperada:
double[] expected = new double[] {0.0, 0.0, 1.0};

Explicação

A ReLU é plana para x ≤ 0 (inclinação 0) e tem inclinação 1 para x > 0, então o resultado é [0, 0, 1].

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.