گرادیان هنگام عبور از مسیرهای طولانی میتواند بسیار کوچک یا بسیار بزرگ شود. در یک زنجیرهٔ تکعددی، اثر را با ضرب مشتقهای محلی میبینیم؛ سپس نشان میدهیم محدودکردن نرم گرادیان چه چیزی را تغییر میدهد و چرا گرادیان کوچک را بازیابی نمیکند. این تمرین، اجرای آموزش یک شبکه نیست.
از یک مشتق تا دوازده ضرب
فرض کنید مشتقِ ورودی زیان در انتهای مسیر۱ است و در هر مرحله، مشتق محلی یک مقدار ثابت d دارد. پس سهم برگشتی پس از n مرحله برابر d به توان n است. این فرضِ ساده را برای آموزش انتخاب کردهایم؛ در شبکهٔ واقعی مشتقها به وزن، ورودی، فعالسازی و مسیر وابستهاند و در حالت برداری با Jacobian سروکار داریم.
| مشتق محلی ثابت | ۱مرحله | ۴مرحله | ۱۲مرحله |
|---|---|---|---|
| ۰٫۵ | ۰٫۵ | ۰٫۰۶۲۵ | ۱÷۴۰۹۶≈۰٫۰۰۰۲۴۴۱۴۱ |
| ۱ | ۱ | ۱ | ۱ |
| ۲ | ۲ | ۱۶ | ۴۰۹۶ |
ارقام این جدول با Fraction دقیق ساخته شدهاند. تفاوت بزرگِ سطر اول و سوم از یک ضریب کوچک در هر مرحله جمع نشده؛ از ضربِ تکراری آمده است. مقدار کوچکِ غیرصفر با صفرشدن به علت محدودیت نمایش عددی یک مفهوم نیست. کد اینجا کمدقتسازی یا underflow سختافزار را شبیهسازی نمیکند.
علامت و اندازه را جدا بخوانیم
اگر d=−۰٫۵ باشد، سه مرحله حاصل−۱÷۸ و چهار مرحله حاصل۱÷۱۶ میدهد. علامت میتواند عوض شود درحالیکه اندازه کوچکتر میشود. در شبکهٔ چندمسیره، جمع سهم مسیرها و حذف متقابل هم دخیل است؛ از جدول یک زنجیره، حکم قطعی برای کل شبکه یا یک تابع فعالسازی استخراج نکنید.
مثال قاعدهٔ زنجیرهای پسانتشار مشتق چهار پارامتر را در یک شبکهٔ کوچک حساب میکند. اینجا سؤال، اثر طول مسیر و اندازهٔ سهم برگشتی است. مقایسهٔ توابع فعالسازی هم دربارهٔ مقدار و دامنهٔ توابع است؛ انتخاب تابع بهتنهایی نتیجهٔ آموزش را تضمین نمیکند.
محدودکردن نرمِ کل: یک بردار، یک ضریب
بردار ساختگی g=[۳،۴] نرم اقلیدسی۵ دارد. در قرارداد آموزشیِ ما با سقف۲، ضریب min(1,2/||g||) یعنی۰٫۴ میشود و خروجی [۱٫۲،۱٫۶] است. نرم تازه۲ و جهت بردار حفظ میشود؛ هر دو مؤلفه در یک ضریب مثبت ضرب شدهاند. این برابریها واقعاً در کد کنترل شدهاند.
PyTorch نیز ابزار clip_grad_norm_ را برای محدودکردن نرمِ گرادیانهای پارامترها دارد. کد این مطلب یک قرارداد ریاضی مستقل است و ادعای برابری بیتی یا پوشش جزئیات عددی آن ابزار را ندارد. اگر گرادیان بین چند tensor پخش است، محاسبهٔ نرمِ هرکدام بهتنهایی و محدودکردن جداگانه، همان نرمِ کلِ بردارِ بههمپیوسته نیست.
برش مؤلفهای، قرارداد دیگری است
اگر هر مؤلفه را جدا در بازهٔ [−۲،۲] ببریم، [۳،۴] به [۲،۲] تبدیل میشود. نسبت دو مؤلفه از۳÷۴ به۱ تغییر میکند؛ پس جهت ثابت نمیماند و نرم خروجی √۸ است، نه۲. انتخابِ سقف مؤلفه را با انتخابِ سقف نرم یکی نگیرید. فایل Python هر دو روش را کنار هم اجرا میکند.
چرا clipping راهحل گرادیان محوشونده نیست؟
در همین قرارداد، بردار کوچک [۰٫۰۰۱،۰٫۰۰۲] چون زیر سقف است بدون تغییر میماند. بردار صفر هم صفر میماند. محدودکردن از بالا، اطلاعاتی را که در مسیر ضعیف شده دوباره ایجاد نمیکند؛ ضمن آنکه گرادیانِ محدودشده الزاماً به معنی گام پارامتری با نرم۲ نیست، چون بهینهساز، نرخ یادگیری و حالت داخلیِ آن جدا دخیلاند.
در بررسی واقعی چه چیزی ثبت کنیم؟
مسیر یا لایه، نرم گرادیان پیش و پس از محدودسازی، قاعدهٔ محدودسازی، سقف و وضعیت NaN/Inf را جدا ثبت کنید. این کدِ کوچک ورودی نامتناهی را رد میکند و علاج عمومیِ ناپایداری آموزش نیست. جدولِ ساختگی هیچ ادعایی دربارهٔ دقت، سرعت یا معماری اپرا ندارد. برای ادامه، مسیر مبانی هوش مصنوعی را ببینید و برای مسئلهٔ واقعی، ورودی و خروجی مورد انتظار را پیش از انتخاب مدل روشن کنید.
فایل تمرین و منبع
کد ضرب زنجیره، محدودسازی نرم و مقایسهٔ برش مؤلفهای · سه مشتق محلی و سه طول زنجیره؛ دادهٔ ساختگی و دقیق
- کتاب Deep Learning، بخش۱۰٫۷؛ اثر ضرب تکراری بر گرادیان
- مستندات رسمی محدودسازی نرم کل گرادیان در PyTorch
منابع در ۳ نوامبر ۲۰۲۶ خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.