آموزش Caffe بخش دوم : Solver ها

19 6,426

بسم الله الرحمن الرحیم
بخش دوم آموزش در مورد Solver و پارامترهای مختلف اون هست.

توضیحات در مورد Solver

در Caffe ما با استفاده از solver ها, تنظیمات مختلف مربوط  اجرای آموزش و آزمایش شبکه را مشخص میکنیم. تنظیماتی نظیر روش بهینه سازی (otpimization), نرخ یادگیری, momentum , تعداد تکرار آزمایشها (test iterations) و… در solver مشخص میشوند.وظایف یادگیری بین solver و شبکه تقسیم شده است به این صورت که کارهایی نظیر  نظارت بر بهینه سازی و بروز آوری پارامترها مربوط به solver بوده و محاسبه خطا و مقادیر گرادیانت به عهده شبکه (مدل شبکه) میباشد. .

روش های بهینه سازی که قابل استفاده در Solver هستند را در زیر مشاهده میکنید:

بطور کلی وظایف یک solver را میتوان در موارد زیر خلاصه کرد :

  1. . ساماندهی بهینه سازی و ایجاد شبکه آموزشی(training network) جهت یادگیری و همینطور ایجاد شبکه (های) آزمایشی(testing network(s)) جهت ارزیابی خروجی شبکه.
  2. انجام بهینه سازی با فراخوانی های پی در پی فازهای forward و backward و بروزآوری پارامترهای شبکه.
  3. ارزیابی (دوره ای ) شبکه .
  4. گرفتن snapshot از مدل شبکه و وضعیت solver در طی بهینه سازی.

در هر تکرار از عمل بهینه سازی, مراحل زیر اتفاق می افتند :

  1. فاز forward شبکه برای محاسبه خروجی و خطای شبکه فراخوانی میشود.
  2. فاز backward شبکه برای محاسبه گرادیانت ها فراخوانی میشود.
  3. گرادیانت ها در بروزآوری پارامترها با توجه به روش مشخص شده در solver اعمال میشوند.
  4. وضعیت solver با توجه به نرخ یادگیری , تاریخچه و روش مشخص شده بروز آوری میشود تا وزنها را از مقداردهی اولیه به مدل یاد گرفته شده منتقل کند.

Solver ها را نیز همانند مدلها با استفاده از CPU و یا GPU اجرا کرد.

saddle_point_evaluation_optimizers

contours_evaluation_optimizers

روشهای بهینه سازی

روشهای بهینه سازی که در Solver مشخص میشوند به مسائل بهینه سازی کلی کاهش خطا میپردازند. بعنوان مثال اگر فرض کنیم ما دارای دیتاست D باشیم ,هدف بهینه سازی میانگین گیری خطا از تمام  |D|نمونه داده در این دیتاست است

image009

عبارتی که در بالا مشاهده میکنید همان عبارت محاسبه میانگین خطا است که در آن  image010خطای نمونه داده image011 بوده و image012 عبارت regularization است که دارای وزن  image013 میباشد. از آنجایی که |D| میتواند خیلی بزرگ باشد, در عمل, در هر تکرار solver , ما از تقریب تصادفی (stochastic approximation) این خطا استفاده میکنیم. برای اینکار بجای استفاده از تمام نمونه های دیتاست (|D|) ما از یک دسته کوچک(mini-batch) که تعداد نمونه هایی برابر با |N<<|D دارد (یعنی تعداد آن بمراتب بسیار کمتر از تعداد نمونه های موجود در دیتاست D است) را بصورت زیر استفاده میکنیم :

image014

در اینجا مدل, image015 را در forward pass محاسبه کرده و گرادیانت image015∇ را نیز در backward pass محاسبه میکند. مقدار w∆ (آپدیت وزن) بوسیله solver از طریق گرادیانت خطای image015∇   , گرادیانت regularization  image016و سایر پارامترهای اختصاصی مربوط به روش مشخص شده در آن بدست می آید.

