کتابخانه‌ی استاندارد · هوش مصنوعی

بهینه‌سازی ai.optim

بهینه‌سازهای شبکه‌ی عصبی: SGD، آدام، RMSProp و زمان‌بندی نرخ یادگیری.

واردسازی هوش مصنوعی.بهینه‌سازی

نام آرگومان‌ها شناسه‌ی خود کد است و معادل فارسی ندارد؛ گونه‌ها، کلیدواژه‌ها و نام بسته‌ها با معادل فارسی نوشته می‌شوند.

بهینه‌ساز گرادیان‌ها را به پارامترهای بهتر تبدیل می‌کند. این بسته سه بهینه‌سازی را دارد که تقریبا همه‌ی آموزش‌های شبکه‌ی عصبی را پوشش می‌دهند (گرادیان کاهشی تصادفی با تکانه‌ی اختیاری، آدام و AdamW، آر ام اس پراپ)، به همراه برش گرادیان و زمان‌بندی نرخ یادگیری. روی پارامترهای یک مخزن پارامتر از nn کار می‌کند که autograd گرادیان‌هایشان را پر کرده است. برای مدل‌های کلاسیکی که خودشان آموزش می‌بینند، مثل رگرسیون خطی، درخت‌ها یا k-means، سراغ ml بروید.

هر حلقه‌ی آموزش همین پنج گام را دارد:

  1. نوار.بازنشانی() و مخزن.صفر کردن گرادیان()
  2. اجرای مدل و حساب کردن زیان
  3. مشتق‌گیری خودکار.پس‌انتشار(نوار، زیان)
  4. در صورت نیاز برش نُرم گرادیان و تنظیم lr از روی زمان‌بندی
  5. بهینه‌ساز.گام(مخزن)

اشتباه‌های رایج

  • گام گرادیان‌ها را پاک نمی‌کند. گرادیان‌ها روی هم جمع می‌شوند، پس فراموش کردن صفر کردن گرادیان یعنی هر گام با مجموع همه‌ی گرادیان‌های پیشین برداشته می‌شود.
  • تکانه و آدام برای هر پارامتر یک تانسور وضعیت نگه می‌دارند که از روی جایگاه پارامتر در مخزن جفت می‌شود و در نخستین گام ساخته می‌شود. برای هر مخزن یک بهینه‌ساز بسازید و همه‌ی پارامترها را پیش از شروع آموزش بیفزایید.
  • weight_decay روی همه‌ی پارامترهای مخزن اعمال می‌شود، از جمله بایاس‌ها و ضریب‌های نرمال‌سازی.
  • پیش‌فرض‌ها یکسان نیستند: lr برای گرادیان کاهشی تصادفی و آر ام اس پراپ ۰٫۰۱ است ولی برای آدام ۰٫۰۰۱. به‌روزرسانی‌ها مثل خود تانسورها با اعشار۳۲ حساب می‌شوند.
  • بهینه‌سازهای دارای وضعیت حافظه نگه می‌دارند؛ پایان آموزش آزادسازی را صدا بزنید.

انتخاب بهینه‌ساز

سه بهینه‌ساز این‌جا یک کاسه‌ی یکسان، x² + 50y²، را از یک نقطه‌ی آغاز در چهل گام کمینه می‌کنند. کاسه در یک سو پنجاه برابر سوی دیگر شیب دارد و زیان‌های واقعی هم همین شکلی‌اند. گرادیان کاهشی تصادفی ساده باید نرخ یادگیری‌اش را زیر حدی نگه دارد که سوی پرشیب اجازه می‌دهد (این‌جا هر نرخی از ۰.۰۲ به بالا هیچ‌وقت آرام نمی‌گیرد)، پس در سوی کم‌شیب آهسته می‌خزد. تکانه یک سرعت پیوسته نگه می‌دارد؛ گام را در سوی کم‌شیب جلو می‌برد و بالا و پایین رفتن در سوی پرشیب همدیگر را خنثی می‌کنند.

