Trung bình 0 đã giải Tỷ lệ chấp nhận 0%

Gradients of a Single Neuron

Use the chain rule to find how the loss changes with each weight and the bias of a sigmoid neuron.

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

  • Apply the chain rule to a neuron
  • Get gradients for each weight and the bias
  • Understand how learning signals flow

Đề bài

Xem bản dịch

To train a neuron we need to know how each weight affects the error. For one training example:

  • z = inputs · weights + bias
  • y = sigmoid(z) = 1 / (1 + e^(-z))
  • loss L = (y - target)²

By the chain rule, with delta = dL/dz = 2 × (y - target) × y × (1 - y):

  • dL/dw_i = delta × x_i
  • dL/dbias = delta

Implement neuron_gradients(inputs, weights, bias, target).

Input

inputs, weights: Lists of the same length n.

bias: The neuron's bias.

target: The correct output for this example (between 0 and 1).

Output

Return a list of n + 1 numbers: the gradient for each weight in order, then the gradient for the bias.

Ràng buộc

1 ≤ n ≤ 100

-10 ≤ each input, weight and bias ≤ 10

0 ≤ target ≤ 1

Ví dụ

Ví dụ 1
Đầu vào:
bias = 0.0
inputs = [1.0, 2.0]
target = 1.0
weights = [0.5, -0.25]

Kết quả mong đợi:
expected = [-0.25, -0.5, -0.25]
Đầu vào:
double bias = 0.0;
std::vector<double> inputs = {1.0, 2.0};
double target = 1.0;
std::vector<double> weights = {0.5, -0.25};

Kết quả mong đợi:
std::vector<double> expected = {-0.25, -0.5, -0.25};
Đầu vào:
double bias = 0.0;
double[] inputs = new double[] {1.0, 2.0};
double target = 1.0;
double[] weights = new double[] {0.5, -0.25};

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

Giải thích

z = 1×0.5 + 2×(-0.25) = 0, so y = 0.5. delta = 2 × (0.5 - 1) × 0.5 × 0.5 = -0.25. Gradients: [-0.25×1, -0.25×2, -0.25] = [-0.25, -0.5, -0.25].

Ví dụ 2
Đầu vào:
bias = 0.0
inputs = [3.0]
target = 0.0
weights = [0.0]

Kết quả mong đợi:
expected = [0.75, 0.25]
Đầu vào:
double bias = 0.0;
std::vector<double> inputs = {3.0};
double target = 0.0;
std::vector<double> weights = {0.0};

Kết quả mong đợi:
std::vector<double> expected = {0.75, 0.25};
Đầu vào:
double bias = 0.0;
double[] inputs = new double[] {3.0};
double target = 0.0;
double[] weights = new double[] {0.0};

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

Giải thích

z = 0 and y = 0.5. delta = 2 × (0.5 - 0) × 0.5 × 0.5 = 0.25, so the gradients are [0.25×3, 0.25] = [0.75, 0.25]. Positive gradients mean the weight should go down.

Hướng tiếp cận

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

Gợi ý 1

Start by computing the neuron's sigmoid output and the loss derivative with respect to its pre-activation value.

Gợi ý 2

The gradient for each weight is the same delta scaled by that input, and the bias uses the delta alone.

Gợi ý 3

Keep the weight gradients in input order, then append the bias gradient at the end.

Độ 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.