समस्या
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.
सीमाएँ
1 ≤ n ≤ 100
-10 ≤ each input, weight and bias ≤ 10
0 ≤ target ≤ 1
उदाहरण
इनपुट:
bias = 0.0
inputs = [1.0, 2.0]
target = 1.0
weights = [0.5, -0.25]
अपेक्षित आउटपुट:
expected = [-0.25, -0.5, -0.25]
इनपुट:
double bias = 0.0;
std::vector<double> inputs = {1.0, 2.0};
double target = 1.0;
std::vector<double> weights = {0.5, -0.25};
अपेक्षित आउटपुट:
std::vector<double> expected = {-0.25, -0.5, -0.25};
इनपुट:
double bias = 0.0;
double[] inputs = new double[] {1.0, 2.0};
double target = 1.0;
double[] weights = new double[] {0.5, -0.25};
अपेक्षित आउटपुट:
double[] expected = new double[] {-0.25, -0.5, -0.25};
व्याख्या
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].
इनपुट:
bias = 0.0
inputs = [3.0]
target = 0.0
weights = [0.0]
अपेक्षित आउटपुट:
expected = [0.75, 0.25]
इनपुट:
double bias = 0.0;
std::vector<double> inputs = {3.0};
double target = 0.0;
std::vector<double> weights = {0.0};
अपेक्षित आउटपुट:
std::vector<double> expected = {0.75, 0.25};
इनपुट:
double bias = 0.0;
double[] inputs = new double[] {3.0};
double target = 0.0;
double[] weights = new double[] {0.0};
अपेक्षित आउटपुट:
double[] expected = new double[] {0.75, 0.25};
व्याख्या
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.
कैसे हल करें
पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।
संकेत 1
Start by computing the neuron's sigmoid output and the loss derivative with respect to its pre-activation value.
संकेत 2
The gradient for each weight is the same delta scaled by that input, and the bias uses the delta alone.
संकेत 3
Keep the weight gradients in input order, then append the bias gradient at the end.
अपेक्षित जटिलता
O(n) time, O(n) extra space
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।