Few Shot Learning شرح بسيط (مع رسوم توضيحية وكود حقيقي)
Few Shot Learning: الأساسيات في مقال واحد — كود حقيقي، مخططات وخطوات ملموسة، مقتطفات من دورة مكونة من 35 درسًا.
دليل مباشر وموجز: Few Shot Learning مفصل مع مخططات وأمثلة عملية وأوامر مجربة. كل ذلك من دورة منظمة من 11 فصلاً — إليك أفضلها.
- مقدمة وتثبيت
- لماذا الـ few-shot
- أساسيات الـ meta-learning
- المقاييس والمعايير المرجعية
- شبكات Siamese
الـ attention للـ few-shot
الأهداف التعليمية
حدس الـ attention
الـ attention، في التعلم العميق، هو فكرة أن النموذج يستطيع إعطاء وزن مختلف لكل عنصر في مجموعة حسب السياق. عندما تقرأ جملة، لا يولي دماغك نفس الاهتمام لكل كلمة؛ بل يركز على الكلمات المهمة.
تشبيه الفصل الدراسي
تخيل فصلاً دراسياً حيث يعطي كل طالب رأيه في إجابة سؤال. بدلاً من أخذ رأي الأفضل (Siamese)، أو متوسط الجميع (ProtoNet)، يتم الترجيح: الطالب الذي يبدو «قريباً» من الموضوع له صوت أكبر.
Siamese
نأخذ المثال الأقرب ونتجاهل الباقي. صوت واحد، صفر امتناع.
ProtoNet
نحسب المتوسط المتساوي لأمثلة الفئة. تصويت عادل بدون تمييز.
Matching Net
نعطي كل مثال وزناً حسب تشابهه مع الـ query. تصويت مرجح.
معادلة التنبؤ
لـ query q ودعم {(x_i, y_i)} :
يتنبأ النموذج إذن بـ توزيع احتمالات، مجموع كل المساهمات المرجحة لكل مثال دعم.
الـ attention الناعم مقابل الصلب
| النوع | السلوك | الاستخدام في الـ few-shot |
|---|---|---|
| صلب (hard) | يختار مثالاً واحداً (argmax) | مكافئ لـ Siamese |
| ناعم (soft) | يرجح كل الأمثلة | Matching Networks |
السياق: تأثير الأمثلة الأخرى
نقطة مهمة في Matching Networks: يمكن للمشفر أن يأخذ في الحسبان السياق الكامل للدعم (وليس كل صورة على حدة). هذه فكرة Full Context Embedding (FCE).
مقارنة مع ProtoNet
| الجانب | Matching Net | ProtoNet |
|---|---|---|
| تمثيل الفئة | يحتفظ بكل الأمثلة | نموذج أولي واحد |
| الآلية | الـ attention المرجح | المسافة إلى النموذج الأولي |
| السياق | نعم (FCE اختياري) | لا |
| الأداء K=1 (Omniglot) | ~98% | ~98% |
| الأداء K=5 (Omniglot) | ~99% | ~99.5% |
| تعقيد الكود | أعلى | بسيط جداً |
الورقة البحثية المؤسسة
حالات استخدام حقيقية للـ few-shot
الأهداف التعليمية
الحالة 1 — الطب: الأمراض النادرة
يُقال إن المرض نادر في أوروبا إذا أصاب أقل من شخص واحد من كل 2000. هناك أكثر من 7000 مرض نادر موثق، لكن كل منها غالباً ما يملك بضع عشرات من الحالات الموثقة بالصور الطبية.
المشكلة الملموسة
يرى طبيب الأشعة آفة لم يرها سوى 3 مرات في مسيرته. يود أن تقارن مساعدته الذكية هذه الصورة بكل الآفات المشابهة المُعلَّمة في العالم.
مساهمة الـ few-shot
نموذج يتعلم فضاء embeddings على صور عادية ثم يسترجع أقرب الحالات من قاعدة الآفات النادرة. حتى 5 أمثلة تكفي لتفعيل فئة.
الحالة 2 — التنوع الحيوي: الأنواع النادرة
تطبيق iNaturalist يسجل مئات الآلاف من الأنواع، لكن كثيراً منها لا يملك سوى 5 إلى 20 صورة في القاعدة العالمية بأكملها (فراشة اكتُشفت حديثاً، ألفية مستوطنة لغابة واحدة…).
الحالة 3 — الصناعة: مراقبة الجودة على العيوب النادرة
تخيل خط إنتاج بطاقات إلكترونية. الغالبية العظمى من البطاقات سليمة؛ والعيوب التي تظهر في الفحص البصري هي بطاقتان من كل 100000. خلال 6 أشهر لدينا 4 صور لـ«لحام بارد» وصورة واحدة لـ«وسادة ممزقة».
| النهج | النتيجة | المشكلة |
|---|---|---|
| CNN تقليدي متعدد الفئات | ~30% f1 على العيوب النادرة | قلة الأمثلة |
| كشف الشذوذ | يكشف ضوضاء إضافية | حساس جداً للتغيرات |
| Few-shot (ProtoNet) | ~88% f1 بـ5 أمثلة | الأفضل حالياً |
الحالة 4 — معالجة اللغة الطبيعية: نوايا العملاء المتخصصة
يجب أن يفهم روبوت محادثة مصرفي نوايا محددة جداً («إغلاق حساب قبل 30 يوماً»، «رفع رهن جزئي») والتي قد لا تملك سوى أقل من 50 مثالاً في السجلات.
# Few-shot باستخدام LLM لتصنيف نية prompt = """ أنت مصنف نوايا مصرفية. إليك 5 أمثلة: "أريد إغلاق حسابي هذا الشهر" -> CLOTURE_RAPIDE "أرغب في تقليل قرضي العقاري جزئياً" -> MAINLEVEE_PARTIELLE "هل ملف الائتمان الخاص بي قيد المعالجة؟" -> SUIVI_CREDIT "أريد إغلاق حساباتي بسرعة" -> CLOTURE_RAPIDE "أريد تحرير جزء من رهني" -> MAINLEVEE_PARTIELLE السؤال: "كيف أغلق حسابي بشكل عاجل؟" الرد:""" # → يرد LLM بـ CLOTURE_RAPIDE، بدون تدريب
الحالة 5 — المالية: أنواع جديدة من الاحتيال
يبتكر المحتالون مخططات جديدة باستمرار. عندما يكتشف بنك نمط احتيال جديد، غالباً ما لا يملك سوى 10 إلى 30 معاملة مُعلَّمة قبل أن يختفي النمط أو يتغير.
المشكلة
من المستحيل إعادة تدريب نموذج تقليدي على كل نمط جديد: سيكون ذلك بطيئاً جداً وقد تغير النمط بالفعل.
حل الـ few-shot
نموذج embeddings للمعاملات يقارن في الوقت الفعلي المعاملة الجديدة بالـ10 حالات احتيال المعروفة للنمط الحالي.
التعلم داخل السياق مع GPT
الأهداف التعليمية
الفكرة الثورية لـ GPT-3
قبل 2020، كان عمل الـ few-shot يتطلب تدريب نموذج مخصص (ProtoNet، MAML، إلخ). في 2020، نشرت OpenAI GPT-3 وأظهرت أن نموذج لغة كبير مدرب مسبقاً يستطيع عمل few-shot دون تدريب إضافي. يكفي وضع الأمثلة في الـ prompt.
مثال ملموس
prompt = """ ترجم من الفرنسية إلى الإنجليزية. فرنسية: Le chat dort sur le canapé. إنجليزية: The cat is sleeping on the sofa. فرنسية: Je vais au marché. إنجليزية: I am going to the market. فرنسية: Il fait beau aujourd'hui. إنجليزية:""" # الرد المتوقع من GPT-4: # «It is sunny today.»
دون أي مرحلة ضبط دقيق، وبمثالين فقط في الـ prompt، فهم GPT-4 مهمة الترجمة وأنتج الرد الصحيح.
Zero-shot مقابل One-shot مقابل Few-shot prompting
| الوضع | محتوى الـ prompt | مثال |
|---|---|---|
| Zero-shot | تعليمات فقط | «ترجم: مرحباً» |
| One-shot | تعليمات + مثال واحد | «ترجم. 'شكراً' -> 'Thank you'. 'مرحباً' -> » |
| Few-shot | تعليمات + 3 إلى 10 أمثلة | (كما أعلاه مع المزيد من الأمثلة) |
الورقة التي غيرت كل شيء: Brown 2020
لماذا يعمل؟
لا توجد إجابة كاملة. عدة نظريات تكمل بعضها:
1. التعرف على الأنماط
رأى النموذج ملايين القوائم «س: ... الرد: ...» أثناء التدريب المسبق ويتعرف على التنسيق.
2. الـ meta-learning الضمني
أثناء التدريب المسبق، تعلم النموذج التعلم من المهام الجديدة عبر النص الذي يستهلكه.
3. رؤوس الاستقراء (Induction heads)
تحليل المحولات يكشف دوائر داخلية («induction heads») متخصصة في نسخ الأنماط السابقة.
متى نستخدم in-context learning؟
| الوضع | التوصية |
|---|---|
| بيانات قليلة جداً (1-30 مثال) | In-context learning مع LLM |
| بيانات كثيرة (1000+ مثال) | الضبط الدقيق التقليدي |
| لا إنترنت / محلي | ProtoNet أو MAML محلياً |
| زمن استجابة حرج (< 10 مللي ثانية) | نموذج محلي مدرب |
| تكلفة API مرتفعة جداً | الضبط الدقيق أو ProtoNet |
كود Python: استدعاء واجهة OpenAI بـ few-shot
from openai import OpenAI client = OpenAI() few_shot_examples = [ {"role": "system", "content": "أنت مصنف مشاعر."}, {"role": "user", "content": "أحب هذا الفيلم!"}, {"role": "assistant", "content": "إيجابي"}, {"role": "user", "content": "كان مملًا."}, {"role": "assistant", "content": "سلبي"}, {"role": "user", "content": "لا بأس، عادي."}, {"role": "assistant", "content": "محايد"}, ] def classify(text): msgs = few_shot_examples + [{"role": "user", "content": text}] resp = client.chat.completions.create( model="gpt-4o-mini", messages=msgs, temperature=0, ) return resp.choices[0].message.content print(classify("القصة مشوقة!")) # → إيجابي
يغطي هذا المقال أكثر المقتطفات فائدة — الدورة الكاملة Few Shot Learning (11 فصلاً، 35 درساً، تمارين محلولة ومشروع نهائي) تأخذك إلى النهاية.
./الوصول-إلى-الدورة-الكاملة دورة مجانية: هندسة الـ promptsالأسئلة الشائعة
كم من الوقت يستغرق تعلم Few Shot Learning؟
هل هناك متطلبات مسبقة؟
من أين أبدأ عملياً؟
📬 هل تريد تلقي هذا النوع من الأدلة أسبوعياً؟ اشترك مجاناً — كود حقيقي، بدون كلام زائد.