روش SGD

Stochastic gradient descent که با نوع”SGD” در solver قابل استفاده است ((type: “SGD”)) ) ماتریس وزن W را توسط ترکیب خطی منفی گرادیانت (L(W∇ و مقدار تغییرات وزن قبلی Vt بروز آوری میکند..مقدار نرخ یادگیری α  برابر با وزن منفی گرادیانت و مقدار momentum μ  برابر با وزن آپدیت قبلی است.

بطور کلی ما برای محاسبه مقدار جدید Vt+1 و وزنهای آپدیت شده ماتریس Wt+1 در تکرار t+1  با داشتن مقدار آپدیت قبلی Vt و ماتریس وزن فعلی Wt  از عبارت زیر استفاده میکنیم :

image017

image018

احتمالا برای بدست آوردن بهترین نتایج ,فراپارامترهای α و μ نیازمند کمی تغییر هستند. اگر مطمئن نیستید که از چه مقداری شروع کنید, میتوانید به بخش قواعد کلی که در ادامه آمده است نگاهی بندازید. همچنین برای اطلاعات بیشتر در این زمینه میتوان به مقاله جامع Leon Bottou در این باره با نام [۱]Stochastic Gradient Descent Tricks مراجعه کرد.

قواعد کلی در باره تنظیم نرخ یادگیری (α) و momentum (μ)

یک روش خوب برای گرفتن نتایج بهتر با استفاده از روش SGD مقدار دهی نرخ یادگیری α حول مقدار α≈۰٫۰۱ =۱۰ است و در صورتی که خطا شروع به افزایش کرد, کاهش مقدار آن در فاز آموزش با یک ضریب ثابت مثل ۱۰ و تکرار این روش برای چندین مرتبه است. بطور کلی , سعی کنید از momentum با مقدار μ=۰٫۹ یا مقداری مشابه آن استفاده کنید. با (هموار تر شدن)بهتر شدن آپدیت وزنها در طی تکرار های مختلف, momentum باعث سریعتر و پایدار تر شدن یادگیری عمیق با SGD شود.

روشی که تازه توضیح دادیم , روشی است که توسط Krizhevsky et al در مقاله معروف آنها در سال ۲۰۱۲ که مقام اول رقابت ILSVRC-2012 را با استفاده از شبکه های کانولوشنی برایشان به ارمغان آورد ارائه شده است.

اعمال تنظیمات فوق در Caffe با استفاده از solver ها بسیار راحت بوده و در ادامه ما با نحوه انجام این کار آشنا میشویم . برای استفاده از روشی که در بالا توضیح داده شد و تنظیم نرخ یادگیری خطوط زیر را بایستی به solver خود اضافه کنید.

در خط اول مشخص میکنیم که آموزش با نرخ یادگیری ۰٫۰۱  شروع شود

در خط دوم سیاست نرخ یادگیری را مشخص میکنیم, در این قسمت ما مشخص کردیم که نرخ یادگیری طی گام هایی (steps)کاهش یابد. در ادامه بیشتر درمورد این گزینه صحبت میکنیم.

خط سوم , همان ضریب کاهش نرخ یادگیری است که در هر گام انجام میشود. در این قسمت است که مشخص میکنیم نرخ یادگیری با چه ضریبی کاهش پیدا کند. در اینجا ما مشخص کردیم که نرخ یادگیری با ضریب ۱۰ کاهش پیدا کند ( یعنی نرخ یادگیری در مقدار gama که مساوی ۰٫۱ است ضرب شود)

خط چهارم همان تعداد گام هایی است که نرخ یادگیری در آنها باید کاهش یابد. دراینجا این مقدار برابر با ۱۰۰هزار است. یعنی هر ۱۰۰ هزار تکرار, نرخ یادگیری را کاهش بده.

خط پنجم هم تعداد تکرار مراحل آموزش را مشخص میکند. در اینجا یعنی ۳۵۰ هزار بار آموزش را تکرار کن .

خط آخر نیز مقدار momentum را مشخص کرده است.

تحت تنظیمات بالا, ما همیشه از momentum با مقدار =۰٫۹ μ استفاده میکنیم. ما آموزش را با نرخ یادگیری پایه (base_lrا) α=۰٫۰۱=۱۰  برای ۱۰۰ هزار تکرار اول شروع میکنیم و سپس نرخ یادگیری را با مقدار (gama (γ ضرب کرده و آموزش را با نرخ یادگیری  image019برای ۱۰۰ هزار تکرار بعدی (۱۰۰-۲۰۰) ادامه میدهیم . به همین صورت برای تکرار های ۲۰۰ هزار تا ۳۰۰ هزار  از نرخ یادگیری image020 استفاده کرده  و نهایتا از نرخ یادگیری  image021برای تکرار های باقی مانده (۳۰۰ تا ۳۵۰ هزار) استفاده میکنیم .

لطفا دقت کنید که مقدار momentum یی که تنظیم میکنید اندازه اپدیت شما را بعد از تعداد زیادی تکرار آموزش با ضریب  image022 ضرب میکند. بنابر این اگر مقدار μ را افزایش دادید بهتر است مقدار α را نیز به همان نسبت کاهش دهید.

بعنوان مثال, فرض کنید مقدار momentum  ما =۰٫۹ μ باشد. در اینصورت ما ضریبی آپدیتی برابر با  داریم .یعنی مقدار آپدیت ما هرچه باشد در این ضریب ضرب خواهد شد. حال اگر مقدار momentum را به μ=۰٫۹۹ افزایش دهیم, ما با اینکار ضریب اندازه آپدیت را ۱۰۰ برابر افزایش داده ایم و باید α (اbase_lr)  را با ضریب ۱۰ کاهش دهیم.

همچنین دقت کنید که تنظیمات بالا تنها حکم راهنما را داشته و اینطور نیست که بهترین تنظیمات تحت هر شرایط و برای هر کاری باشند.  اگر متوجه شدید که یادگیری شروع به بد شدن ( diverge) کرده است (بعنوان مثال مشاهده میکنید که مقادیر خطای شبکه و یا خروجی همگی Nan و یا inf میشوند و این مسئله هم بسیار زیاد دارد تکرار میشود) سعی کنید مقدار  base_lr را کاهش دهید (مثلا مقداری برابر با base_lr: 0.001 ) و عمل آموزش را تکرار کنید. انقدر این عمل را تکرار کنید تا به base_lr برسید که عملا برایتان کار کند.

سیاست های نرخ یادگیری

در Caffe میتوان سیاست های مختلفی برای کاهش نرخ یادگیری لحاظ کرد. شما میتوانید در زیر لیستی از این سیاست ها و نحوه عملکرد آنها را مشاهده کنید.

  • fixed : همیشه از base_lr استفاده میکند.(مقدار نرخ یادگیری ثابت است)
  • : step نرخ یادگیری از رابطه ((base_lr * gamma ^ (floor(iter / step  بدست می آید
  • : exp نرخ یادگیری از رابطه base_lr * gamma ^ iter  بدست می آید
  • inv  : نرخ یادگیری از رابطه (base_lr * (1 + gamma * iter) ^ (- power بدست می آید
  • multistep : مثل step عمل کرده با این تفاوت که اجازه تعریف گامهای غیریکسان در stepvalue میدهد
  • poly: در این روش ,نرخ یادگیری از یک کاهش چند جمله ای تبعیت کرده و با رسیدن به max_iter صفر میشود, نرخ یادگیری در این روش از رابطه (base_lr * (1 - iter/max_iter) ^ (power  بدست می آید.
  • sigmoid: در این روش ,نرخ یادگیری از یک کاهش سیگمویدی تبعیت کرده از رابطه  ((((base_lr * ( 1/(1 + exp(-gamma * (iter - stepsizeبدست می آید

لطفا دقت کنید که در صورت انتخاب هر کدام از موارد فوق بعنوان lr_policy در solver , اطمینان حاصل کنید تمامی پارامترهای مورد نیاز آنها (مواردی که در رابطه آورده شده اند) را فراهم کنید. بعنوان مثال اگر قصد استفاده از poly را دارید باید پارامترهای base_lr , iter , max_iter و power را نیز فراهم کنید.

این سیاستها به همراه توضیحات هریک در فایل Caffe.proto که پیشتر توضیح دادیم قرار دارد و برای فهمیدن اینکه آیا سیاست جدیدی اضافه شده است یا خیر و یا مشاهده اینکه یک سیاست به چه صورت در caffe عمل میکند میتوان به این فایل مراجعه کرد.

روش AdaDelta

روش AdaDelta که با نوع”AdaDelta” در solver قابل استفاده است (type: “AdaDelta”) . یک روش مشخص سازی نرخ یادگیری قدرتمند است که توسط M.Zeiler ارائه شد. این روش هم همانند SGD یک روش بهینه سازی مبتنی بر گرادیانت بوده و فرمول بروز آوری آن بصورت زیر است :
image024image025image026و

image027

AdaGrad

روش adaptive gradient که با نوع AdaGrad در solver  قابل استفاده است (type: “AdaGrad”) یک روش بهینه سازی مبتنی بر گرادیانت است که توسط Duchi et al ارائه شد. این روش بقول Duchi سعی میکند سوزن را در انبار کاه پیدا کند! و این کار را با استفاده از ویژگی های بسیار قابل پیش بینی اما بندرت دیده شده  انجام میدهد.

با داشتن اطلاعات بروز آوری از تمام تکرار های قبلی image028 که در آن image029 ∋ t’  , فرمولی که توسط Duchi برای هر مولفه i از ماتریس وزن W ارائه شده است بصورت زیر میباشد

image030

توجه کنید که در عمل, برای وزن های  image031, روش AdaGrad بصورتی پیاده سازی میشود (خصوصا پیاده سازی که در Caffe وجود دارد) تا بجای اینکه از (O(dt فضای اضافی که برای ذخیره تک تک گرادیانتهای قبلی لازم است استفاده کند تنها به اندازه (O(d فضای اضافی برای اطاعات مربوط به گرادیانت های قبلی استفاده کند.

Adam

روش Adam که با نوع  “Adam” در solver  قابل استفاده است (type: “Adam”) یک روش بهینه سازی مبتنی بر گرادیانت است که توسط D.Kingma ارائه شد.این روش را میتوان تعمیمی از روش AdaGrad دانست که فرمول محاسبه آن در زیر آمده است :

image032و
image033

Kingma et al پیشنهاد کرد برای مقادیر image034 , image035   و ε به ترتیب از مقادیر ۰٫۹ ,   ۰٫۹۹۹ و image036 بعنوان مقادیر پیشفرض استفاده شود.در Caffe مقادیر momentum , momentum2 و delta به ترتیب معادل image034 , image035   و ε هستند.

NAG

روش Nesterov’s accelerated gradient که که با نوع  “Nesterov” در solver  قابل استفاده است (type: “Nesterov”) توسط Netsrov بعنوان یک روش مطلوب بهینه سازی convex ارائه شد. این روش قادر است بجای (O(1/t به نرخ همگرایی  (image037/O(1  دست پیدا کند. هرچند که فرضیات مورد نیاز برای دستیابی به  (image037/O(1 معمولا در شبکه های عمیق آموزش داده شده توسط Caffe برقرار نمیشوند( بعنوان مثال بخاطر non-smothness و  non-convexity ) اما در عمل روش NAG میتواند روش بسیار موثری برای بهینه سازی گونه های خاصی از معماری های deep learning همانند آنچه در deep MNIST autoencoders  توسط Sutskever et al انجام شد, باشد.

فرمولهای بروز آوری وزن بسیار شبیه آنچیزی است که در روش SGD ارائه شد. این فرمولها را در زیر مشاهده میکنید :

image038

آنچیزی که  باعث تمایز این روش  با روش  SGD میشود  نحوه تنظیم ماتریس وزن W است که ما خطای گرادیانت   (W)∇L را بر اساس آن محاسبه میکنیم. در روش NAG ما  گرادیانت را  از وزنهای جمع شده با momentum بدست می آوریم (image039 در حالی که در روش SGD ما خیلی ساده گرادیانت   image040 را از روی خود وزنها بدست می آوریم.

RMSprop

روش RMSprop که با نوع “RMSProp” در Solver قابل استفاده است یک روش بهینه سازی مبتنی بر گرادیانت همانند SGD است توسط Tieleman در یکی از کلاسهای Coursera ارائه شد . فرمول محاسبه بروز آوری پارامترها را در زیر مشاهده میکنید:

image041

درصورتی که نتایج بروز آوری ها دارای نوسان باشد, گرادیانت با ضریب ۱-δ کاهش پیدا میکند. در غیر اینصورت به اندازه δ افزایش پیدا میکند. مقدار پیشفرض δ (اrms_decay) نیز برابر با δ=۰٫۰۲ میباشد.

Scaffolding یا قالب بندی

قالب بندی Solver روش بهینه سازی را آماده کرده و مدل را جهت شروع یادگیری مقدار دهی اولیه میکند. (با استفاده از Solver::Presolve() )

در زیر یک نمونه solver که در حال اجرا توسط Caffe است را مشاهده میکنید:

مرحله بهینه سازی : مقداردهی پارامترهای Solver :

در اینجا نیز شبکه در حال راه اندازی را مشاهده میکنید :

بخش خطا و اتمام آماده سازی شبکه:

پایان قالب بندی solver یا (solver scaffolding)

اطلاعات بسیار خوبی رو میتونید در مورد روشهای مختلفی که بالا مطرح شد (و نشد!) و کارایی هر کدوم نسبت به بقیه ببینید : An overview of gradient descent optimization algorithms (با تشکر از آقای درخشانی عزیز)

بخش بعدی اینترنفیس های Caffe و نحوه اجرای اون

[۱] [۱] L. Bottou. Stochastic Gradient Descent Tricks. Neural Networks: Tricks of

the Trade: Springer, 2012.

19 نظرات
  1. […] بخش بعدی : fine-tuning بخش قبلی : تنظیمات Solver […]

  2. soroor می گوید

    سلام و خسته نباشید 🙂
    اول خیلی خیلی ممنون از شما بابت تمام مطالبی که نوشتین، ی سوال داشتم از خدمتتون :
    در رابطه با روش بهینه سازی منظورم L(w) هست، امکانش هست بیشتر توضیح بفرمایید؟ درست متوجه نشدم

    باتشکر فراوان

    1. سید حسین حسن پور متی کلایی می گوید

      سلام
      خواهش میکنم . منظورتون کدوم بخشش هست ؟

      1. soroor می گوید

        همون بخش اول جایی که L(w) رو فرمولش رو نوشتین

        1. سید حسین حسن پور متی کلایی می گوید

          سلام
          خلاصه داره میگه فرض کنید شما یه دیتاست دارید با اندازه D یعنی تعداد نمونه های شما D تاس. قصد شما هم اینه که میانگین loss رو بدست بیارید برای کل دیتاست (یعنی تمام D نمونه). فرمولش میشه فرمول اول. تو فرمول اول هم یه loss از مرحله forward propagation داریم (یعنی همون مرحله اول) و یکی هم مربوط به مقدار regularization هست.
          حالا در عمل اتفاقی که می افته اینه که اندازه دیتاست ها خیلی بزرگه و اینطور عمل کردن اصلا بهینه نیست بجای اینکه بیاییم میانگین رو روی کل اقلام بگیریم میاییم تقریبی از اون رو استفاده میکنیم . یعنی میاییم از mini-batch ها که اندازه اشون خیلی کمتر از اندازه کل دیتاست هست استفاده میکنیم .
          (برای همین در عمل هرچقدر اندازه بچ شما بزرگتر باشه در اصل تقریب بهتری بدست میارید و گرادیانت استیبل تری بدست میاد.)

          1. soroor می گوید

            خیلی خیلی ممنون

  3. m.javad rezaei می گوید

    سلام
    خیلی خوب بود ممنون از لطفتون
    ببخشید ی جاهایی خوب جا نیفتاد برام دوباره مزاحمتون شدم
    ۱-ببخشید در فرمول دوم که نوشته به جای |D| از N نمونه استفاده میکنیم بالای سیگما نباید N باشه؟
    ۲-ببخشید من این iteration رو تو حتی الگوریتمهای بهینه سازی(مثل ژنتیک) هم متوجه نمیشم اینجا منظرتون اینه که یه دیتاست داریم میاد ۳۵۰هزارتا ۳۵۰هزار (max_iter) تقسیم میکنه بعد هر ۱۰۰ هزار تا با یه نرخ یادگیری آموزش میده دوباره ۳۰۵هزارتای بعدی از اول ؟
    ۳-ممکنه momentum μ رو یکم بیشتر درموردش توضیح بدید که چیه و چه کارایی داره؟(یه جا نوشته شده فراپارامتره بعد تو اون اشکال سه بعدی که بهینه سازها هستن اینم هست)
    ۴- weight decay یا تنزل وزن چیه ؟ و چه کارایی داره؟
    ۵- تو تعریف solver یکی دوتا متوجه شدم (فکر کنم test_iter تعداد تکرار تسته و test_interval هم یعنی بعد از این تعداد train تست رو انجام بده) ولی دوتاشو هم نفهمیدم مثل display و power اگر ممکنه بگید چیه (snapshot هم فکر کنم تو بخش بعد توضیح دادید)
    ۶-آخرین و مهمترین سوالم
    تو متن روش های بهینه سازی گفته شده و گفته تو solver تعین میکنیم که از کدوم روش استفاه میکنیم سوالم اینه کجای solver روش بهینه سازی تعیین میشه ؟ (تو مثالی که از solver آوردید نوع بهینه سازی گفته نشده)
    ببخشید سوالهام طولانی بود
    آقای حسن پور عزیز ممنون از لطفتون که اینقدر با صبر و حوصله جواب میدید خودم میدونم سوالهام یکم طولانیه هروقت که وقتش رو داشتید جواب بدید
    ممنونم

    1. سید حسین حسن پور متی کلایی می گوید

      سلام
      ۱٫بله

      ۲٫در شبکه عصبی ما مفهوم ایپاک رو داریم که اشاره به مرور یکباره کل داده های اموزشی هست. این مرور ممکنه چندین تکرار رو شامل بشه.
      در کفی بعنوان مثال ما با مفهوم ایپاک کار نمیکنیم این مفهوم مستتر هست. ما با ایتر یا تعداد تکرار سرو کار داریم . که توضیحش رو فکر میکنم در اموزش کفی دادم . اون بخشها رو بخونید متوجه میشید . (خلاصه این هست چون دیتا زیاده ما خورد خورد داده ها رو پردازش میکنیم . مثلا ۱۰ تا عکس داریم. هر بار دوتا عکس با هم پردازش میشه . ۵ بار تکرار باید بشه تا تمام عکسا پردازش بشن . این ۵ میشه تعداد ایتر. حالا اگه شما ۲۰ تکرار مشخص کنید یعنی ۴ بار تمام دیتا رو مرور کردید (به شبکه ارایه کردید) . یعنی ۵ ایپاک اموزش انجام دادید. باز دوباره این یعنی هر ایپاک برابر با ۵ تکرار هست)

      ۳.لطفا یه کتاب شبکه عصبی رو بگیرید بخونید. این چیزا جزو مبانی این کار هست .مومنتوم رو بصورت خیلی خلاصه و خیلی ساده یه ضریب در نظر بگیرید که هرجهتی انتخاب شد در اون ضرب میشه. اگه نتیجه خوب باشه همگرایی شما و رسیدن به جواب سریعتر و اگر بد باشه برعکس دنده عقب میرید به طرف بدتر شدن. مومنتوم خصوصا برای زمانهایی که در سطوح مسطح گرفتار میشید خیلی خوبه چون باعث میشه سریعتر این نقاط پشت سر گذاشته بشن. این دیگه خیلی خیلی ساده و مختصر بود.

      ۴.یکی از روشهای اصطلاحات regularization هست که برای جلوگیری از اورفیتینگ ازش استفاده میشه

      ۵.اینا تو اموزش توضیحشون داده شده . اون بخشها رو ملاحظه کنید متوجه میشید

      ۶.lr_policy که مخفف همون learningrate-policy هست. مشخص میکنه که نرخ یادگیری شما چطور کاهش/تغییر پیدا بکنه . انواع مختلفی هم داره.که در بخش سالور توضیحات کاملش داده شده.
      ۷٫ type مشخص کننده نوع بهینه سازی هست .جلوی این هرچی بنویسید به معنای انتخاب سیاست یادگیری شماست.مقادیری مثل SGD یا AdaDelta یا AdaGrad یا inv و… اینم در بخش سالور اومده اگر خوب بخونید

      1. m.javad rezaei می گوید

        سلام
        بی نهایت ممنونم
        ببخشید ببینید ایتر رو درست متوجه شدم
        مثلا ۱۰۰۰ نا عکس داریم و base_lr: 0.01 ، lr_policy: “step” ، gamma: 0.1 ، stepsize: 100000 ، max_iter: 350000 (همین مثال خودتون)
        فرض کنید هر ۱۰۰ تا عکس با هم پردازش میشن پس ده تا دسته عکس داده میشه به شبکه
        پس ۱۰ تا ایتر طول میکشه تا کل دیتاست پردازش بشه و با توجه به تعداد گام ۱۰۰۰ دفه هر عکس با یک ضریب یادگیری ثابت تکرار میشه بعد میره سراغ ضریب یادگیری بعدی و باز این کار تکرار میشه تا ۳۵۰هزار تکرار
        درست متوجه شدم ؟ حالا فرق iter و max_iter چیه ؟
        ببخشیددرمورد سوال ۶ در پیام قبل مگه lr_policy سیاست تغییرات نرخ یادگیری رو تعیین نمیکنه ؟ (مثلا inv ) سیاست بهینه سازی مثلا (SGD) کجا تعین میشه ؟
        نمیدونم شایدم من اشتباه برداشت کردم

        1. سید حسین حسن پور متی کلایی می گوید

          لطفا این سوالها رو در بخش پرسش و پاسخ بپرسید
          ۱۰ ایتر باید طی بشه که به یک ایپاک برسید.
          تعداد گام شما ۳۵۰ هزار تاست که با max_iter مشخص کردید. یعنی ۳۵ هزار ایپاک . stepsize مشخص کننده زمان تغییر نرخ یادگیری هست.
          شما دارید میگید هر ۱۰۰ هزار تکرار مقدار گاما رو در base_lr ضرب کن و از نتیجه حاصل بعنوان نرخ یادگیری جدید استفاده کن. به عبارت بهتر تا ۱۰۰ هزار تکرار اول نرخ یادگیری شما ۰.۱ هست. از ۱۰۰ هزار تا ۲۰۰ هزار نرخ یادگیری شما میشه ۰٫۰۰۱ از ۲۰۰ هزار تا ۳۰۰ هزار میشه ۰٫۰۰۰۱ و از ۳۰۰ هزار تا ۳۵۰ هزار هم میشه ۰٫۰۰۰۰۱ .
          iter جدا نداری. test_iter داریم و interval_iter که بالا توضیحاتشون داده شده.
          سیاست بهینه سازی به کل پارامترها اطلاق میشه .
          من یه اشتباهی کردم و تازه یادم اومد.اصلا حواسم نبود. lr_policy سیاست تعیین نرخ یادگیری هست که مشخص میکنه نرخ یادگیری چطوری کاهش یا تغییر پیدا کنه . برای مشخص کردن سیاست بهینه سازی هم از type میتونید استفاده کنید. که بالا در بخش سالور توضیحات هر دوی اینا کامل اومده.
          شما بجای inv میتونید از SGD و بقیه موارد هم استفاده کنید. اگه چیزی برای type مشخص نکنید پیشفرض SGD در نظرگرفته میشه)

          1. m.javad rezaei می گوید

            ممنون
            ببخشید من الآن دیدم که گفتید سوالامها رو دربخش پرسش و پاسخ بپرسم چشم
            ممنون

  4. farzaneh می گوید

    سلام و وقت بخیر
    لطفا جمله زیر را که در متن به صورت ناقص آمده تصحیح نمایید .
    “بعنوان مثال, فرض کنید مقدار momentum ما =۰٫۹ μ باشد. در اینصورت ما ضریبی آپدیتی برابر با داریم .”
    برابر با چی؟؟؟؟؟؟؟؟؟؟؟؟؟
    متشکرم

    1. سید حسین حسن پور متی کلایی می گوید

      سلام
      برابر ۱۰ هست.
      چون فرمولها به تصویر تبدیل شده بودند این یکی جا موند.
      خیلی ممنون که اطلاع دادید

  5. منصوره می گوید

    سلام
    من توضیحاتی در مورد “اهمیت مقدار دهی اولیه و ممنتوم در یادگیری عمیق” میخوام

    1. سید حسین حسن پور متی کلایی می گوید

      سلام .
      اهمیت مقداردهی اولیه قبلا خیلی زیاد بود قبل از معرفی بچ نرمالیزیشن اما الان به همین خاطر به اندازه و شدت قبل نیست
      مومنتوم هم داستانش مثل همون شبکه عصبی متداول و سنتی هست و همگرایی رو تسریع میکنه خصوصا در مواجهه با saddle point ها .
      اگه اطلاعات بیشتر و عینی تر میخوایید علاوه بر اینکه میتونید سرچ کنید و مطالب زیادی بدست بیارید میتونید آموزش ویدئویی دانشگاه استنفورد رو ببینید فکر میکنم جلسه ۴ یا پنجمش که در مورد relu ها صحبت میکنه
      در مورد مقداردهی اولیه و اهمیت اون هم توضیحاتی میده و اینکه چرا مهم بوده.

  6. صیاد می گوید

    با سلام
    میشه لطف کنید مفهوم test interval و test_iter رو توضیح بدیم من هیج جا تو آموزش هاتون اینا رو ندیدم

    1. سید حسین حسن پور متی کلایی می گوید

      سلام .
      من اونو تو بخش پنجم آموزش اوردم و توضیح دادم : بخش پنجم آموزش عملی
      در بخش پرسش و پاسخ هم سوالات مختلف شده و جواب دادم یه سرچ کنید مشخص هست

  7. صیاد می گوید

    فکر کنم test_iter تعداد تکرار تسته و test_interval هم یعنی بعد از این تعداد train تست رو انجام بده درست میگم یا نه ؟

  8. زهرا می گوید

    سلام
    در فرمول Adam بتا به توان t رسیده این t چی هست؟؟؟؟؟

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.