هرس مدل یا Pruning، کنارگذاشتن اتصالها یا بخشهایی از ساختار طبق یک روش مشخص است؛ کمدقتسازی یا Quantizationبه نمایش عددیِ مقدارها مربوط است. هر دو میتوانند برای سبکسازی بررسی شوند، اما تغییرشان یکسان نیست. با چهار وزنِ فرضی، صفرکردن دو اتصال را با گردکردن مقدارها مقایسه میکنیم.
در این تمرین چه چیزی را ثابت نگه داشتهایم؟
ورودیها۱،۲،منفی۱و۰٫۵ووزنها۰٫۱۲،منفی۰٫۰۴،۰٫۷۸ومنفی۰٫۶۲هستند. خروجی، فقط ضرب داخلی است و بایاس یا تابع فعالسازی نداریم. وزنها آموزشیاند و از داده آموخته نشدهاند. خروجی اصلی برابر منفی۱٫۰۵میشود؛ احتمال یا درصد دقت نیست.
هرس بر پایهٔ اندازهٔ همین چهار وزن
دو وزن با کوچکترین قدرمطلق را صفر میکنیم: منفی۰٫۰۴و۰٫۱۲. وزنهای باقی بدون تغییر میمانند. این یک نمونهٔ ساده از ماسککردن اتصالهای منفرد است؛ بزرگی وزن بهتنهایی تضمین اهمیت آن در یک شبکهٔ واقعی نیست. خروجی تازه برای همین ورودی، منفی۱٫۰۹میشود.
| جایگاه | وزن اصلی | پس از هرس | گردشده به گام۰٫۲۵ |
|---|---|---|---|
| ۱ | 0.12 | 0 | 0 |
| ۲ | -0.04 | 0 | 0 |
| ۳ | 0.78 | 0.78 | 0.75 |
| ۴ | -0.62 | -0.62 | -0.50 |
در نمایش متراکمِ این تمرین هنوز چهار خانه داریم؛ دو خانه صفرند. صفرشدن مقدارها خودبهخود شکل آرایه، تعداد خانههای ذخیره یا اندازهٔ فایل را نصف نکرده است. در PyTorchهم روشِ ماسک میتواند وزن اصلی و ماسک جدا داشته باشد؛ قرارداد ذخیره و اجرای نهایی باید جدا بررسی شود.
گردکردن مقدارها همان حذف اتصال نیست
در ستون آخر، هر وزن اصلی را جدا به نزدیکترین مضرب۰٫۲۵گرد کردهایم؛ قواعد کد برای تساوی، half-evenاست، اما این چهار عدد روی نقطهٔ تساوی نیستند. دو وزن اول اتفاقاً صفر میشوند و دو وزن آخر هم تغییر میکنند. هدف این مثال فهم شبکهٔ مقدارهای قابل نمایش است، نه پیادهسازی یک فرمتINT8یا۴بیتی.
ضرب داخلی این ستون برابر منفی۱٫۰۰است. نزدیکترشدن یک خروجی به عدد دلخواه یا کوچکترشدن قدرمطلقش، بهبود کیفیت مدل را ثابت نمیکند؛ در اینجا اصلاً جواب هدفی برای مسئله تعریف نکردهایم. پارامترهای scale،zero-point،بستهبندی بیتها و کرنل اجرا در این کد وجود ندارند.
هرس ساختاری چه تفاوتی دارد؟
صفرکردن وزنهای پراکنده با انتخاب یک کانال یا واحد کامل برای کنارگذاشتن فرق دارد. حتی در روشِ انتخاب واحد کامل، باید دید ابزار فقط ماسک میزند یا واقعاً ساختار را برای اجرای بعدی بازسازی میکند. این صفحه هرس ساختاری اجرا نکرده و از وجود صفر، حذف فیزیکی واحد یا شتاب قطعی نتیجه نمیگیرد.
برای سبکسازی واقعی چه شاهدی لازم است؟
روش دقیق، نسخهٔ مدل، شکل وزن، نوع نمایش و پشتیبانی موتور را ثبت کنید. حجم فایل، حافظهٔ هنگام اجرا، زمان و خطای وظیفه را جدا و با ورودی برابر بسنجید. کمشدن وزن غیرصفر میتواند با سربار نگهداری اندیسها همراه باشد؛ کمدقتسازی هم ممکن است بدون پشتیبانی مناسب، شتاب یکسانی ندهد.
آزمون نسخهٔ کمدقت روی سختافزار دربارهٔ انتخاب عملی و کیفیت است؛ اینجا تفاوت دو عمل روی وزن را حساب کردیم. ترکیب دو روش نیز ترتیب و ارزیابی تازه میخواهد؛ نتیجهٔ یکی را به ترکیبشان تعمیم ندهید.
فایل و تمرین
CSVهر چهار مقدار و Pythonسه خروجی منفی۱٫۰۵،منفی۱٫۰۹ومنفی۱٫۰۰را واقعاً کنترل کرده است. مدل،GPU،فشردهساز یا فایل وزن واقعی اجرا نشده است. ورودی اول را به۱۰تغییر دهید و دوباره تفاوت خروجیها را حساب کنید؛ خواهید دید نتیجه به ورودی هم وابسته است. ادامه در مبانی هوش مصنوعی است؛ این محاسبه مشخصات داخلی محصولات اپرا را اعلام نمیکند.
فایل تمرین و منبع
چهار وزن و ورودی؛ صفرکردن اتصال در برابر گردکردن مقدار · کد حساب وزنها؛ فشردهسازی یا اجرای PyTorchنیست
منابع در ۳ نوامبر ۲۰۲۶ خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.