optim-guide-compare.salam
واردسازی هوش مصنوعی.بهینه‌سازی
واردسازی هوش مصنوعی.شبکه عصبی
واردسازی هوش مصنوعی.مشتق‌گیری خودکار
واردسازی هوش مصنوعی.تانسور
واردسازی تبدیل

تابع اجرا(روش: صحیح): اعشار۶۴:
    ناپایا مخزن := شبکه عصبی.مخزن پارامتر {}
    آغاز := تانسور.پرشده(تانسور.شکل یک(۲)، ۱.۰)
    دستگیره := مخزن.افزودن("xy"، آغاز)
    ناپایا داده مقیاس := وکتور {} برگردان وکتور<اعشار۳۲>
    داده مقیاس.بیفزا(۱.۰ برگردان اعشار۳۲)
    داده مقیاس.بیفزا(۵۰.۰ برگردان اعشار۳۲)
    ناپایا شکل مقیاس := تانسور.شکل یک(۲)
    ناپایا مقیاس := تانسور.از آرایه(شکل مقیاس، داده مقیاس)
    ناپایا ساده := بهینه‌سازی.گرادیان کاهشی تصادفی { نرخ یادگیری = ۰.۰۱۹ }
    ناپایا تکانه دار := بهینه‌سازی.گرادیان کاهشی تصادفی { نرخ یادگیری = ۰.۰۱، تکانه = ۰.۹ }
    ناپایا آدام := بهینه‌سازی.آدام { نرخ یادگیری = ۰.۱ }
    ناپایا نوار := مشتق‌گیری خودکار.نوار جدید(۱)
    ناپایا آخرین := ۰.۰
    تکرار ۴۰:
        نوار.بازنشانی()
        مخزن.صفر کردن گرادیان()
        پ := شبکه عصبی.پیوند(نوار، مخزن، دستگیره)
        زیان := مشتق‌گیری خودکار.مجموع(نوار، مشتق‌گیری خودکار.ضرب درایه‌ای(نوار، مشتق‌گیری خودکار.ثابت(نوار، مقیاس)، مشتق‌گیری خودکار.مربع(نوار، پ)))
        مشتق‌گیری خودکار.پس‌انتشار(نوار، زیان)
        آخرین = مشتق‌گیری خودکار.مقدار(نوار، زیان).عنصر(۰)
        اگر روش == ۰: ساده.گام(مخزن) پایان
        اگر روش == ۱: تکانه دار.گام(مخزن) پایان
        اگر روش == ۲: آدام.گام(مخزن) پایان
    پایان
    نوار.آزادسازی()
    ساده.آزادسازی()
    تکانه دار.آزادسازی()
    آدام.آزادسازی()
    مخزن.آزادسازی()
    برگشت آخرین
پایان

تابع ریشه:
    نام ها := ["SGD"، "SGD با تکانه"، "Adam"]
    تکرار ۳ در روش:
        سرچاپ نام ها[روش]، تبدیل.قالب اعشار با دقت(اجرا(روش)، ۴)
    پایان
پایان
خروجیSGD 0.0622 SGD با تکانه 0.0063 Adam 0.5352

آدام گام هر وزن را با پیشینه‌ی گرادیان همان وزن مقیاس می‌کند، پس کمترین تنظیم را لازم دارد و معمولا انتخاب اول برای شبکه است. در این مسئله‌ی کوچک گام‌هایش که حدود lr اند باعث می‌شوند به جای آرام گرفتن، دور کمینه بچرخد؛ یادآوری خوبی است که نرخ را در طول آموزش پایین بیاورید. آدام دابلیو جدید همان آدام با کاهش وزن جدا شده است که برای ترنسفورمرها رایج است.

برنامه‌ی نرخ یادگیری

برنامه فقط تابعی است از شماره‌ی گام به نرخ یادگیری؛ نتیجه را پیش از هر گام در فیلد lr بهینه‌ساز می‌گذارید. گرمایش سپس کسینوس در گام‌های گرمایش خطی بالا می‌رود و بعد نیمی از یک کسینوس را تا کمینه پایین می‌آید. نرخ پله‌ای هر چند گام یک بار نرخ را در gamma ضرب می‌کند.

optim-guide-schedule.salam
واردسازی هوش مصنوعی.بهینه‌سازی
واردسازی تبدیل

