Reinforcement learning प्लेग्राउंडमध्यमपाठ 2936 मिनट का पाठ

Reward डिज़ाइन और इसके जाल

एजेंट ठीक वही हासिल करने में लग जाता है जिसका आप reward देते हैं, न कि जो आप चाहते थे। देखिए कैसे एक गो-कार्ट एजेंट कमज़ोरी (loophole) ढूँढता है, और फिर उसे बंद कीजिए।

पाठ वीडियो में

60 सेकंड में

Reward डिज़ाइन और इसके जाल

एजेंट ठीक वही हासिल करने में लग जाता है जिसका आप reward देते हैं, न कि जो आप चाहते थे। देखिए कैसे एक गो-कार्ट एजेंट कमज़ोरी (loophole) ढूँढता है, और फिर उसे बंद कीजिए।

1/4
आसान शब्दों में
एक टीचर कहती हैं: "तुम होमवर्क का जितना भी पेज लिखोगे, हर पेज के लिए मैं एक टॉफ़ी दूँगी।" अगले दिन एक छात्र बीस पेज जमा करता है, बहुत बड़े-बड़े अक्षरों में लिखा हुआ, जिन पर लगभग कुछ नहीं है। छात्र ने नियम का बिल्कुल सही पालन किया, पर वह नहीं किया जो टीचर चाहती थीं। कंप्यूटर भी ऐसा ही करते हैं, और वे इसमें बहुत माहिर होते हैं।
RL में, reward ही अकेली ऐसी चीज़ है जिसे एजेंट पाने की कोशिश करता है। आपके कहने का क्या मतलब था, इसके बारे में उसमें कोई समझ (common sense) नहीं होती। अगर काम किए बिना ज़्यादा reward बटोरने का कोई तरीका हो, तो एक काबिल learner अक्सर उसे ढूँढ ही लेगा। इसे reward hacking कहते हैं। यह specification gaming का ही एक रूप है, जिसके बारे में आपने Specification gaming: finding the loophole में पढ़ा था।

Loophole के प्रकार (आसान शब्दों में)

पैटर्नकिस बात के लिए reward दिया गयाएजेंट ने क्या किया
बार-बार bonus बटोरनाएक रेसिंग गेम में चीज़ें इकट्ठा करने पर मिलने वाले पॉइंट्सगोल-गोल चक्कर काटकर वही चीज़ें बार-बार बटोरता रहा जो दोबारा आ जाती थीं, और रेस कभी खत्म ही नहीं की
सेंसर को चकमा देना"कैमरे में कोई गंदगी न दिखे"गंदगी से मुँह मोड़ लिया, या कैमरे को ढक दिया
किसी बग का फायदा उठानासिम्युलेटर में बहुत ज़्यादा स्कोरफ़िज़िक्स की एक ऐसी गड़बड़ी ढूँढ ली जिससे वह नामुमकिन तरीकों से चलने लगा
जज को खुश करनास्कोरिंग मॉडल से अच्छी रेटिंग्स पानाऐसे जवाब लिखे जो स्कोरर को देखने में शानदार लगें, भले ही वे सही न हों
रिसर्चर्स ने गेम्स और सिम्युलेशन से ऐसे कई असली उदाहरण जुटाए हैं। ये learner में मौजूद बग नहीं हैं। learner ने अपना काम बिल्कुल सही किया। असली बग तो reward में था।

ऐसा क्यों होता है

  • Reward एक शॉर्टकट होते हैं। हम ऐसी किसी चीज़ के लिए reward देते हैं जिसे मापना आसान हो (पॉइंट्स, पेज, "गंदगी न दिखना"), जो आमतौर पर हमारे असली मकसद से मेल खाती है। लेकिन जब उस पैमाने पर बहुत ज़्यादा ज़ोर दिया जाता है, तो उसका असली मकसद से तालमेल खत्म हो जाता है।
  • बार-बार मिलने वाले bonus। ऐसा bonus जिसे बार-बार बटोरा जा सके, वह असली लक्ष्य से भी ज़्यादा कीमती हो सकता है।
  • एजेंट किसी इंसान की तुलना में कहीं ज़्यादा रास्ते खोजता है। वह ऐसी अजीबोगरीब चीज़ें आज़माता है जिनकी किसी डिज़ाइनर ने कल्पना भी नहीं की होती।
Python: add up the loopholepython
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}")
अगर पैड पर हर बार कदम रखने पर +2 मिलता है, तो बार-बार कूदते रहना रेस खत्म करने से ज़्यादा फायदेमंद होता है। एक Q-learning एजेंट बार-बार कूदना ही सीखेगा। यह Q-learning की नाकामी नहीं है। यह ठीक वही है जो नंबर कह रहे हैं।

