Quay lại danh sách thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Derivatives of Activation Functions

Compute the derivative of sigmoid, ReLU, Leaky ReLU or tanh at each value, the slopes backpropagation needs.

Bạn sẽ học được gì

  • Compute slopes of common activations
  • Reuse the sigmoid output for its derivative
  • Prepare the pieces backpropagation needs

Đề bài

Xem bản dịch

Backpropagation multiplies gradients by the derivative of each activation function. Implement activation_derivative(name, values) and return the derivative at every value:

namederivative
"sigmoid"s × (1 - s), where s = 1 / (1 + e^(-x))
"relu"1 if x > 0, otherwise 0
"leaky_relu"1 if x > 0, otherwise 0.01
"tanh"1 - tanh(x)²

Input

name: One of "sigmoid", "relu", "leaky_relu" or "tanh".

values: The inputs x of the activation.

Output

Return the derivative at each value, in the same order.

Ràng buộc

1 ≤ length ≤ 1,000

-50 ≤ each value ≤ 50

Ví dụ

Ví dụ 1
Đầu vào:
name = "sigmoid"
values = [0.0, 2.0]

Kết quả mong đợi:
expected = [0.25, 0.104994]
Đầu vào:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0};

Kết quả mong đợi:
std::vector<double> expected = {0.25, 0.104994};
Đầu vào:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0};

Kết quả mong đợi:
double[] expected = new double[] {0.25, 0.104994};

Giải thích

At 0, s = 0.5 and the slope is 0.5 × 0.5 = 0.25, the steepest point of the sigmoid. At 2, s ≈ 0.880797 and the slope is about 0.104994.

Ví dụ 2
Đầu vào:
name = "relu"
values = [-3.0, 0.0, 4.5]

Kết quả mong đợi:
expected = [0.0, 0.0, 1.0]
Đầu vào:
std::string name = "relu";
std::vector<double> values = {-3.0, 0.0, 4.5};

Kết quả mong đợi:
std::vector<double> expected = {0.0, 0.0, 1.0};
Đầu vào:
string name = "relu";
double[] values = new double[] {-3.0, 0.0, 4.5};

Kết quả mong đợi:
double[] expected = new double[] {0.0, 0.0, 1.0};

Giải thích

ReLU is flat for x ≤ 0 (slope 0) and has slope 1 for x > 0, so the result is [0, 0, 1].

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

The derivative depends on the activation type, so handle each function separately for every input value.

Gợi ý 2

For sigmoid and tanh, reuse the activation output or its standard function value instead of recomputing from scratch in a complicated way.

Gợi ý 3

Watch the sign thresholds: ReLU uses a strict positive test, while leaky ReLU keeps a small slope for nonpositive values.

Độ phức tạp mong đợi

O(n) time, O(n) extra space

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.