تابع ریشه:
    پایه := ۰.۰۱
    کل := ۱۰۰ برگردان صحیح۶۴
    گرمایش := ۱۰ برگردان صحیح۶۴
    سرچاپ "گام  گرمایش+کسینوس  کاهش پله‌ای"
    هر گام در [۰، ۴، ۹، ۱۰، ۳۰، ۵۵، ۸۰، ۹۹]:
        شماره گام := گام برگردان صحیح۶۴
        نرم := بهینه‌سازی.گرمایش سپس کسینوس(پایه، شماره گام، گرمایش، کل، ۰.۰۰۰۱)
        پله ها := بهینه‌سازی.نرخ پله‌ای(پایه، شماره گام، ۳۰، ۰.۵)
        سرچاپ گام، تبدیل.قالب اعشار با دقت(نرم، ۵)، تبدیل.قالب اعشار با دقت(پله ها، ۵)
    پایان
پایان
خروجیگام گرمایش+کسینوس کاهش پله‌ای 0 0.00100 0.01000 4 0.00500 0.01000 9 0.01000 0.01000 10 0.01000 0.01000 30 0.00884 0.00500 55 0.00505 0.00500 80 0.00126 0.00250 99 0.00010 0.00125

گرمایش بیشتر از همه برای آدام و مدل‌های بزرگ مهم است: گرادیان‌های اول پرنویزند و برآوردهای گشتاور هنوز خالی‌اند، پس گام‌های کامل در آغاز می‌توانند وزن‌ها را خیلی دور پرت کنند.

برش گرادیان

یک دسته‌ی بد می‌تواند گرادیانی بسیار بزرگ بسازد و کار چندین گام آموزش را خراب کند. برش نُرم گرادیان طول همه‌ی گرادیان‌ها را با هم می‌سنجد و اگر از حد بیشتر بود، آن‌ها را با نگه داشتن جهتشان تا همان طول کوچک می‌کند. طول پیش از برش را برمی‌گرداند که ارزش ثبت کردن دارد: نُرمی که مدام بزرگ‌تر می‌شود نشانه‌ی زودهنگامی است که نرخ یادگیری زیاد است. آن را پس از پس‌انتشار و پیش از گام صدا بزنید.

optim-guide-clip.salam
واردسازی هوش مصنوعی.بهینه‌سازی
واردسازی هوش مصنوعی.شبکه عصبی
واردسازی هوش مصنوعی.مشتق‌گیری خودکار
واردسازی هوش مصنوعی.تانسور
واردسازی تبدیل

تابع ریشه:
    ناپایا مخزن := شبکه عصبی.مخزن پارامتر {}
    دستگیره := مخزن.افزودن("w"، تانسور.پرشده(تانسور.شکل یک(۲)، ۱.۰))
    ناپایا نوار := مشتق‌گیری خودکار.نوار جدید(۱)
    ناپایا بهینه‌ساز := بهینه‌سازی.گرادیان کاهشی تصادفی { نرخ یادگیری = ۰.۱ }
    تکرار ۳ در گام:
        نوار.بازنشانی()
        مخزن.صفر کردن گرادیان()
        بهینه‌ساز.نرخ یادگیری = بهینه‌سازی.نرخ پله‌ای(۰.۱، گام برگردان صحیح۶۴، ۱، ۰.۵)
        وزن := شبکه عصبی.پیوند(نوار، مخزن، دستگیره)
        زیان := مشتق‌گیری خودکار.مجموع(نوار، مشتق‌گیری خودکار.مقیاس(نوار، مشتق‌گیری خودکار.مربع(نوار، وزن)، ۵۰۰.۰))
        مشتق‌گیری خودکار.پس‌انتشار(نوار، زیان)
        پیش از برش := بهینه‌سازی.برش نُرم گرادیان(مخزن، ۱.۰)
        ناپایا پ := مخزن.عنصر(دستگیره)
        سرچاپ "گام"، گام، "نرخ"، بهینه‌ساز.نرخ یادگیری، "نُرم"، تبدیل.قالب اعشار با دقت(پیش از برش، ۱)، "گرادیان بریده"، تبدیل.قالب اعشار با دقت(پ.گرادیان.عنصر(۰)، ۳)، تبدیل.قالب اعشار با دقت(پ.گرادیان.عنصر(۱)، ۳)
        بهینه‌ساز.گام(مخزن)
        سرچاپ "  اکنون وزن"، تبدیل.قالب اعشار با دقت(پ.مقدار.عنصر(۰)، ۳)، تبدیل.قالب اعشار با دقت(پ.مقدار.عنصر(۱)، ۳)
    پایان
    نوار.آزادسازی()
    بهینه‌ساز.آزادسازی()
    مخزن.آزادسازی()
