एक्सपोनेंशियल मूविंग एवरेज
एक स्मूथ्ड हालिया एवरेज
एक्सपोनेंशियल मूविंग एवरेज (EMA) हालिया सैंपलों को पुराने सैंपलों से अधिक वेट देकर एक मान को ट्रैक करता है, जिसमें वेट्स एक्सपोनेंशियली डिके करते हैं। सूत्र:
EMA(t) = (1 - alpha) EMA(t-1) + alpha value(t)
जहाँ alpha (स्मूथिंग फैक्टर) (0, 1) में स्थित होता है। ANDREA alpha = 0.1 का उपयोग स्रोत-प्रति लॉस ट्रैकिंग के लिए करता है।
शब्द दर शब्द
- value(t): नवीनतम अवलोकन। ANDREA के लिए, यह स्रोत k से दस्तावेज़ पर फॉरवर्ड पास के बाद CUDA द्वारा रिपोर्ट किया गया लॉस है।
- EMA(t-1): स्रोत k के लिए पिछला EMA मान। प्रॉक्सी स्टेट में संग्रहीत।
- alpha = 0.1: प्रत्येक नया लॉस 10% योगदान देता है; रोलिंग इतिहास 90% योगदान देता है।
- (1 - alpha) = 0.9: इतिहास पर वजन।
साधारण औसत के बजाय EMA क्यों
साधारण चलता औसत हर चरण को समान रूप से भार देता है। चरण 1 का भार चरण 100,000 जितना ही होता है। यह तब काम करता है जब डेटा स्थिर हो। ANDREA के नुकसान स्थिर नहीं हैं: प्रशिक्षण के दौरान मॉडल की क्षमता बढ़ती है, इसलिए स्रोत का चरण 5,000 पर नुकसान चरण 50,000 पर उसके नुकसान से भिन्न होता है।
EMA इस समस्या को हल करता है। पुराने नुकसान मान घातीय रूप से फीके पड़ते हैं। EMA हाल की वास्तविकता को प्रतिबिंबित करता है, न कि प्रारंभिक स्थितियों के औसत को।
प्रति-स्रोत
ANDREA प्रत्येक आर्म (प्रति स्रोत) के लिए एक EMA बनाए रखता है। सोलह आर्म्स = सोलह EMAs। प्रत्येक चरण में केवल उस स्रोत का EMA अपडेट होता है जिसे खींचा गया था। अन्य 15 EMAs अगली खिंचाव तक जमे रहते हैं।
EMA चरण की गणना करें
रिवॉर्ड सूत्र
रिवॉर्ड = सुधार, स्केल किया गया
एंड्रिया आर्म k के लिए प्रति-चरण पुरस्कार को परिभाषित करता है:
reward_k = max(0, EMA_k(t-1) - loss_k(t)) * 1000
तीन भाग:
1. EMA_k(t-1) - loss_k(t): सुधार। यदि नया लॉस चल रहे औसत से नीचे आया, तो अंतर धनात्मक होता है: स्रोत k ने अपेक्षा से बेहतर प्रदर्शन किया।
2. max(0, ...): नकारात्मक सुधारों को शून्य पर क्लिप करें। यदि नया लॉस EMA से खराब आया, तो कोई पुरस्कार नहीं (लेकिन कोई दंड भी नहीं)।
3. \* 1000: सिग्नल को UCB अन्वेषण बोनस के समकक्ष बनाने के लिए स्केल अप करें।
max(0, ...) क्यों
नकारात्मक रिवॉर्ड mean_reward(k) को नीचे धकेल देंगे, जिससे UCB को उन आर्म्स के खिलाफ पूर्वाग्रह होगा जिनके नुकसान ऊपर की ओर उतार-चढ़ाव कर रहे हैं। लेकिन उतार-चढ़ाव सामान्य है: एक कठिन दस्तावेज़ हानि को बढ़ा देता है बिना यह अर्थ दिए कि स्रोत खराब है। शून्य तक क्लिपिंग उतार-चढ़ाव को 'कोई जानकारी नहीं' के रूप में मानती है न कि 'दंड' के रूप में।
स्रोत बार-बार शून्य रिवॉर्ड कमा सकते हैं बिना डूबे। उनका UCB रैंक अन्वेषण बोनस (n_k छोटा होने पर उच्च) प्लस पिछले सफलताओं से संचालित रहता है।
CUDA क्या रिपोर्ट करता है
प्रत्येक forward+backward पास में, CUDA kernel एक रिकॉर्ड उत्सर्जित करता है:
{source: 'hermes3-general', doc_index: 4231, loss: 4.520}
प्रॉक्सी रिकॉर्ड प्राप्त करता है, उस स्रोत के लिए EMA ढूंढता है, रिवॉर्ड की गणना करता है, EMA को अपडेट करता है, रिवॉर्ड को बैंडिट के mean_reward(k) एक्यूमुलेटर में डालता है।
एक रिवॉर्ड की गणना करें
एक्सप्लोरेशन बोनस से रिवॉर्ड को मैच करना
परिमाण समस्या
प्रति-चरण loss सुधार छोटे होते हैं। Loss 4.521 से 4.520 तक गिरता है: अंतर 0.001। 4.520 से 4.518 तक: अंतर 0.002। पूरे ट्रेनिंग रन में, कच्चे अंतर लगभग [0, 0.01] में रहते हैं।
अब UCB के exploration bonus को C=0.5 पर देखें, जहाँ N=1000 और n_k=20 है:
0.5 sqrt(ln(1000) / 20) = 0.5 sqrt(6.91 / 20) = 0.5 * 0.588 = 0.294
Bonus 0.294 पर चल रहा है। Raw reward 0.001 पर चल रहा है। Bonus 300x बड़ा है reward से। UCB का argmax लगभग पूरी तरह bonus से sort करता है; mean_reward लगभग शून्य signal प्रदान करता है।
Scaling के बिना परिणाम: ANDREA का bandit हर step में सबसे छोटे n_k वाले arm को चुनता है। Mean_reward को ignore कर दिया जाता है। Bandit एक pure exploration policy बन जाता है।
समाधान: 1000x
कच्चे इनाम को 1000 से गुणा करें। अब इनाम 1.0 पर आ जाता है (कच्चे 0.001 की तुलना में)। उसी अन्वेषण बोनस 0.294 से तुलना करें:
स्केल्ड इनाम 1.0 बनाम बोनस 0.294 = इनाम 3.4x से आगे
अब mean_reward UCB रैंकिंग पर हावी हो जाता है। अन्वेषण दुर्लभ आर्म्स के लिए पूंछ में सूक्ष्मता जोड़ता है (0.3 बूस्ट मिलता है), लेकिन रैंकिंग का मुख्य भाग अवलोकित इनाम से आता है।
1000 क्यों (न कि 10, न कि 100,000)
परिमाण के क्रम का मिलान। कच्चे पुरस्कार ~10^-3 पर चलते हैं। अन्वेषण बोनस ~10^0 पर चलता है। अंतर 10^3 है। कच्चे पुरस्कार को 10^3 से गुणा करें ताकि बोनस के समान रेंज में आ जाए।
100x से स्केलिंग करने पर पुरस्कार 0.1 पर रह जाता है (अभी भी 0.294 बोनस से कम -> अन्वेषण अभी भी हावी रहता है)। 100,000x से स्केलिंग करने पर पुरस्कार 100 पर पहुँच जाता है (अब अन्वेषण कुछ भी प्रभावित नहीं कर सकता; UCB लालची mean_reward पर गिर जाता है)। 1000x कार्यशील क्षेत्र में बैठता है जहाँ दोनों पद योगदान देते हैं।
कैलिब्रेशन, न कि सिद्धांत
1000x फैक्टर इंजीनियरिंग कैलिब्रेशन है, सैद्धांतिक स्थिरांक नहीं। यह तीन चीजों पर निर्भर करता है: प्रशिक्षण हानि स्केल (8K टोकनों के शब्दकोश पर क्रॉस-एंट्रॉपी लगभग 4.5 पर चलती है), प्रति-चरण हानि क्षय दर (धीमी), और UCB स्थिरांक C=0.5। इनमें से किसी को भी बदलें, तो 1000 अब सही गुणक नहीं रह सकता।
स्केलिंग फैक्टर के बारे में तर्कसंगत सोच
आगामी
आपके पास क्या है
रिवार्ड अTRIB्यूशन CUDA के लॉस रिपोर्ट्स को UCB-तैयार सिग्नल में तीन ऑपरेशन्स से बदलता है: प्रति-सोर्स EMA लॉस इतिहास को ट्रैक करता है (alpha=0.1, धीमा), reward = max(0, EMA - loss) नेगेटिव्स को क्लिप करता है, & 1000x स्केलिंग रिवार्ड परिमाण को UCB अन्वेषण बोनस परिमाण से मैच करता है।
क्या बाकी है
फ्लोर्स और एपोक पेनल्टी (गतिविधि 79) UCB आउटपुट के ऊपर कार्य करती हैं। सोर्स फ्लोर्स प्राथमिकता वाले सोर्सेज के लिए UCB रैंक की परवाह किए बिना न्यूनतम सैंपलिंग की गारंटी देते हैं। एपोक पेनल्टी उन सोर्सेज को कम वजन देती हैं जिन्हें उनके दस्तावेजों की संख्या से अधिक बार खींचा गया है, छोटे डेटासेट्स के मेमोराइजेशन को रोकते हुए जबकि बड़े डेटासेट्स ताजा रहते हैं।
संदर्भ
ANDREA whitepaper, section 3.3.