تعرف على كيفية تقليل تقليم النماذج لحجم الشبكة العصبية وتعقيدها بالنسبة إلى الذكاء الاصطناعي الطرفي. استكشف استراتيجيات تحسين Ultralytics من أجل استنتاج أسرع على الأجهزة المحمولة.
تشذيب النموذج هو تقنية في التعلم الآلي تُستخدم لتقليل حجم وتعقيد حسابي الشبكة العصبية عن طريق إزالة المعلمات غير الضرورية بشكل منهجي. مثلما يقوم البستاني بتقليم الأغصان الميتة أو المتضخمة لتشجيع الشجرة على النمو، يقوم المطورون بتشذيب الشبكات الاصطناعية لجعلها أسرع وأصغر حجماً وأكثر كفاءة في استخدام الطاقة. هذه العملية ضرورية لنشر بنى التعلم العميق الحديثة على الأجهزة ذات الموارد المحدودة، مثل الهواتف الذكية وأجهزة الاستشعار المدمجة وأجهزة الحوسبة المتطورة.
الفكرة الأساسية وراء التقليم هي أن الشبكات العصبية العميقة غالبًا ما تكون "مفرطة في المعلمات"، مما يعني أنها تحتوي على عدد أكبر بكثير weights and biases مما هو ضروري لحل مشكلة معينة. أثناء عملية التدريب، يتعلم النموذج عددًا كبيرًا من الروابط، ولكن لا تساهم جميعها بشكل متساوٍ في الناتج النهائي. تحلل خوارزميات التقليم النموذج المدرب لتحديد هذه الروابط الزائدة أو غير المفيدة — عادةً تلك التي تقترب أوزانها من الصفر — وإزالتها.
يتبع دورة حياة النموذج المُعدل عمومًا الخطوات التالية:
غالبًا ما ترتبط هذه المنهجية بـ فرضية تذكرة اليانصيب، التي تشير إلى أن الشبكات الكثيفة تحتوي على شبكات فرعية أصغر ومعزولة (تذاكر فائزة) يمكنها تحقيق دقة مماثلة للنموذج الأصلي إذا تم تدريبها بشكل منفصل.
تصنف طرق التقليم عمومًا بناءً على بنية المكونات التي يتم إزالتها.
يعد التقليم عاملاً مهماً في تمكين الذكاء الاصطناعي الطرفي، حيث يتيح تشغيل النماذج المتطورة في البيئات التي لا تتوفر فيها اتصال بالسحابة أو تكون بطيئة للغاية.
على الرغم من أن تقليم النموذج أداة قوية، إلا أنه غالبًا ما يتم الخلط بينه وبين تقنيات تحسين النموذج الأخرى أو استخدامه جنبًا إلى جنب معها .
يوضح Python التالي Python كيفية تطبيق التقليم غير المنظم على طبقة تلافيفية باستخدام PyTorch. هذه خطوة شائعة قبل تصدير النماذج إلى تنسيقات محسّنة مثل ONNX.
import torch
import torch.nn as nn
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
module = nn.Conv2d(in_channels=1, out_channels=20, kernel_size=3)
# Apply unstructured pruning to remove 30% of the connections
# This sets the weights with the lowest L1-norm to zero
prune.l1_unstructured(module, name="weight", amount=0.3)
# Calculate and print the sparsity (percentage of zero elements)
sparsity = 100.0 * float(torch.sum(module.weight == 0)) / module.weight.nelement()
print(f"Layer Sparsity: {sparsity:.2f}%")
بالنسبة للمستخدمين الذين يرغبون في إدارة دورة حياة مجموعات البيانات والنماذج بالكامل — بما في ذلك التدريب والتقييم والنشر — توفر Ultralytics واجهة مبسطة. وهي تبسط عملية إنشاء نماذج محسّنة للغاية مثل YOLO26 وتصديرها إلى تنسيقات متوافقة مع الأجهزة مثل TensorRT TensorRT أو CoreML.