پایان
خروجیگام 0 نرخ 0.1 نُرم 1414.2 گرادیان بریده 0.707 0.707 اکنون وزن 0.929 0.929 گام 1 نرخ 0.05 نُرم 1314.2 گرادیان بریده 0.707 0.707 اکنون وزن 0.894 0.894 گام 2 نرخ 0.025 نُرم 1264.2 گرادیان بریده 0.707 0.707 اکنون وزن 0.876 0.876

زیان برای هر وزن 500w² است، پس گرادیان خام حدود ۱۴۰۰ طول دارد و برش آن را دقیقا به ۱ می‌رساند. برنامه نرخ یادگیری را هم با نرخ پله‌ای در هر گام نصف می‌کند. برش مقدار گرادیان ابزار زمخت‌تری است: تک‌تک مقدارهای گرادیان را محدود می‌کند و این جهت را هم تغییر می‌دهد.

کل دستورالعمل روی یک مدل واقعی

این‌جا همه‌چیز روی یک مدل کوچک زمان تحویل کنار هم می‌آید: یک لایه خطی از nn یاد می‌گیرد هر کیلومتر و هر قلم کالا چند دقیقه به زمان تحویل می‌افزاید. AdamW آن را آموزش می‌دهد، گرمایش سپس کسینوس پیش از هر گام نرخ را تعیین می‌کند و برش نُرم گرادیان جلوی شروع بد را می‌گیرد. ورودی‌ها و هدف‌ها اول بر ۱۰ تقسیم می‌شوند؛ بهینه‌سازها با عددهای نزدیک ۱ بهتر کار می‌کنند.

optim-guide-recipe.salam
واردسازی هوش مصنوعی.بهینه‌سازی
واردسازی هوش مصنوعی.شبکه عصبی
واردسازی هوش مصنوعی.مشتق‌گیری خودکار
واردسازی هوش مصنوعی.تانسور
واردسازی تبدیل

