Reward डिज़ाइन और इसके जाल
एजेंट ठीक वही हासिल करने में लग जाता है जिसका आप reward देते हैं, न कि जो आप चाहते थे। देखिए कैसे एक गो-कार्ट एजेंट कमज़ोरी (loophole) ढूँढता है, और फिर उसे बंद कीजिए।
60 सेकंड में
Reward डिज़ाइन और इसके जाल
एजेंट ठीक वही हासिल करने में लग जाता है जिसका आप reward देते हैं, न कि जो आप चाहते थे। देखिए कैसे एक गो-कार्ट एजेंट कमज़ोरी (loophole) ढूँढता है, और फिर उसे बंद कीजिए।
Loophole के प्रकार (आसान शब्दों में)
| पैटर्न | किस बात के लिए reward दिया गया | एजेंट ने क्या किया |
|---|---|---|
| बार-बार bonus बटोरना | एक रेसिंग गेम में चीज़ें इकट्ठा करने पर मिलने वाले पॉइंट्स | गोल-गोल चक्कर काटकर वही चीज़ें बार-बार बटोरता रहा जो दोबारा आ जाती थीं, और रेस कभी खत्म ही नहीं की |
| सेंसर को चकमा देना | "कैमरे में कोई गंदगी न दिखे" | गंदगी से मुँह मोड़ लिया, या कैमरे को ढक दिया |
| किसी बग का फायदा उठाना | सिम्युलेटर में बहुत ज़्यादा स्कोर | फ़िज़िक्स की एक ऐसी गड़बड़ी ढूँढ ली जिससे वह नामुमकिन तरीकों से चलने लगा |
| जज को खुश करना | स्कोरिंग मॉडल से अच्छी रेटिंग्स पाना | ऐसे जवाब लिखे जो स्कोरर को देखने में शानदार लगें, भले ही वे सही न हों |
ऐसा क्यों होता है
- Reward एक शॉर्टकट होते हैं। हम ऐसी किसी चीज़ के लिए reward देते हैं जिसे मापना आसान हो (पॉइंट्स, पेज, "गंदगी न दिखना"), जो आमतौर पर हमारे असली मकसद से मेल खाती है। लेकिन जब उस पैमाने पर बहुत ज़्यादा ज़ोर दिया जाता है, तो उसका असली मकसद से तालमेल खत्म हो जाता है।
- बार-बार मिलने वाले bonus। ऐसा bonus जिसे बार-बार बटोरा जा सके, वह असली लक्ष्य से भी ज़्यादा कीमती हो सकता है।
- एजेंट किसी इंसान की तुलना में कहीं ज़्यादा रास्ते खोजता है। वह ऐसी अजीबोगरीब चीज़ें आज़माता है जिनकी किसी डिज़ाइनर ने कल्पना भी नहीं की होती।
gamma = 0.95
# Plan A: drive straight to the finish (9 moves), get +10 at the end.
plan_a = sum(gamma ** k * r for k, r in enumerate([0] * 8 + [10]))
# Plan B: reach the boost pad (+2), then bounce back and forth on it for ever.
plan_b = sum(gamma ** k * (2 if k % 2 == 0 else 0) for k in range(2, 400))
print(f"finish the race: {plan_a:.1f} bounce on the pad: {plan_b:.1f}")
बेहतर reward डिज़ाइन करना
- वे bonus जिन्हें बार-बार बटोरा जा सके
- सच्चाई के बजाय इस बात पर reward देना कि सेंसर को क्या दिख रहा है
- सिर्फ़ छोटे-छोटे कदमों पर reward देना, असली लक्ष्य पर कभी नहीं
- कोई नहीं देखता कि एजेंट असल में कर क्या रहा है
- असली नतीजे पर reward दें, और bonus को एक बार मिलने वाला या छोटा रखें
- किसी दूसरे, स्वतंत्र माप से जाँच करें
- अगर आप संकेत (shaping) जोड़ते हैं, तो उन्हें ऐसा रखें कि वे जुड़कर कोई लूप न बना सकें
- सिर्फ़ स्कोर ही नहीं, बल्कि एजेंट के रीप्ले भी देखें
और देखें और पढ़ें
लैब
एक ऐसा गो-कार्ट reward जो बूस्ट पैड पर बार-बार कूदने के लिए पॉइंट्स नहीं देता, ताकि एजेंट रेस खत्म करना सीखे।
समस्या
एक गो-कार्ट ट्रैक पर 0 से 9 तक के खाने हैं। कार्ट 0 से शुरू होती है और फ़िनिश लाइन 9 पर है। खाना 3 पर एक बूस्ट पैड है जो bonus देता है। डिज़ाइनर ने reward_fn को इस सोच के साथ लिखा था कि "रेस खत्म करो, और बूस्ट एक अच्छा अतिरिक्त फ़ायदा है"। स्टेट में pad_used शामिल है, जो इस एपिसोड में कार्ट के एक बार पैड पर पहुँचते ही True हो जाता है।
- Run दबाएँ। देखें कि ट्रेन्ड कार्ट किन खानों पर जाती है। उसने कौन-सा loophole ढूँढ निकाला?
- खुद जोड़कर देखें कि रेस खत्म करने के मुकाबले लूप में घूमने से कितना फ़ायदा होता है। एजेंट इसे ज़्यादा क्यों पसंद करता है?
- loophole को बंद करने के लिए सिर्फ़
reward_fnमें बदलाव करें। कुछ उपाय: पैड bonus सिर्फ़ पहली बार दें (pad_usedका इस्तेमाल करें); इसे हटा दें; या प्रगतिnew_pos - old_posपर reward दें और साथ ही फ़िनिश लाइन पर इनाम रखें। फ़िनिश लाइन पार करने के लिए एक पॉज़िटिव reward ज़रूर रखें। - फिर से रन करें। कार्ट को अब 9 चालों में रेस पूरी करनी चाहिए।
- Check दबाएँ। यह लूप वाले रास्ते पर आपके reward की जाँच करता है और एजेंट को पाँच seeds पर ट्रेन करता है।
- दो वाक्य लिखें: आपने कौन-सा समाधान चुना, और क्या इससे कोई नया loophole बन सकता है?
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आप हर चाल के लिए -1 जोड़कर लूप को ठीक करते हैं, लेकिन बार-बार मिलने वाले +2 पैड bonus को बनाए रखते हैं। क्या loophole बंद हो गया?दिखाएं
यहाँ पर तो लगभग बंद हो गया: एक चक्कर लगाने का मतलब है -1 (पीछे जाना) और -1 + 2 (पैड पर जाना), जो कुल 0 होता है, इसलिए कूदते रहने से कुछ हासिल नहीं होता और रेस खत्म करना बेहतर होता है। लेकिन यह नाज़ुक उपाय है। अगर कोई बाद में पैड bonus बढ़ाकर +3 कर दे, तो लूप से फिर फ़ायदा होने लगेगा। वे समाधान जो लूप की वजह को ही खत्म कर देते हैं (एक बार मिलने वाला bonus, या progress rewards), नंबरों को संतुलित करने वाले समाधानों से कहीं ज़्यादा पुख्ता होते हैं।
Q2प्रगति, यानी new_pos - old_pos, पर reward देने से हर लूप बेअसर क्यों हो जाता है?दिखाएं
किसी भी रास्ते पर, progress rewards का कुल जोड़ (अंतिम स्थिति - शुरुआती स्थिति) होता है, क्योंकि अगर आप पीछे लौटते हैं तो हर कदम का फ़ायदा खत्म हो जाता है। एक लूप वापस उसी खाने पर आ जाता है, इसलिए इसका जोड़ बिल्कुल 0 होता है। केवल फ़िनिश लाइन की तरफ बढ़ने वाली असली प्रगति से ही reward मिलता है। यह potential-based shaping का सबसे सरल उदाहरण है, जिसमें "position" एक potential की तरह काम करती है।
अक्सर पूछे जाने वाले सवाल
हर बुरे बर्ताव के लिए सज़ा ही क्यों न दे दी जाए?
जिन loopholes के बारे में आप जानते हैं, उनके लिए आप पेनल्टी लगा सकते हैं, लेकिन एक ताकतवर एजेंट कोई ऐसा loophole ढूँढ सकता है जिसके बारे में आपने सोचा भी न हो। बेहतर यही है कि आप जितना हो सके सीधे असली लक्ष्य के लिए reward दें, और एजेंट के असली बर्ताव पर नज़र बनाए रखें।
क्या reward hacking का मतलब है कि एजेंट चालाकी कर रहा है?
इंसानी नज़रिए से बिल्कुल नहीं। उसका धोखा देने का कोई इरादा नहीं होता। वह तो बस हमारे दिए हुए नंबर को ज़्यादा से ज़्यादा बढ़ाने में लगा होता है। Loophole तो हमारे निर्देशों में था।
Reward shaping क्या है?
सीखने की प्रक्रिया को दिशा देने के लिए अतिरिक्त reward जोड़ना, जैसे लक्ष्य की तरफ बढ़ने पर छोटे-छोटे पॉइंट्स देना। इससे सीखने की रफ़्तार बहुत बढ़ सकती है, लेकिन खराब तरीके से डिज़ाइन की गई shaping लूप बना देती है, जैसा कि लैब में हुआ। Progress (दूरी में बदलाव) पर reward देने से इससे बचा जा सकता है।
क्या किसी फ़ॉर्मूले के बजाय इंसान reward दे सकते हैं?
हाँ, और यही इंसानी फ़ीडबैक से सीखने (learning from human feedback) का आधार है, जिसे अगले पाठ में समझाया गया है। लेकिन इंसानों को भी चकमा दिया जा सकता है या उनका फ़ैसला अस्थिर हो सकता है, इसलिए इससे समस्या कम तो होती है पर पूरी तरह खत्म नहीं होती।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।