به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

با سلام
من میخواستم بدونم حافظه مصرفی در لایه های کانولوشن به چه مواردی اختصاص می یابد.
ممنون میشم اگر توضیح بدید در این مورد

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

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

سلام
منظور از حافظه مصرفی در یک شبکه، اون حافظه ای هست که توسط متغییرها و در کل عملیاتهای مختلف اشغال میشه. غالب سربار مربوط هست که وزنها در شبکه. همون فیلترهای کانولوشن و یا وزنهای تماما متصل .اینها عمده سربار حافظه و پردازشی شبکه رو شامل میشن.
بودجه پردازشی که ازش صحبت میکنیم اشاره به تعداد عملیات اعشاری داره، از طرفی بعضی اوقات بودجه پردازشی منظور پارامترهای قابل یادگیری هستن (چقدر میتونیم پارامتر قابل یادگیری داشته باشیم؟) پارامتر قابل یادگیری هم منظور همون وزنها هستن. باز یعنی همون فیلترها و وزنهای لایه های تماما متصل. این پارامترها مشخص کننده میزان مصرف حافظه و سربار پردازشی (مصرف سی پی یو یا Gpu) هستند. هرچقدر بیشتر باشن نیازمندی های سخت افزاری افزایش پیدا میکنه و هزینه استفاده ازاون مدلها بالاتر میره. بعنوان مثال برای یک کاربرد بلادرنگ شما نیازمند یک مدل سریع و با سربار حافظه و پردازشی کم هستید تا هرچه سریعتر بتونید ورودی ها رو پردازش کنید و latency شما حداقل باشه. اینجا تعداد پارامتر کمتر و سربار پردازشی (FLOPS ) کمتر حائز اهمیت هست.
در طراحی یک مدل چیزی شما تکنیک های مختلفی برای کاهش سربار رو دیدید و یاد گرفتید میتونید از اونها برای کاهش سربار استفاده کنید. شیوه محاسبه تعداد پارامتر و یا میزان ضربها رو هم که یادگرفتید (هرجند الان فریم ورکها همه اینارو معمولا حساب میکنن برای شما مثل کراس بعنوان مثال) دیگه باید بتونید حساب کنید انتخاب های مختلف شما چه سرباری رو ایجاد میکنن. در ساده ترین حالت سعی کنید از تماما متصل کمترین استفاده ممکنه رو ببرید (سعی کنید فقط برای دسته بندی ازش استفاده کنید مثلا) و برای کاهش سربار در بخشهای کانولوشن هم از همون ایده گسترش تدریجی استفاده کنید تا با توجه به یک دقت از کمترین میزان پارامتر برای رسیدن به اون بهره برده باشید . بعد از انجام اینکار هم میتونید با تکنیک هایی که یادگرفتید سعی کنید سربار رو باز کاهش بدید.
نمیدونم همین مطلب مد نظر شما بوده یا نه. اگر خیر در کامنت لطفا اشاره کنید

توسط (4.3k امتیاز)
انتخاب شده توسط
سلام
خیلی ممنون از توضیحاتتون
پس حافظه مصرفی به دو مورد کلی اختصاص می یابد که پارامترهای قابل یادگیری و عملیات های مختلف. که چون اکثر عملیات ها مربوط به همون پارامترهای قابل یادگیری هستند وقتی پارامترهای قابل یادگیری افزایش پیدا میکنه حافظه مصرفی از دو لحاظ باید بیشتر بشهف حافظه مربوط به خود پارامترها و و حافظه مربوط به عملیات های مربوط به اون پارامترها. درسته؟
در واقع حافظه مصرفی به حافظه لازم برای پارامترها و به حافظه پردازشی مربوط به انواع عملیات ها در شبکه اختصاص پیدا میکنه، اگه درست متوجه نشدم لطف میکنید اشتباهم رو بفرمایید ؟ ممنون از زحماتتون
سلام . بله یک بخش حافظه که همین وزنها هستن (متغیرها از نوع فلوت 64 مثلا) یکسری هم متغیرهای میانی هستن که برای کارهای جانبی (عملیاتهای جانبی) استفاده میشن برای بحث caching و .... یکسری هم که برای ذخیره گرادیانها استفاده میشن یکسری هم که حاوی همون توده های ورودی شما هستن و یکسری هم بچ ها و.... به همین شکل متغییرهای مختلف(حافظه های مختلف) برای کارهای مختلف لحاظ میشن. از بین اینها چیزی که غالب هست همونطور که میبینید وزنها هستن در بحث پردازشی (چون ضرب و جمع و... باید انجام بشه) و همینطور بحث حافظه اندازه توده های ورودی شماست (هم توده ورودی شما و هم توده های ورودی به لایه های مختلف (اندازه و تعداد فیچرمپها) و اندازه بچ شما در شبکه اس که همون تعداد تصاویری هست که در آن واحد به شبکه ارائه میشه. همونطور که میبنید اینها بهم وابسته هستن. مثلا بچ رو زیاد کنید میبینید مصرف حافظه میره بالا. یا اندازه فیچرمپها زیاد باشه یا تعدادشون باز به همین شکل هرکدوم فضا اشغال میکنن و همینطور الی اخر.
ما وقتی بحث حافظه مصرفی رو میکنیم منظور همه اینها باهمه. هرجا نباشه معمولا میگیم. بعضی مواقع هم مثلا میشه که این وزنها ملاک خوبی نیستن برای اینکه بفهمیم مصرف یک معماری زیادتر از یکی دیگه اس یا نه(یعنی فقط بر اساس تعداد پارامتر بگیم چون این پارامترش کمتره پس حافظه مصرفیش هم کمتره)  مثلا یک معماری مثل دنزنت تعداد پارامتر کمی داشت (یعنی تعداد وزنهاش کم بود) اما سربار حافظه خیلی زیادی داشت (تعداد و اندازه فیچرمپها زیاد بود) برای همین یک معماری 800 هزارپارامتریش 8 گیگ رم نیاز داشت با بچ 64!( مثلا یک معماری دیگه با 5 میلیون پارامتر با بچ 100 مثلا 2 گیگ رم مصرف میکرد!)
سلام الان خوب متوجه شدم.
خیلی ممنونم ازتون.
ان شاالله در پناه حق همیشه  موفق و موید باشید
...