सभी चुनौतियाँ
कठिन 0 हल किए गए 0% स्वीकृति

दो-लेयर नेटवर्क में बैकप्रोपेगेशन

एक sigmoid हिडन लेयर और एक sigmoid आउटपुट वाले नेटवर्क के सभी वेट और बायस ग्रेडिएंट निकालें।

आप क्या सीखेंगे

  • दो लेयर वाले नेटवर्क के सभी ग्रेडिएंट निकालना
  • त्रुटि को लेयरों में पीछे भेजना
  • गणित को कोड से कदम-दर-कदम जोड़ना

समस्या

बैकप्रोपेगेशन चेन रूल को लेयर दर लेयर लागू करता है, आउटपुट से वापस इनपुट की ओर। नेटवर्क में n इनपुट, h हिडन न्यूरॉन और एक आउटपुट है, सभी sigmoid एक्टिवेशन (σ(z) = 1 / (1 + e^(-z))) के साथ:

  • हिडन: a_j = σ(inputs · hidden_weights[j] + hidden_biases[j])
  • आउटपुट: y = σ(a · output_weights + output_bias)
  • लॉस: L = (y - target)²

ग्रेडिएंट:

  1. delta_out = 2 × (y - target) × y × (1 - y)
  2. आउटपुट लेयर: dL/doutput_weights[j] = delta_out × a_j और dL/doutput_bias = delta_out
  3. delta_j = delta_out × output_weights[j] × a_j × (1 - a_j)
  4. हिडन लेयर: dL/dhidden_weights[j][i] = delta_j × inputs[i] और dL/dhidden_biases[j] = delta_j

backprop_gradients(inputs, hidden_weights, hidden_biases, output_weights, output_bias, target) लागू करें।

आउटपुट

h + 1 पंक्तियों वाला मैट्रिक्स लौटाएँ:

  • पंक्ति j (हर हिडन न्यूरॉन j के लिए, क्रम से): hidden_weights[j] के n ग्रेडिएंट, फिर hidden_biases[j] का ग्रेडिएंट।
  • आखिरी पंक्ति: output_weights के h ग्रेडिएंट, फिर output_bias का ग्रेडिएंट।

सीमाएँ

1 ≤ n, h ≤ 20

-5 ≤ हर इनपुट, वेट और बायस ≤ 5

0 ≤ target ≤ 1

उदाहरण

उदाहरण 1
इनपुट:
inputs = [1.0]
target = 1.0
output_bias = 0.0
hidden_biases = [0.0]
hidden_weights = [
    [0.0]
]
output_weights = [0.0]

अपेक्षित आउटपुट:
expected = [
    [0.0, 0.0],
    [-0.125, -0.25]
]
इनपुट:
std::vector<double> inputs = {1.0};
double target = 1.0;
double output_bias = 0.0;
std::vector<double> hidden_biases = {0.0};
std::vector<std::vector<double>> hidden_weights = {
    {0.0}
};
std::vector<double> output_weights = {0.0};

अपेक्षित आउटपुट:
std::vector<std::vector<double>> expected = {
    {0.0, 0.0},
    {-0.125, -0.25}
};
इनपुट:
double[] inputs = new double[] {1.0};
double target = 1.0;
double output_bias = 0.0;
double[] hidden_biases = new double[] {0.0};
double[][] hidden_weights = new double[][] {
    new double[] {0.0}
};
double[] output_weights = new double[] {0.0};

अपेक्षित आउटपुट:
double[][] expected = new double[][] {
    new double[] {0.0, 0.0},
    new double[] {-0.125, -0.25}
};

व्याख्या

a = σ(0) = 0.5 और y = σ(0) = 0.5। delta_out = 2 × (0.5 - 1) × 0.25 = -0.25। आउटपुट पंक्ति: [-0.25 × 0.5, -0.25] = [-0.125, -0.25]। delta_1 = -0.25 × 0 × 0.25 = 0, इसलिए हिडन पंक्ति [0, 0] है: शून्य आउटपुट वेट ग्रेडिएंट को रोक देता है।

उदाहरण 2
इनपुट:
inputs = [1.0, 0.0]
target = 0.0
output_bias = -1.0
hidden_biases = [0.0, 0.0]
hidden_weights = [
    [0.0, 1.0],
    [0.0, -1.0]
]
output_weights = [1.0, 1.0]

अपेक्षित आउटपुट:
expected = [
    [0.0625, 0.0, 0.0625],
    [0.0625, 0.0, 0.0625],
    [0.125, 0.125, 0.25]
]
इनपुट:
std::vector<double> inputs = {1.0, 0.0};
double target = 0.0;
double output_bias = -1.0;
std::vector<double> hidden_biases = {0.0, 0.0};
std::vector<std::vector<double>> hidden_weights = {
    {0.0, 1.0},
    {0.0, -1.0}
};
std::vector<double> output_weights = {1.0, 1.0};

अपेक्षित आउटपुट:
std::vector<std::vector<double>> expected = {
    {0.0625, 0.0, 0.0625},
    {0.0625, 0.0, 0.0625},
    {0.125, 0.125, 0.25}
};
इनपुट:
double[] inputs = new double[] {1.0, 0.0};
double target = 0.0;
double output_bias = -1.0;
double[] hidden_biases = new double[] {0.0, 0.0};
double[][] hidden_weights = new double[][] {
    new double[] {0.0, 1.0},
    new double[] {0.0, -1.0}
};
double[] output_weights = new double[] {1.0, 1.0};

अपेक्षित आउटपुट:
double[][] expected = new double[][] {
    new double[] {0.0625, 0.0, 0.0625},
    new double[] {0.0625, 0.0, 0.0625},
    new double[] {0.125, 0.125, 0.25}
};

व्याख्या

दोनों हिडन मान σ(0) = 0.5 हैं, इसलिए y = σ(0.5 + 0.5 - 1) = 0.5 और delta_out = 2 × 0.5 × 0.25 = 0.25। आउटपुट पंक्ति: [0.125, 0.125, 0.25]। हर delta_j = 0.25 × 1 × 0.25 = 0.0625, जिससे हिडन पंक्तियाँ [0.0625, 0, 0.0625] बनती हैं (दूसरा इनपुट 0 है)।

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।