تابع ریشه:
    مسافت := [۱.۰، ۲.۵، ۴.۰، ۵.۵، ۷.۰، ۸.۵، ۳.۰، ۶.۰]
    اقلام := [۱.۰، ۳.۰، ۲.۰، ۵.۰، ۱.۰، ۴.۰، ۶.۰، ۲.۰]
    دقیقه‌ها := [۱۴.۰، ۲۲.۵، ۲۶.۰، ۳۷.۵، ۳۷.۰، ۴۸.۵، ۳۳.۰، ۳۶.۰]
    ناپایا ورودی‌ها := تانسور.صفرها دو(۸، ۲)
    ناپایا هدف‌ها := تانسور.صفرها دو(۸، ۱)
    تکرار ۸ در ی:
        ورودی‌ها.تنظیم در دو(ی، ۰، مسافت[ی] / ۱۰.۰)
        ورودی‌ها.تنظیم در دو(ی، ۱، اقلام[ی] / ۱۰.۰)
        هدف‌ها.تنظیم در دو(ی، ۰، دقیقه‌ها[ی] / ۱۰.۰)
    پایان
    ناپایا مولد := تانسور.مولد تصادفی جدید(۱)
    ناپایا مخزن := شبکه عصبی.مخزن پارامتر {}
    مدل := شبکه عصبی.لایه خطی جدید(مخزن، "eta"، ۲، ۱، مولد)
    ناپایا بهینه‌ساز := بهینه‌سازی.آدام دابلیو جدید(۰.۱، ۰.۰۱)
    ناپایا نوار := مشتق‌گیری خودکار.نوار جدید(۱)
    کل := ۴۰۰ برگردان صحیح۶۴
    تکرار ۴۰۰ در گام:
        نوار.بازنشانی()
        مخزن.صفر کردن گرادیان()
        حدس := مدل.پیشرو(نوار، مخزن، مشتق‌گیری خودکار.ورودی(نوار، ورودی‌ها))
        زیان := مشتق‌گیری خودکار.خطای میانگین مربعات(نوار، حدس، مشتق‌گیری خودکار.ثابت(نوار، هدف‌ها))
        مشتق‌گیری خودکار.پس‌انتشار(نوار، زیان)
        نرم := بهینه‌سازی.برش نُرم گرادیان(مخزن، ۵.۰)
        بهینه‌ساز.نرخ یادگیری = بهینه‌سازی.گرمایش سپس کسینوس(۰.۱، گام برگردان صحیح۶۴، ۲۰، کل، ۰.۰۰۱)
        بهینه‌ساز.گام(مخزن)
        اگر گام % ۱۰۰ == ۰ یا گام == ۳۹۹:
            سرچاپ "گام"، گام، "نرخ"، تبدیل.قالب اعشار با دقت(بهینه‌ساز.نرخ یادگیری، ۴)، "زیان"، تبدیل.قالب اعشار با دقت(مشتق‌گیری خودکار.مقدار(نوار، زیان).عنصر(۰)، ۴)، "نرم گرادیان"، تبدیل.قالب اعشار با دقت(نرم، ۳)
        پایان
    پایان
    وزن‌ها := مخزن.عنصر(مدل.شماره وزن).مقدار
    بایاس := مخزن.عنصر(مدل.شماره سوگیری).مقدار
    سرچاپ "دقیقه ="، تبدیل.قالب اعشار با دقت(بایاس.عنصر(۰) * ۱۰.۰، ۱)، "+"، تبدیل.قالب اعشار با دقت(وزن‌ها.عنصر(۰)، ۲)، "برای هر کیلومتر +"، تبدیل.قالب اعشار با دقت(وزن‌ها.عنصر(۱)، ۲)، "برای هر قلم"
    نوار.آزادسازی()
    بهینه‌ساز.آزادسازی()
    مخزن.آزادسازی()
    ورودی‌ها.آزادسازی()
    هدف‌ها.آزادسازی()
پایان
خروجیگام 0 نرخ 0.0050 زیان 15.9842 نرم گرادیان 8.950 گام 100 نرخ 0.0896 زیان 0.2397 نرم گرادیان 0.208 گام 200 نرخ 0.0546 زیان 0.0787 نرم گرادیان 0.109 گام 300 نرخ 0.0170 زیان 0.0456 نرم گرادیان 0.078 گام 399 نرخ 0.0010 زیان 0.0411 نرم گرادیان 0.073 دقیقه = 11.8 + 3.12 برای هر کیلومتر + 1.83 برای هر قلم

نرم گرادیان نخست نزدیک ۹ است، پس برش در ۵ کوتاهش می‌کند و پس از آن نرم دیگر به حد نزدیک نمی‌شود. نرخ ۲۰ گام بالا می‌رود، به اوج می‌رسد و تا گام آخر به ۰٫۰۰۱ پایین می‌آید، جایی که زیان دیگر تقریبا ثابت مانده است. چون ورودی‌ها با همان ضریب هدف کوچک شده‌اند، وزن‌ها مستقیم دقیقه به ازای هر کیلومتر و هر قلم‌اند؛ فقط بایاس باید دوباره در ۱۰ ضرب شود.

گونه‌ها

آدام Adam

ساختار آدام
بهینه‌ساز آدام؛ برای بیشتر شبکه‌ها انتخاب پیش‌فرض خوبی است.
نامانگلیسیگونهتوضیح
نرخ یادگیریlrاعشار۶۴ = 0.001نرخ یادگیری؛ پیش‌فرض ۰٫۰۰۱.
بتای یکbeta1اعشار۶۴ = 0.9ضریب میانگین گرادیان.
بتای دوbeta2اعشار۶۴ = 0.999ضریب میانگین مربع گرادیان.
اپسیلونepsاعشار۶۴ = 1e-08عدد کوچک برای جلوگیری از تقسیم بر صفر.
کاهش وزنweight_decayاعشار۶۴ = 0کاهش وزن.
کاهش وزن جداdecoupledمنطقی = نادرستکاهش وزن جدا از گرادیان اعمال شود، یعنی AdamW.
ai-optim-Train.salam
واردسازی هوش مصنوعی.بهینه‌سازی
واردسازی هوش مصنوعی.شبکه عصبی
واردسازی هوش مصنوعی.مشتق‌گیری خودکار
واردسازی هوش مصنوعی.تانسور

تابع آموزش(روش: صحیح، گام‌ها: صحیح، هدف &: تانسور.تانسور): اعشار۶۴:
    ناپایا مخزن := شبکه عصبی.مخزن پارامتر {}
    دستگیره := مخزن.افزودن("w"، تانسور.صفرها یک(۴))
    ناپایا آدام := بهینه‌سازی.آدام { نرخ یادگیری = ۰.۱ }
    ناپایا آدام دبلیو := بهینه‌سازی.آدام دابلیو جدید(۰.۱، ۰.۰۱)
    ناپایا آر ام اس := بهینه‌سازی.آر ام اس پراپ { نرخ یادگیری = ۰.۰۵ }
    ناپایا اس جی دی := بهینه‌سازی.گرادیان کاهشی تصادفی { نرخ یادگیری = ۰.۰۵، تکانه = ۰.۹ }
    ناپایا نوار := مشتق‌گیری خودکار.نوار جدید(۱)
    تکرار گام‌ها:
        نوار.بازنشانی()
        مخزن.صفر کردن گرادیان()
        و۱ := شبکه عصبی.پیوند(نوار، مخزن، دستگیره)
        ه := مشتق‌گیری خودکار.ورودی(نوار، هدف)
        زیان := مشتق‌گیری خودکار.مجموع(نوار، مشتق‌گیری خودکار.مربع(نوار، مشتق‌گیری خودکار.تفریق(نوار، و۱، ه)))
        مشتق‌گیری خودکار.پس‌انتشار(نوار، زیان)
        _ := بهینه‌سازی.برش نُرم گرادیان(مخزن، ۱۰.۰)
        بهینه‌سازی.برش مقدار گرادیان(مخزن، ۵.۰)
        اگر روش == ۰:
            آدام.گام(مخزن)
        وگرنه روش == ۱:
            آدام دبلیو.گام(مخزن)
        وگرنه روش == ۲:
            آر ام اس.گام(مخزن)
        وگرنه:
            اس جی دی.گام(مخزن)
        پایان
    پایان
    ناپایا پ := مخزن.عنصر(دستگیره)
    نتیجه := پ.مقدار.عنصر(۳)
    نوار.آزادسازی()
    آدام.آزادسازی()
    آدام دبلیو.آزادسازی()
    آر ام اس.آزادسازی()
    اس جی دی.آزادسازی()
    مخزن.آزادسازی()
    برگشت نتیجه
پایان

تابع ریشه:
    ناپایا هدف := تانسور.بازه گام(۴)
    هر روش در [۰، ۱، ۲، ۳]:
        گرد := (آموزش(روش، ۴۰۰، هدف) * ۱۰۰.۰ + ۰.۵) برگردان صحیح
        سرچاپ روش، گرد
    پایان
    تانسور.آزادسازی(هدف)
    سرچاپ بهینه‌سازی.نرخ پله‌ای(۱.۰، ۲۵، ۱۰، ۰.۵)، بهینه‌سازی.نرخ کسینوسی(۱.۰، ۵۰، ۱۰۰، ۰.۰)، بهینه‌سازی.گرمایش سپس کسینوس(۱.۰، ۰، ۱۰، ۱۱۰، ۰.۰)
پایان
خروجی0 300 1 299 2 300 3 300 0.25 0.5 0.1

گام step

تابع گام(ps &: شبکه عصبی.مخزن پارامتر)
یک گام به‌روزرسانی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