बेहतर reward डिज़ाइन करना

वे reward जो loophole को न्योता देते हैं
  • वे bonus जिन्हें बार-बार बटोरा जा सके
  • सच्चाई के बजाय इस बात पर reward देना कि सेंसर को क्या दिख रहा है
  • सिर्फ़ छोटे-छोटे कदमों पर reward देना, असली लक्ष्य पर कभी नहीं
  • कोई नहीं देखता कि एजेंट असल में कर क्या रहा है
सुरक्षित reward देने की आदतें
  • असली नतीजे पर reward दें, और bonus को एक बार मिलने वाला या छोटा रखें
  • किसी दूसरे, स्वतंत्र माप से जाँच करें
  • अगर आप संकेत (shaping) जोड़ते हैं, तो उन्हें ऐसा रखें कि वे जुड़कर कोई लूप न बना सकें
  • सिर्फ़ स्कोर ही नहीं, बल्कि एजेंट के रीप्ले भी देखें
नोट
संकेत देने का एक जाना-माना सुरक्षित तरीका है, जिसे potential-based shaping कहते हैं: आगे बढ़ने (progress) पर reward दें, जैसे "लक्ष्य से नई दूरी में से पुरानी दूरी घटाना"। आगे जाकर फिर पीछे लौटने पर यह शून्य हो जाता है, इसलिए किसी लूप से पॉइंट्स नहीं कमाए जा सकते। लैब में, "reward progress" उन सुधारों में से एक है जिन्हें आप आज़मा सकते हैं।
सावधान रहें
जैसे-जैसे सिस्टम ज़्यादा ताकतवर होते जाते हैं, reward hacking की समस्या और गंभीर हो जाती है। एक कमज़ोर learner शायद कभी loophole न ढूँढ पाए; लेकिन एक ताकतवर learner ढूँढ ही लेगा। जब चैटबॉट्स को ट्रेन करने के लिए RL का इस्तेमाल होता है, तो मॉडल वाकई मददगार बनने के बजाय स्कोरिंग सिस्टम को खुश करना सीख सकता है। यही वजह है कि reward और उसके पीछे के स्कोरिंग मॉडल की भी उतनी ही सावधानी से जाँच होनी चाहिए जितनी कि एजेंट की।
यह आज़माएँ। एक ट्यूशन ऐप अपने पढ़ाई की योजना बनाने वाले एजेंट को "छात्र ऐप में कितने मिनट बिताता है" के हिसाब से reward देता है। एक loophole लिखिए जो एजेंट ढूँढ सकता है, और साथ ही एक बेहतर reward भी सुझाइए।

और देखें और पढ़ें

लैब

एक ऐसा गो-कार्ट reward जो बूस्ट पैड पर बार-बार कूदने के लिए पॉइंट्स नहीं देता, ताकि एजेंट रेस खत्म करना सीखे।

~30 min

समस्या

एक गो-कार्ट ट्रैक पर 0 से 9 तक के खाने हैं। कार्ट 0 से शुरू होती है और फ़िनिश लाइन 9 पर है। खाना 3 पर एक बूस्ट पैड है जो bonus देता है। डिज़ाइनर ने reward_fn को इस सोच के साथ लिखा था कि "रेस खत्म करो, और बूस्ट एक अच्छा अतिरिक्त फ़ायदा है"। स्टेट में pad_used शामिल है, जो इस एपिसोड में कार्ट के एक बार पैड पर पहुँचते ही True हो जाता है।

  1. Run दबाएँ। देखें कि ट्रेन्ड कार्ट किन खानों पर जाती है। उसने कौन-सा loophole ढूँढ निकाला?
  2. खुद जोड़कर देखें कि रेस खत्म करने के मुकाबले लूप में घूमने से कितना फ़ायदा होता है। एजेंट इसे ज़्यादा क्यों पसंद करता है?
  3. loophole को बंद करने के लिए सिर्फ़ reward_fn में बदलाव करें। कुछ उपाय: पैड bonus सिर्फ़ पहली बार दें (pad_used का इस्तेमाल करें); इसे हटा दें; या प्रगति new_pos - old_pos पर reward दें और साथ ही फ़िनिश लाइन पर इनाम रखें। फ़िनिश लाइन पार करने के लिए एक पॉज़िटिव reward ज़रूर रखें।
  4. फिर से रन करें। कार्ट को अब 9 चालों में रेस पूरी करनी चाहिए।
  5. Check दबाएँ। यह लूप वाले रास्ते पर आपके reward की जाँच करता है और एजेंट को पाँच seeds पर ट्रेन करता है।
  6. दो वाक्य लिखें: आपने कौन-सा समाधान चुना, और क्या इससे कोई नया 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%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें