هذا المقال لمستوى: متوسط — يفترض إنك تعرف أساسيات الشبكات العصبية ودالة الخسارة، ودرّبت أو استخدمت نموذجًا مرة على الأقل.
لو عايز نموذج أصغر 40% وأسرع 60% في الاستدلال، بس يحتفظ بحوالي 97% من دقة النموذج الكبير، التقطير المعرفي هو الطريقة اللي بتوصّلك لده. المقال ده بيشرحلك إزاي، بمثال بسيط الأول، وبعدين بالكود والأرقام.
التقطير المعرفي (Knowledge Distillation): إزاي يتعلّم نموذج صغير من نموذج عملاق
المشكلة باختصار
عندك نموذج كبير دقته ممتازة، بس بطيء وغالي في التشغيل. الطريقة الشائعة إنك تدرّب نموذج صغير من الصفر على نفس البيانات. الطريقة دي بتفشل غالبًا: النموذج الصغير بيوصل لدقة أقل بفرق واضح، لأنه بيتعلّم من "إجابات صحيحة/خطأ" بس، من غير ما يشوف تفكير النموذج الكبير. التقطير بيحل ده: النموذج الصغير (الطالب) يتعلّم يقلّد مخرجات النموذج الكبير (المعلّم)، مش بس الإجابة النهائية.
مثال بسيط: المدرّس اللي بيشرح ليه الإجابة غلط
تخيّل طالبين بيتعلّموا يفرّقوا بين صور الحيوانات. الطالب الأول عنده كتاب فيه الإجابة الصحيحة بس: "الصورة دي قطة". خلاص، معلومة واحدة.
الطالب التاني عنده مدرّس شاطر بيقوله: "دي قطة باحتمال 72%، بس فيها شبه من كلب بنسبة 19%، وممكن تتلخبط مع ثعلب بنسبة 7%، ومستحيل تكون مركب". المدرّس هنا مبيديش الإجابة وبس، بيدّي "درجات التشابه" اللي في دماغه.
الطالب التاني هيتعلّم أسرع وأحسن، لأنه عرف إن القطة والكلب قريبين في الشكل، والقطة والمركب بعيدين تمامًا. المعلومة الزيادة دي اسمها بالظبط "المعرفة المظلمة" (dark knowledge)، وهي جوهر التقطير.
المفهوم علميًا: الاحتمالات الناعمة ودرجة الحرارة
النموذج العادي بيتدرّب على "تسمية صلبة" (one-hot): القطة = 1 وكل الباقي = 0. ده بيرمي معلومة مهمة: العلاقات بين الفئات. التقطير بيستبدل ده بـ"تسمية ناعمة" (soft labels) جايه من المعلّم، وهي توزيع احتمالات كامل على كل الفئات.
المشكلة إن النموذج الكبير بيبقى واثق جدًا، فبيطلع احتمال زي 0.99 للقطة وشبه صفر للباقي، وده بيخفي المعرفة المظلمة. الحل اللي قدّمه Hinton وزملاؤه سنة 2015 هو "درجة الحرارة" (temperature). بنقسم الـ logits على T قبل الـ softmax:
p_i = softmax(z_i / T)لمّا T = 1 ده الـ softmax العادي. لمّا نرفع T (مثلًا 4)، التوزيع بيبقى "أنعم" وبتظهر الفروق الصغيرة بين الفئات. الافتراض هنا إن الفروق الصغيرة دي فيها إشارة تعليمية حقيقية، مش ضوضاء. الطالب بيتدرّب على هدفين: يقلّد التوزيع الناعم للمعلّم (خسارة KL divergence عند نفس T)، ويصيب الإجابة الحقيقية كمان (خسارة cross-entropy عادية).
الحل عمليًا: كود خسارة التقطير
ده مثال شغّال بـ PyTorch لدالة الخسارة المركّبة. الطالب بياخد الاتنين: هدف المعلّم الناعم، والإجابة الحقيقية.