समस्या
बैकप्रोपेगेशन ग्रेडिएंट को हर एक्टिवेशन फ़ंक्शन के डेरिवेटिव से गुणा करता है। activation_derivative(name, values) लागू करें और हर मान पर डेरिवेटिव लौटाएँ:
| name | डेरिवेटिव |
|---|---|
"sigmoid" | s × (1 - s), जहाँ s = 1 / (1 + e^(-x)) |
"relu" | 1 अगर x > 0, नहीं तो 0 |
"leaky_relu" | 1 अगर x > 0, नहीं तो 0.01 |
"tanh" | 1 - tanh(x)² |
इनपुट
name: "sigmoid", "relu", "leaky_relu" या "tanh" में से एक।
values: एक्टिवेशन के इनपुट x।
आउटपुट
उसी क्रम में हर मान पर डेरिवेटिव लौटाएँ।
सीमाएँ
1 ≤ लंबाई ≤ 1,000
-50 ≤ हर मान ≤ 50
उदाहरण
इनपुट:
name = "sigmoid"
values = [0.0, 2.0]
अपेक्षित आउटपुट:
expected = [0.25, 0.104994]
इनपुट:
std::string name = "sigmoid";
std::vector<double> values = {0.0, 2.0};
अपेक्षित आउटपुट:
std::vector<double> expected = {0.25, 0.104994};
इनपुट:
string name = "sigmoid";
double[] values = new double[] {0.0, 2.0};
अपेक्षित आउटपुट:
double[] expected = new double[] {0.25, 0.104994};
व्याख्या
0 पर s = 0.5 है और ढलान 0.5 × 0.5 = 0.25 है, जो sigmoid का सबसे खड़ा बिंदु है। 2 पर s ≈ 0.880797 है और ढलान लगभग 0.104994 है।
इनपुट:
name = "relu"
values = [-3.0, 0.0, 4.5]
अपेक्षित आउटपुट:
expected = [0.0, 0.0, 1.0]
इनपुट:
std::string name = "relu";
std::vector<double> values = {-3.0, 0.0, 4.5};
अपेक्षित आउटपुट:
std::vector<double> expected = {0.0, 0.0, 1.0};
इनपुट:
string name = "relu";
double[] values = new double[] {-3.0, 0.0, 4.5};
अपेक्षित आउटपुट:
double[] expected = new double[] {0.0, 0.0, 1.0};
व्याख्या
ReLU x ≤ 0 के लिए सपाट है (ढलान 0) और x > 0 के लिए ढलान 1 है, इसलिए परिणाम [0, 0, 1] है।
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।