تقارير CUDA فهارس الوثائق
مدرب CUDA يعرف أي وثيقة قام بقصها
كل خطوة تدريب تسحب تسلسلًا من ملف .btok ثنائي، الذي يحزم العديد من الوثائق نهاية إلى نهاية. CUDA يسجل فهرس وثيقة إلى جانب الخسارة: step 47213, source=gutenberg, doc=128407, loss=2.81. وكيل يجمع هذه التقارير & يحافظ على مجموعة من فهارس الوثائق الفريدة المرئية لكل مصدر.
من العدد إلى التغطية
تغطية المصدر = unique_docs_seen / n_docs. بعض الأمثلة:
| المصدر | n_docs | unique seen | التغطية |
|---|---|---|---|
| gutenberg | 512,000 | 154,000 | 30.1% |
| hermes3-general | 67,395 | 47,176 | 70.0% |
| dictionary | 88,000 | 88,000 | 100.0% |
| synthetic-chat | 1,400 | 1,400 | 100.0% |
تُشبع المصادر الصغيرة بسرعة. تتدرج المصادر الكبيرة إلى أقل من 50% لأسابيع. مكافأة التغطية تكافئ البانديت على زيارة الوثائق التي لم يقم بأخذ عينة منها بعد داخل مصدر.
صيغة المكافأة
تتدرج مكافأة التغطية خطيًا من 1.3x عند 0% تغطية إلى 1.0x عند 50% تغطية، ثم ثابتة عند 1.0x فوق 50%:
إذا كان coverage < 0.5:
bonus = 1.0 + 0.3 * (1.0 - coverage / 0.5)
غير ذلك:
bonus = 1.0
مصدر بنسبة تغطية 0% يحصل على 1.3x؛ مصدر بنسبة 25% يحصل على 1.15x؛ مصدر بنسبة 50% ينخفض إلى 1.0x. فوق 50%، لا يُطبق أي مكافأة.
احسب المكافأة
إشارتان متميزتان للحداثة
نفس الهدف، دقة مختلفة
لدى ANDREA آليتان تمنعان التدريب الزائد على مصدر واحد. يبدو أنهما متشابهان؛ إلا أنهما يقيسان أشياء مختلفة.
Epoch penalty. يتتبع السحب الإجمالي الزائد. عندما lifetime_pulls / n_docs > 1.0، يكون لدى المصدر نظريًا قد مر بكل وثيقة مرة واحدة على الأقل. العقوبة = 1 / (1 + epochs). مصدر synthetic-chat يحتوي على 1.4K وثيقة عند 5,600 سحب مدى الحياة (epochs = 4) يحصل على عقوبة 1/5 = 0.2x. يستمر عدد العصور عبر إعادات التشغيل؛ لا يتناقص أبدًا.
Coverage bonus. يتتبع الانتعاش لكل وثيقة داخل المصدر. تقارير CUDA مؤشرات الوثائق؛ يحافظ الوكيل على مجموعة لكل مصدر. تحصل المصادر أقل من 50% تغطية للوثائق الفريدة على ما يصل إلى 1.3x. تغطية تجزي استكشاف ذيل المصدر؛ عقوبة العصر تعاقب استنزافه.
لماذا كلاهما مهم
| الإشارة | التتبع | الاتجاه | الحد الأقصى | يستمر عبر إعادة التشغيل |
|---|---|---|---|---|
| عقوبة العصر | السحب الإجمالي الزائد | يقلل | 1/(1+e) | نعم |
| مكافأة التغطية | حداثة لكل وثيقة | يعزز | 1.3x | نعم |
يمكن لمصدر غوتنبرغ يحتوي على 500 ألف وثيقة أن يبقى أقل من 50% تغطية طوال تشغيل التدريب 200 ألف، دون الاقتراب أبدًا من عصر=1. عقوبة العصر تتجاهله؛ مكافأة التغطية تسحب الـbandit بنشاط نحو 70% ذيل غير المستكشف لغوتنبرغ.
على العكس، يشبع مصدر الدردشة الاصطناعي 1.4 ألف التغطية (100%) خلال بضعة آلاف سحب؛ تبقى مكافأة التغطية عند 1.0x بينما تنمو عقوبة العصر.
ميز بين الاثنين
ما الذي تشتريه مكافأة التغطية لـ ANDREA
وضع الفشل الذي تمنعه
بدون تتبع على مستوى الوثيقة، يختار البانديت الذي يعتمد على مكافأة كل خطوة تسلسلات .btok بشكل جشع. يحتوي مجموعة غوتنبرغ من 500 ألف وثيقة على بضعة آلاف من التسلسلات ذات الإنتروبيا العابرة المنخفضة (نثر متسق، مفردات شائعة). يعود البانديت الذي يعتمد على المكافأة فقط إلى تلك التسلسلات مرارًا وتكرارًا لأنها تستمر في إنتاج إشارات مكافأة قوية.
النتيجة: يتم أخذ عينة من مجموعة 500 ألف وثيقة عبر ربما 2 ألف إلى 5 آلاف تسلسل مميز على مدار 200 ألف خطوة تدريب. يحفظ النموذج تلك التسلسلات دون رؤية الباقي أبدًا. سعة مهدرة؛ التغطية عالقة أقل من 1%.
ما الذي يوفره مكافأة التغطية
1.3x عند 0% تغطية، يتناقص إلى 1.0x عند 50%. هذا الدفع ينتشر عبر اختيار UCB1: تبقى الأذرع ذات التغطية المنخفضة تنافسية حتى عند انخفاض مكافأة كل سحب. يستكشف البانديت الذيل بتصميم بدلاً من الصدفة.
عبر تشغيل 200 ألف خطوة على غوتنبرغ 500 ألف وثيقة، ترفع مكافأة التغطية التغطية المُلاحظة عادةً من ~3% (بدون مكافأة) إلى ~25-30% (مع مكافأة). نفس الحوسبة، ثماني إلى عشر مرات المزيد من الوثائق المُمسوسة.
أين يوجد التتبع
| المكون | المسؤولية |
|---|---|
microgpt_cuda.cu | يبلغ عن فهرس الوثيقة لكل خطوة تدريب |
training_proxy.py | يحافظ على مجموعة seen_docs لكل مصدر |
training_proxy.py | يحسب التغطية، يطبق مكافأة على مكافأة البانديت |
training_proxy.py | يحفظ seen_docs في .state.json عبر إعادة التشغيل |