Python में मार्कोव चेन और खोज-उपयोग का संतुलन
AI को अक्सर अनिश्चितता में फ़ैसला लेना पड़ता है। मार्कोव चेन दिखाती है कि कोई सिस्टम तय प्रायिकताओं के साथ एक स्थिति से दूसरी में कैसे जाता है, और मल्टी-आर्म्ड बैंडिट रीइन्फ़ोर्समेंट लर्निंग का मुख्य चुनाव दिखाता है: कुछ नया आज़माएँ या अब तक जो सबसे अच्छा रहा उसे इस्तेमाल करें।
आसान शब्दों में अवधारणा
AI को अक्सर अनिश्चितता में फ़ैसला लेना पड़ता है। मार्कोव चेन दिखाती है कि कोई सिस्टम तय प्रायिकताओं के साथ एक स्थिति से दूसरी में कैसे जाता है, और मल्टी-आर्म्ड बैंडिट रीइन्फ़ोर्समेंट लर्निंग का मुख्य चुनाव दिखाता है: कुछ नया आज़माएँ या अब तक जो सबसे अच्छा रहा उसे इस्तेमाल करें।
मार्कोव चेन से भविष्य की स्थितियों का अनुमान लगाएँ और epsilon-greedy बैंडिट से खोज और उपयोग में संतुलन बनाएँ।
मुख्य बातें
- मार्कोव चेन में अगली स्थिति सिर्फ़ मौजूदा स्थिति पर निर्भर करती है।
- एक स्थिति से निकलने वाली संक्रमण प्रायिकताओं का योग हमेशा 1 होता है।
- खोज बेहतर विकल्प ढूँढती है; उपयोग सबसे अच्छे ज्ञात विकल्प से इनाम कमाता है।
- epsilon संतुलन तय करता है: epsilon जितना बड़ा, खोज उतनी ज़्यादा।
इसका उपयोग कब करें?
- समझें कि न्यूरल नेटवर्क और AI लाइब्रेरी के अंदर क्या होता है।
- संबंधित चुनौतियों में खुद लागू करने से पहले विचार को समझें।
- मशीन लर्निंग कोर्स, इंटरव्यू और प्रोजेक्ट की तैयारी करें।
इसे काम करते देखें
मौसम की संक्रमण प्रायिकताएँ बदलकर देखें कि चेन कहाँ स्थिर होती है। चलाएँ दबाएँ ताकि बैंडिट सीखे कि कौन-सी मशीन ज़्यादा इनाम देती है।
उदाहरण कोड
import random
# Markov chain: tomorrow's weather depends only on today's.
transitions = {"sunny": {"sunny": 0.8, "rainy": 0.2}, "rainy": {"sunny": 0.4, "rainy": 0.6}}
dist = {"sunny": 1.0, "rainy": 0.0}
for day in range(1, 4):
dist = {s: sum(dist[p] * transitions[p][s] for p in dist) for s in dist}
print(f"day {day}:", {s: round(v, 3) for s, v in dist.items()})
# Epsilon-greedy bandit: usually pick the best arm so far, sometimes explore.
random.seed(1)
true_payouts = [0.3, 0.7]
counts, totals = [0, 0], [0.0, 0.0]
epsilon = 0.1
for _ in range(500):
if random.random() < epsilon or 0 in counts:
arm = random.randrange(2) # explore
else:
arm = max(range(2), key=lambda a: totals[a] / counts[a]) # exploit
reward = 1 if random.random() < true_payouts[arm] else 0
counts[arm] += 1
totals[arm] += reward
print("pulls per arm:", counts)
print("estimated payouts:", [round(t / c, 2) for t, c in zip(totals, counts)])
अपेक्षित आउटपुट
day 1: {'sunny': 0.8, 'rainy': 0.2}
day 2: {'sunny': 0.72, 'rainy': 0.28}
day 3: {'sunny': 0.688, 'rainy': 0.312}
pulls per arm: [25, 475]
estimated payouts: [0.16, 0.7]
यह कैसे काम करता है
हर दिन नई प्रायिकताएँ पुरानी प्रायिकताओं को संक्रमण प्रायिकताओं से गुणा करके मिलती हैं, इसलिए धूप की संभावना तीन दिनों में 1.0 से घटकर 0.688 हो जाती है। बैंडिट 10% बार कोई भी आर्म बेतरतीब चुनता है और बाकी समय अब तक के सबसे अच्छे औसत वाला आर्म खींचता है; जल्द ही वह ज़्यादातर बार बेहतर आर्म खींचता है और उसका इनाम लगभग 0.7 आँकता है।
मान बदलें और Python इंस्टॉल किए बिना CodeUtility ऑनलाइन Python कंपाइलर में प्रोग्राम चलाएँ।
अभ्यास के कार्य
बड़े dataset पर जाने से पहले input बदलें और edge cases की जाँच करें।
- इनपुट या वेट बदलें और रन करने से पहले आउटपुट का अनुमान लगाएँ।
- हर गणना चरण को देखने के लिए बीच के मान प्रिंट करें।
- नीचे दी गई चुनौतियाँ हल करके विचार को खुद लागू करें।
चैलेंज से अभ्यास करें
इस पाठ में सीखी बात से एक असली समस्या हल करें। हर चैलेंज ब्राउज़र में चलता है, तुरंत टेस्ट और AI रिव्यू के साथ।
- मार्कोव चेन का अवस्था वितरण मार्कोव चेन के ट्रांज़िशन मैट्रिक्स से एक प्रायिकता वितरण को कुछ कदमों तक आगे बढ़ाएँ। आसान
- एप्सिलॉन-ग्रीडी मल्टी-आर्म्ड बैंडिट एप्सिलॉन-ग्रीडी क्रिया चयन से मल्टी-आर्म्ड बैंडिट पर खोज और उपयोग के बीच संतुलन बनाएँ। आसान