Python में ग्रेडिएंट डिसेंट और बैकप्रोपेगेशन
ट्रेनिंग का मतलब है लॉस घटाने के लिए वेट को बदलना। ग्रेडिएंट बताता है कि किस दिशा में लॉस बढ़ता है, इसलिए ग्रेडिएंट डिसेंट उलटी दिशा में छोटे कदम लेता है। बैकप्रोपेगेशन चेन रूल से हर वेट का ग्रेडिएंट निकालता है।
आसान शब्दों में अवधारणा
ट्रेनिंग का मतलब है लॉस घटाने के लिए वेट को बदलना। ग्रेडिएंट बताता है कि किस दिशा में लॉस बढ़ता है, इसलिए ग्रेडिएंट डिसेंट उलटी दिशा में छोटे कदम लेता है। बैकप्रोपेगेशन चेन रूल से हर वेट का ग्रेडिएंट निकालता है।
ग्रेडिएंट डिसेंट से एक न्यूरॉन ट्रेन करें: चेन रूल से पता करें कि हर वेट लॉस पर कैसा असर डालता है, फिर ढलान पर नीचे कदम बढ़ाएँ।
मुख्य बातें
- ग्रेडिएंट हर वेट के हिसाब से लॉस का ढलान है।
- लर्निंग रेट कदम का आकार तय करता है: बहुत बड़ा हो तो आगे निकल जाता है, बहुत छोटा हो तो धीमा।
- बैकप्रोपेगेशन आउटपुट से पहली लेयर तक पीछे की ओर चेन रूल लागू करता है।
- एक epoch पूरे ट्रेनिंग डेटा पर एक बार चलना है।
इसका उपयोग कब करें?
- समझें कि न्यूरल नेटवर्क और AI लाइब्रेरी के अंदर क्या होता है।
- संबंधित चुनौतियों में खुद लागू करने से पहले विचार को समझें।
- मशीन लर्निंग कोर्स, इंटरव्यू और प्रोजेक्ट की तैयारी करें।
इसे काम करते देखें
ट्रेनिंग के लिए चलाएँ दबाएँ। रेखा बिंदुओं के पास आती है, जबकि नारंगी रास्ता लॉस के भू-दृश्य पर नीचे उतरकर सबसे निचले बिंदु तक जाता है।
उदाहरण कोड
# Train one neuron y = w * x + b to fit points on the line y = 2x + 1.
data = [(0, 1), (1, 3), (2, 5), (3, 7)]
w, b = 0.0, 0.0
learning_rate = 0.05
for epoch in range(1, 201):
grad_w = grad_b = 0.0
for x, y in data:
error = (w * x + b) - y # prediction minus target
# Chain rule: d(error²)/dw = 2 * error * x, d(error²)/db = 2 * error
grad_w += 2 * error * x
grad_b += 2 * error
# Step against the gradient to make the loss smaller.
w -= learning_rate * grad_w / len(data)
b -= learning_rate * grad_b / len(data)
if epoch in (1, 10, 50, 200):
loss = sum(((w * x + b) - y) ** 2 for x, y in data) / len(data)
print(f"epoch {epoch:>3}: w={w:.3f} b={b:.3f} loss={loss:.4f}")
अपेक्षित आउटपुट
epoch 1: w=0.850 b=0.400 loss=7.0587
epoch 10: w=2.009 b=0.958 loss=0.0009
epoch 50: w=2.005 b=0.989 loss=0.0000
epoch 200: w=2.000 b=1.000 loss=0.0000
यह कैसे काम करता है
हर बिंदु के लिए एरर अनुमान में से लक्ष्य घटाने पर मिलता है। चेन रूल से स्क्वेयर्ड एरर का ग्रेडिएंट w के लिए 2·error·x और b के लिए 2·error है। पूरे डेटा का औसत लेकर ग्रेडिएंट के उलटे कदम लेने पर w और b, 2 और 1 के पास पहुँचते हैं, और लॉस लगभग 0 हो जाता है।
मान बदलें और Python इंस्टॉल किए बिना CodeUtility ऑनलाइन Python कंपाइलर में प्रोग्राम चलाएँ।
अभ्यास के कार्य
बड़े dataset पर जाने से पहले input बदलें और edge cases की जाँच करें।
- इनपुट या वेट बदलें और रन करने से पहले आउटपुट का अनुमान लगाएँ।
- हर गणना चरण को देखने के लिए बीच के मान प्रिंट करें।
- नीचे दी गई चुनौतियाँ हल करके विचार को खुद लागू करें।
चैलेंज से अभ्यास करें
इस पाठ में सीखी बात से एक असली समस्या हल करें। हर चैलेंज ब्राउज़र में चलता है, तुरंत टेस्ट और AI रिव्यू के साथ।
- एक्टिवेशन फ़ंक्शन के डेरिवेटिव हर मान पर sigmoid, ReLU, Leaky ReLU या tanh का डेरिवेटिव निकालें, यानी वे ढलान जिनकी बैकप्रोपेगेशन को ज़रूरत होती है। आसान
- एक न्यूरॉन के ग्रेडिएंट चेन रूल से पता करें कि sigmoid न्यूरॉन के हर वेट और बायस के साथ लॉस कैसे बदलता है। मध्यम
- दो-लेयर नेटवर्क में बैकप्रोपेगेशन एक sigmoid हिडन लेयर और एक sigmoid आउटपुट वाले नेटवर्क के सभी वेट और बायस ग्रेडिएंट निकालें। कठिन
- ग्रेडिएंट डिसेंट से न्यूरॉन को ट्रेन करें उदाहरणों से sigmoid न्यूरॉन को सिखाने के लिए फ़ॉरवर्ड पास, ग्रेडिएंट और वेट अपडेट बार-बार दोहराएँ। मध्यम
- XOR हल करने के लिए न्यूरल नेटवर्क ट्रेन करें सब कुछ एक साथ: 2-2-1 sigmoid नेटवर्क को बैकप्रोपेगेशन से तब तक ट्रेन करें जब तक वह XOR न सीख ले। कठिन