समस्या
बैकप्रोपेगेशन ग्रेडिएंट को हर एक्टिवेशन फ़ंक्शन के डेरिवेटिव से गुणा करता है। 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] है।
कैसे हल करें
पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।
संकेत 1
Derivative activation type पर depend करता है, इसलिए हर input value के लिए हर function को अलग handle करें.
संकेत 2
Sigmoid और tanh के लिए, फिर से scratch से complicated तरीके से compute करने की बजाय activation output या उसका standard function value reuse करें.
संकेत 3
Sign thresholds का ध्यान रखें: ReLU strict positive test use करता है, जबकि leaky ReLU nonpositive values के लिए small slope रखता है.
अपेक्षित जटिलता
समय O(n), अतिरिक्त स्थान O(n)
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।