دراسة القصبة 38: تصنيف التنسيق الدقيق حسب التغيير الرئيسي
Type: Build
Languages: Python (torch, numpy)
Prerequisites: Phase 19 lessons 30-37 (NLP LLM track: tokenizer, embedding table, attention block, transformer body, pre-training loop, checkpointing, generation, perplexity)
Time: ~90 minutes
أهداف التعلم
- استبدل رأس نموذج اللغة برأس تصنيف دون إعادة تشغيل الجسم.
- تنفيذ نظامين للتدريب: تجميد الجسم (الرأس فقط) والتحديد الدقيق الكامل، وتقاسم حلقة تدريب واحدة.
- بناء خط أنابيب بيانات واعية للتوكينزير التي تضغط، وتغطية التغطية، وتجمع الناتج الانتباه.
- الحساب الدقيق، التذكير، F1، ومصفوفة الارتباك من المخططات الخام.
- سبب التنازل بين عدد المعلمات، وقت التدريب، و غرفة الرأس.
المشكلة
لقد تدربت تحويل صغير على مجموعة عامة. رأس الخروج يعرض الحالة الخفية الأخيرة إلى مخزون لغوي من 1000 رمز. لديك الآن 800 رسالة نصية تحمل علامة بريد غير مرغوب فيها أو الخنزير والتي تريد تصنيف ثنائي. هناك ثلاثة خيارات.
الخيار الخطأ هو تدريب مصنف جديد من الصفر على 800 مثال. جسم النموذج المُدرب مسبقاً يرمز بالفعل هيكلاً مفيدًا: هوية الكلمة، الموقع، التواجد البسيط. إرمالها يُهدر الحوسبة التي بناها.
الخيارين الصحيحين هو تبادل الرأس مع الجسم المجمد، وتبادل الرأس مع الجسم المدرب. التدريب الرأس فقط سريع، تقريبا مجاني في الذاكرة، ونادرا ما يزداد مع هذه البيانات الصغيرة. التنسيق الدقيق الكامل هو أبطأ، يمكن أن يزداد من التكيف على البيانات الصغيرة، ولكن يصل إلى دقة أعلى عندما يتحرك المجال التدريبي التدريبي من الجسم السابق.
هذا الدروس يُبني على كليهما، لذا يمكنك مقارنتهما على نفس المعدة.
المفهوم
flowchart LR T[Tokens] --> E[Token + position<br/>embeddings] E --> B[Transformer body<br/>N blocks] B --> H1[Old: LM head<br/>vocab projection] B --> H2[New: classifier head<br/>linear to 2 logits] H2 --> L[Cross-entropy loss<br/>vs label]
النموذج هو وظيفةf_theta(tokens) -> hidden_statesالرأس هو وظيفةg_phi(hidden) -> logits. تبادل الرؤوس يعني الاحتفاظthetaوبدلg_phi.معايير الجسم هي الجزء الثمين .الرأس طبقة خطية واحدة
هناك مجموعة من المعلمات القابلة للتدريب:
thetaعشرات الآلاف من الوزن لكل كتلة إنتباهphi(الرأس):hidden_dim * num_classesالوزن بالإضافة إلى التحيز
في التدريب الرئيسي فقط تقوم بحساب التدفقات مقابلphiو أنصفهم ضدtheta. بيتورش يسمح لك بذلك عن طريق إعدادrequires_grad=Falseيرى المتحقق بعد ذلك رأس فقط والجسم يبقى مجمد
في التنسيق الكامل تسمح التدفقات تدفق مرة أخرى عبر كومة كاملة. وزن الجسم يتحرك لتتناسب مع هدف التصنيف. الخطر هو النسيان الكارثي على البيانات الصغيرة: يتم غسيل تدريب الجسم قبل الضوضاء المفرطة.
سؤال التجميع
المصفوف يحتاج إلى متجه واحد لكل تسلسل، وليس متجه واحد لكل رمز. ثلاثة خيارات شائعة:
- Mean pool: متوسط الحالات الخفية عبر التسلسل، وزنها بواسطة قناع الاهتمام.
- CLS pool: إعداد رمز خاص واستخدام إصداره فقط. هذا ما يفعله BERT.
- Last-token pool: استخدم آخر رمز غير ملصق هذا ما يفعله المصنفون من فئة GPT
يستخدم هذا الدروس جمع المتوسط مع وزن قناع الاهتمام الصريح. إنه أبسط، يعطي إشارة مستقرة على طول التسلسل، ولا يتطلب تدريبًا مسبقًا على رمز CLS.
flowchart LR H[Hidden states<br/>B x T x D] --> M[Mask out pads] M --> S[Sum across T] S --> N[Divide by<br/>non-pad count] N --> P[Pooled<br/>B x D] P --> C[Classifier head<br/>D x 2]
البيانات
800 رسالة رسالة نصية، متوازنة 400 رسالة غير مرغوب فيها و 400 مخبث، يتم توليدها بشكل تحديدي في code/main.py. يستخدم المولد بذرة ثابتة ، ويختار الشبابط ويستبدل ملء فتحات ، ويصدر رسائل تتراوح طولها بين 5 و 25 رمزا. المجموعات البيانية الحقيقية لديها ضوضاء لا تفعل هذا المكون. نقطة المكون هي قابلية التكرار.
تقسيم البيانات 80/20: 640 قطار، 160 اختبار. يتم تقسيم التقسيمات بحيث تحتفظ مجموعة الاختبار بالتوازن 50/50. مجموعة متواصلة مع توازن معروف تسمح بدقة والذكرى أن تقرأ بأرقام صادقة.
المقاييس
التصنيف الثنائي مع الفئة 1 كالفئة الإيجابية (الإبلاغ عن طريق البريد الإلكتروني).
TP: المتوقع البريد الإلكتروني، كان البريد الإلكتروني.FP: المتوقع البريد الإلكتروني، كان الخنزير.FN: توقعت لحم، كان البريد الإلكتروني.TN: توقعت الخنزير، كان الخنزير.
المقاييس الثلاثة الرئيسية:
precision = TP / (TP + FP)من الرسائل المشاركة بالبريد الإلكتروني، ما هو الجزء الحقيقي؟recall = TP / (TP + FN)من الرسائل غير المرغوب فيها، ما الجزء الذي تم إصداره على العلامة النموذجية؟F1 = 2 P R / (P + R). المتوسط المنسيق بين الاثنين
تقوم المصفوفة المربطة بالارتباك بطبع الأربعة أرقام كشبكة 2x2، وكتب الموضة هذا لتقديم الدعم لكل من نظام التدريب.
الهندسة المعمارية
flowchart TD Toks[(SMS fixture<br/>800 labelled)] --> Tok[ByteTokenizer<br/>vocab 260] Tok --> DS[ClassificationDataset<br/>pad + mask] DS --> DL[DataLoader<br/>batched] DL --> M[Classifier<br/>body + mean-pool + head] M --> L[Cross-entropy loss] L --> O[Adam optimiser] O -->|head-only| M O -->|full FT| M M --> E[Evaluator<br/>P / R / F1]
الجسم هو محول صغير عمدا: الكلمات 260، مخفي 64، 4 رؤوس، 2 كتلة، تسلسل أقصى 32. هو صغير بما يكفي لتدريب كلا النظم إلى التقارب في غضون تسعين ثانية على جهاز التشغيل المركزي.pretrain_quickيقوم المساعد بخمس فترات من تدريب LM على نص نفس المعدة لإعطاء الجسم نقطة بداية غير بسيطة. وهذا يبقي الدروس ذاتية.
ما ستبني
التنفيذ هو واحد main.pyبالإضافة إلى وحدة اختبار واحدة (code/tests/test_main.py)
ByteTokenizer: خرائط بايتات إلى هويات، احتفظ هوية البد.Block: كتلة تحويل مع تركيز متعدد الرؤوس وطبقة إرسال إلى الأمام.LMBody: رمز + وضع إضافة كومة من الكتل. يعيد الحالات الخفية.MeanPool: متوسط الموزن على القناع على محور التسلسل.Classifierالجسم، المجموعة، الرأس الخطية. الجسم هو نفس الحالة عبر الأنظمة.freeze_bodyوunfreeze_body: التبديلrequires_gradعلى ملامح الجسمtrain_classifier: حلقة مشتركة واحدة. يقبل النموذج ومحفز المثالي الذي يتم تكوينه لأي مجموعة برمجة يمكن تدريبها.evaluate: يدير مجموعة الاختبار ويرجعMetrics(precision, recall, f1, confusion). . .run_demo: يُدرب الجسم قبل قليل، ثم يُدرب ويقيم رأسه فقط، ثم يُملي، يُطبق كلتا التقارير، و يخرج من الصفر.
لماذا المقارنة مهمة
نظام الرأس فقط عادة ما يتدرب بشكل أسرع ويتساوى بشكل أكثر نعمة. على هذا الجهاز عادة ما ترى الدقة بالقرب من 0.9 وتتذكر بالقرب من 0.85 بعد عشرين حقبة من التدريب الرأس فقط. يستغرق التنسيق الكامل حوالي ثلاث مرات أطول ويصل إلى نقطتين في كلتا الاتجاهين ، اعتمادا على البذور العشوائية.
الدروس لا تختار الفائز. انها تعلمك لقراءة الأرقام والتكلفة. على 800 مثال و جسم صغير، رأس فقط هو المكالمة الصحيحة. على 80،000 مثال و جسم أكبر، التنسيق الكامل يبدأ في الوفاء. العقد الذي تأخذ من هذا الدروس هو API: نفس train_classifierوظيفة التعامل مع كل منهما، والتحويل هو مكالمة واحدة.
إرسال أهداف
- إضافة نظام ثالث يفكّر فقط الكتلة الأخيرة. هذا ما يسمى أحياناً التنظيم الجزئي. إنه يكلف أقل من FT كامل وتتعلم أكثر من رأس فقط.
- إضافة جدول معدل التعلم. جدول كوسين على الرأس بالإضافة إلى معدل ثابت أصغر على الجسم هو إعداد إنتاج شائع.
- استبدل المجموعة المتوسطة بجميع الاهتمام المتعلم: طبقة صغيرة من الاهتمام بمسألة واحدة متعلمة. هذا غالبًا ما يفوق المجموعة المتوسطة على تسلسلات أطول.
التنفيذ يعطيك الركاب الاختبارات تعقد العقد الأرقام لك لتدفع
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.