Knowledge Distillation
يدرّب تقطير المعرفة نموذجًا صغيرًا، هو الطالب، لمحاكاة مخرجات نموذج أكبر، هو المعلم، أو سماته، مع الحفاظ على قدر كبير من دقته باستخدام موارد حوسبة أقل بكثير.
تقطير المعرفة هو تقنية لضغط النماذج يُدرَّب فيها نموذج شبكة عصبية صغير، يُسمى "الطالب"، على محاكاة سلوك نموذج "معلّم" أكبر وأكثر دقة. يتعلم الطالب من احتمالات المخرجات أو السمات الداخلية للمعلّم، إضافةً إلى التصنيفات المرجعية أو بدلًا منها، وتتيح له هذه الأهداف الأغنى تحقيق دقة أعلى من البنية نفسها عند تدريبها على التصنيفات وحدها. والنتيجة نموذج سريع وصغير بما يكفي للهواتف واللوحات المضمّنة وغيرها من عتاد الذكاء الاصطناعي الطرفي، مع الحفاظ على قدر كبير من جودة المعلّم. وأظهر بوسيلو وكاروانا ونيكوليسكو-ميزيل عام 2006 إمكانية ضغط معرفة مجموعة نماذج في نموذج واحد، ثم أطلق هينتون وفينيالس ودين على النهج اسم تقطير المعرفة عام 2015، وقدّموا الأهداف المليّنة بدرجة الحرارة التي لا تزال معظم الطرق تستخدمها.
كيف يعمل تقطير المعرفة#
لا يوضح التصنيف سوى أن الصورة تعرض ذئبًا. أما مخرجات softmax لمعلّم مدرَّب فتقدم معلومات أكثر: تشبه الصورة كلب الهاسكي إلى حد ما، وتشبه قطة قليلًا، ولا تشبه سيارة إطلاقًا. وتصل هذه الاحتمالات النسبية للفئات الخاطئة، التي تُسمى غالبًا المعرفة المظلمة، إلى الطالب على هيئة أهداف لينة. ويؤدي قسمة قيم اللوغيت على درجة حرارة T أكبر من 1 قبل تطبيق softmax إلى تسطيح التوزيع، بحيث تكتسب الاحتمالات الصغيرة وزنًا كافيًا للتعلم منها. وخسارة التقطير هي تباعد كولباك-لايبلر بين التوزيعين المليّنين للمعلّم والطالب، مضروبًا في T² كي تظل تدرجاتها مماثلة من حيث الحجم لتدرجات خسارة التصنيف العادية:
import torch
import torch.nn.functional as F
# Logits for one wolf photo over the classes [wolf, husky, cat, car]
teacher_logits = torch.tensor([[6.0, 4.0, 1.0, -2.0]])
student_logits = torch.tensor([[4.0, 1.0, 1.5, 0.0]])
# Dividing logits by a temperature T > 1 softens the teacher's distribution
for T in (1.0, 4.0):
probs = F.softmax(teacher_logits / T, dim=1)
print(f"T={T}: teacher probabilities {[round(p, 3) for p in probs[0].tolist()]}")
# Distillation loss: KL divergence between the softened distributions, scaled by T^2
T = 4.0
soft_targets = F.softmax(teacher_logits / T, dim=1)
student_log_probs = F.log_softmax(student_logits / T, dim=1)
loss = F.kl_div(student_log_probs, soft_targets, reduction="batchmean") * T**2
print(f"Distillation loss at T={T}: {loss.item():.3f}")عند T=1، يمنح المعلّم فئة الذئب القيمة 0.875، ولا يخصص سوى 0.006 للقطة و0.0 للسيارة. وعند T=4، تصبح قيم اللوغيت نفسها 0.493 و0.299 و0.141 و0.067، ما يبيّن للطالب أن الذئب يشبه كلب الهاسكي أكثر من القطة، وأن القطة تشبه الذئب أكثر من السيارة. يقلل الطالب هذه الخسارة، التي تبلغ هنا 1.244، عادةً بوصفها مجموعًا موزونًا مع خسارة المهمة العادية على التصنيفات المرجعية. ويظل المعلّم ثابتًا طوال العملية ولا ينفّذ سوى تمريرات أمامية:
أنواع التقطير#
- القائم على الاستجابة: يطابق الطالب المخرجات النهائية للمعلّم، كما في طريقة الأهداف اللينة أعلاه، ولا يحتاج من المعلّم إلى شيء سوى قيم اللوغيت. وقد جمع DistilBERT هذه الطريقة مع نمذجة اللغة وخسائر الحالات المخفية أثناء التدريب المسبق، ليجعل BERT أصغر بنسبة 40% وأسرع بنسبة 60% مع الحفاظ على 97% من قدرته على فهم اللغة.
- القائم على السمات: يطابق الطالب خرائط السمات الوسيطة للمعلّم، مع موائم صغير متعلَّم يعالج أي اختلاف في عدد القنوات. وقدّمت FitNets هذه "التلميحات" ودرّبت طالبًا يقل عدد معلماته بنحو 10.4 مرات عن معلّمه، وتفوّق عليه في CIFAR-10.
- على مستوى التسلسل: ينشئ معلّم نموذج اللغة نصًا، ثم يُضبط الطالب بدقة على تلك المخرجات. وقد ضبطت DeepSeek بدقة نماذج R1 المقطّرة، المستندة إلى Qwen2.5 وLlama 3، باستخدام 800,000 عينة منتقاة بواسطة DeepSeek-R1.
يناسب التقطير القائم على السمات الكواشف، التي تكون مخرجاتها آلاف المربعات والدرجات بدلًا من توزيع واحد للفئات. ويستخدم Ultralytics YOLO هذا النوع عندما يتلقى التدريب معلّمًا من distill_model: إذ يوفّر نموذج YOLO26 أكبر ومجمّد خرائط السمات الثلاث في العنق التي تغذي رأس الكشف، ويطابقها الطالب عبر موائمات التفاف 1×1، مع خسارة L2 موزونة بثقة المعلّم ومقاسة بعامل dis (6.0 افتراضيًا). وعلى COCO val2017، يحقق نموذج YOLO26 nano المقطّر قيمة mAP50-95 تبلغ 41.5، مقارنةً بـ40.9 للنموذج نفسه المدرّب من دون معلّم، وبكلفة استدلال مطابقة.
from ultralytics import YOLO
# الطالب: نموذج YOLO26 nano صغير الحجم الذي سيُنشر
model = YOLO("yolo26n.pt")
# المعلّم: نقطة تحقق أكبر لـYOLO26 توجّه التدريب ثم يُستغنى عنها بعد ذلك
results = model.train(data="coco8.yaml", epochs=5, distill_model="yolo26s.pt")التقطير مقارنةً بالمصطلحات ذات الصلة#
- التعلّم بالنقل: يعيد استخدام أوزان النموذج نفسه نقطةَ بداية لمهمة جديدة. أما التقطير فيدرّب بنية مختلفة، أصغر عادةً، على محاكاة نموذج في المهمة نفسها.
- تقليم النموذج: يزيل الأوزان أو القنوات أو الطبقات من شبكة مدرّبة. وغالبًا ما تُضبط النماذج المُقلّمة بدقة باستخدام التقطير من النموذج الأصلي لاستعادة الدقة.
- تكميم النموذج: يخزّن الأوزان والتنشيطات بدقة أقل، مثل INT8. وهو يصغّر البنية نفسها، ويمكن دمجه مع التقطير الذي يختار بنية أصغر.
- مجموعة النماذج: تحسب متوسط مخرجات عدة نماذج وقت الاستدلال. وكان تقطير مجموعة نماذج في طالب واحد الدافع الأصلي وراء هذه التقنية.
- تقطير مجموعة البيانات: رغم تشابه الاسم، فإنه يضغط مجموعة البيانات بدلًا من النموذج. ضغط Wang وآخرون صور تدريب MNIST البالغ عددها 60,000 صورة إلى عشر صور اصطناعية، صورة واحدة لكل فئة، تقرّب شبكة ذات تهيئة ثابتة من دقتها الأصلية خلال بضع خطوات تدرّج.