آزادسازی free

تابع آزادسازی()
حالت داخلی را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

آر ام اس پراپ RMSProp

ساختار آر ام اس پراپ
بهینه‌ساز RMSProp.
نامانگلیسیگونهتوضیح
نرخ یادگیریlrاعشار۶۴ = 0.01نرخ یادگیری؛ پیش‌فرض ۰٫۰۱.
ضریب میانگینalphaاعشار۶۴ = 0.99ضریب میانگین مربع گرادیان.
اپسیلونepsاعشار۶۴ = 1e-08عدد کوچک برای جلوگیری از تقسیم بر صفر.
کاهش وزنweight_decayاعشار۶۴ = 0کاهش وزن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

گام step

تابع گام(ps &: شبکه عصبی.مخزن پارامتر)
یک گام به‌روزرسانی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

آزادسازی free

تابع آزادسازی()
حالت داخلی را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

گرادیان کاهشی تصادفی SGD

ساختار گرادیان کاهشی تصادفی
گرادیان کاهشی تصادفی، با تکانه و نستروف اختیاری.
نامانگلیسیگونهتوضیح
نرخ یادگیریlrاعشار۶۴ = 0.01نرخ یادگیری؛ پیش‌فرض ۰٫۰۱.
تکانهmomentumاعشار۶۴ = 0تکانه؛ صفر یعنی بدون تکانه.
کاهش وزنweight_decayاعشار۶۴ = 0کاهش وزن، یعنی جریمه‌ی L2.
نستروفnesterovمنطقی = نادرستتکانه‌ی نستروف.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

گام step

تابع گام(ps &: شبکه عصبی.مخزن پارامتر)
یک گام به‌روزرسانی روی همه‌ی پارامترهای مخزن با گرادیان‌های جاری. گرادیان‌ها را صفر نمی‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

آزادسازی free

تابع آزادسازی()
حالت داخلی را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

تابع‌ها

نرخ پله‌ای StepLR

تابع نرخ پله‌ای(base: اعشار۶۴، step: صحیح۶۴، every: صحیح۶۴، gamma: اعشار۶۴): اعشار۶۴
نرخ یادگیری پله‌ای: base ضرب در gamma، یک بار به ازای هر every گام کامل.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

نرخ کسینوسی CosineLR

تابع نرخ کسینوسی(base: اعشار۶۴، step: صحیح۶۴، total: صحیح۶۴، min_lr: اعشار۶۴): اعشار۶۴
نرخ یادگیری کسینوسی: از نرخ پایه در گام ۰ تا کمینه در گام total به شکل نیم‌موج کسینوس کم می‌شود و همان‌جا می‌ماند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

گرمایش سپس کسینوس WarmupCosine

تابع گرمایش سپس کسینوس(base: اعشار۶۴، step: صحیح۶۴، warmup: صحیح۶۴، total: صحیح۶۴، min_lr: اعشار۶۴): اعشار۶۴
گرمایش خطی در warmup گام نخست (گام ۰ همان base/warmup را می‌گیرد)، سپس کاهش کسینوسی که در گام total به min_lr می‌رسد؛ برای آموزش ترنسفورمرها رایج است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

آدام دابلیو جدید NewAdamW

تابع آدام دابلیو جدید(lr: اعشار۶۴، weight_decay: اعشار۶۴): آدام
آدام با کاهش وزن جدا، یعنی AdamW.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

برش نُرم گرادیان ClipGradNorm

تابع برش نُرم گرادیان(ps &: شبکه عصبی.مخزن پارامتر، max_norm: اعشار۶۴): اعشار۶۴
گرادیان‌ها را طوری کوچک می‌کند که نرم کل از حد بیشتر نشود و نرم پیش از برش را برمی‌گرداند؛ جلوی انفجار گرادیان را می‌گیرد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam

برش مقدار گرادیان ClipGradValue

تابع برش مقدار گرادیان(ps &: شبکه عصبی.مخزن پارامتر، limit: اعشار۶۴)
هر گرادیان را به بازه‌ی منفی حد تا حد محدود می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: ai-optim-Train.salam