Skip to first unread message

ziba bahari

unread,
May 13, 2016, 7:43:44 AM5/13/16
to IranDeepLearning
سلام دوستان .من ساختار الکس نت رو برای پردازش فریم تکی بررسی کردم ولی درمورد اینکه چرا ترتیب لایه ها به این شکل در نظر گرفته شده؟ چیزی پیدا نکردم.یعنی به صورت تجربی به این نتیجه رسیدن که این ساختار عملکرد بهتری داره؟ و اینکه چرا در بعضی لایه ها از ماکس پولینگ و نرمالیزاسیون استفاده میشه در بعضی فقط کانولوشن؟ چه خصوصیاتایی هر کدوم دارن؟یا اینک چرا یه لایه تماما متصل دیگ اضافه شده؟

Mohsen

unread,
May 13, 2016, 9:01:39 AM5/13/16
to IranDeepLearning
سلام.
ببنید برای متوجه شدن مفهوم و دلیل لایه ها باید این مفاهیم رو به صورت پایه ای مطالعه کنید . مثلا دلیل استفاده از لایه های تمام متصل تجمیع ویژگی ها جهت دسته بندی و تفکیک پذیرتر کردن فضا جهت این کاره. پیشنها میکنم دوره آموزش کانولوشن دانشگاه استنفورد رو ببینید:
http://cs231n.stanford.edu
همچنین این مقاله هم درباره جزئیات شبکه کانولوشن بحث کرده:
https://www.cs.nyu.edu/~fergus/papers/zeilerECCV2014.pdf

ziba bahari

unread,
May 13, 2016, 10:23:07 AM5/13/16
to IranDeepLearning
تقریبا میدونم لایه ها هر کدوم چکار میکنن. ولی اینک چرا اینجا یه معماری متفاوت تری از کانولوشن عادی ارائه دادن چطور به این نتیجه رسیدن که مثلا دوتا لایه تماما متصل بزارن یا قبل اونا از سه تا کانولوشن استفاده کنند و بینشون عملیات پولینگ قرار ندادن! یا تو گوگل نت چطور سه تا کانولوشن و یه پولینگ گذاشتن؟
Message has been deleted

Hossein Hasanpour

unread,
May 16, 2016, 10:44:11 AM5/16/16
to irandeep...@googlegroups.com
بسم الله الرحمن الرحیم 
لایه های تماما متصل میتونن ویژگی های بیشتری رو یاد بگیرن 
از طرف دیگه چون تعداد پارامترها در این نوع لایه ها خیلی زیاد هست اخیرا سعی کردن این لایه ها رو تبدیل به معادل کانولوشن اونها کنن تا محاسبه و فضای مصرفی بهینه بشه . 
نکته دیگه اینکه امروزه دیگه مثل قبل از لایه نرمالیزاسیون! استفاده نمیشه بجاش از لایه بچ نورمالیزیشن استفاده میشه 
علاوه بر اون تعریف یک معماری الان بر اساس قانون خاصی نیست . بیشتر یک هنره . و تست و تجربه . 
نکته ای که طی این سالها بهش رسیدن اینه که هرچقدر شبکه شما عمیق تر باشه موفقیت شبکه شما هم بیشتره . اینم باید بدونید که هرچقدر عمق شبکه بیشتر باشه مشکلات اموزش اون خیلی خیلی بیشتر میشه . 
حالا از طرف دیگه اینکه چرا همه اش از لایه های تماما متصل استفاده نمیشه و بخاطرش از لایه کانولوشن استفاده میشه بخاطر این هست که به غیر از بحثهای پردازشی  و سربار زیاد  این لایه ها اورفیتینگ زیادی رو هم بخاطر تعداد زیاد پارامترها باعث میشن و از طرف دیگه ماهیت 2 بعدی تصاویر در لایه کانولوشن بخوبی قابل استفاده اس. 
برای همین برای اینکه بشه خصائیص غیر خطی بیشتری رو بدست اورد میان تعداد مختلفی از لایه های کانولوشن رو پشت سر هم قرار میدن و بعدش در لایه اخر از حداقل یه لایه تماما متصل برای دسته بندی استفاده میکنن . 
این وسط برای ایجاد یک translation invariance و همینطور کاهش ابعاد در توده های موجود در شبکه میان از pooling استفاده میکنن 
چون پولینگ هر بار کاهش ابعاد رو باعث میشه به همین خاطر اگر اندازه تصویر شما نسبتا کوچیک باشه زیاد و به کرار ازش استفاده نمیکنن بجاش سعی میکنن از طریق خود لایه کانولوشن با اندازه فیلتر بزرگتر و یا گام متفاوت تر کاهش ابعاد رو داشته باشن. 
پس خط مشی کلی امروزه اینه سعی کنید تعدادی لایه کانولوشن پشت سر هم داشته باشید بعد بسته به اندازه تصویر سعی کنید بین اینها از pooling استفاده کنید (Max نشون داده که بعضا بهتر جواب میده اما شما بسته به کارتون ممکنه از توابع دیگه نتایج بهتری بگیرید) . بعد در لایه های اخر هم از لایه تماما متصل استفاده کنید . 
البته تکنیک های جدیدی هم اومدن که با استفاده از اونها میتونید باعث بهتر شدن نتیجه بیشید (مثل استفاده از ELU وPrelu بجای Relu یا استفاده از dropout و dropconnect برای مقابله با اورفیتینگ و یا spatial pyramid pooling یا stochastic pooling (که این نمونه اخری رو من تست کردم نتیجه ام خیلی بد شد!) و... 
در آخر هم باید بگم هرکدوم از این روشها و تکنیک هایی که معرفی میشن باید تست بشن و ممکنه شما یکی از این روشها رو تست کنید و نتیجه اتون بدتر بشه وقتی این اتفاق افتاد یا نیاز به تست بیشتر دارید یا در حالت شما اصلا نیازی به استفاده از اون ویژگی خاص نیست . مثلا من بدون stochastic pooling به دقت 99درصد در ام نیست رسیده بودم که وقتی فعالش کردم دقتم شد 43 درصد! 

اینکه اندازه تعداد فیچرمپهای شبکه کانولوشن رو هم چقدر بگیریم این هم یه پارامتر هست و قائده خاصی نداره . چیزی که من میتونم بگم اینه که از کم شروع کنید بعد کم کم برید بالا. یه نکته خیلی مهم دیگه هم بخش optimiziation و مسائلی مثل انتخاب نرخ یادگیری و مومنتوم و... هست . ممکنه شما یک مدل /معماری خیلی خوب از لایه ها رو تعریف کنید و بعد فقط بخاطر درست انتخاب نکردن پارامترهای optimization نتایج بدی بگیرید . دوباره بعنوان نمونه من عینا همون معماری که با اون به دقت 99درصد رسیده بودم با تغییر پارامترهای بهینه سازی نتونستم بیشتر از 86درصد برم . 
کاری که من شخصا میکنم اینه اول سعی میکنم با یه پیکربندی اولیه شروع کنم و انقدر با پارامترهای solver کار کنم تا مطمئن بشم بهترین نتیجه رو گرفتم بعد شروع میکنم تعداد لایه ها و یا خروجی اونها رو تغییر دادن و دوباره این مسیر رو ادامه میدم تا به نتیجه برسم . 
البته این مربوط به زمانی هست که من بخوام بنا به دلایلی خاص از هیچ مدلی دیگه ای استفاده نکنم . ولی معمولا در 90 درصد اوقات اکثر محققا یک مدل مثل الکس نت یا گوگل نت یا Vggnet رو انتخاب میکنن و بعد شروع میکنن با تغییر دادن تو اوون از اون در کار مورد نظر خودشون استفاده کردن . 
نکته دیگه ای هم در مورد انتخاب مدل حائز اهمیت هست مشخصات سخت افزاری مورد نیاز اونها هست که باید بهش دقت کنید. 
در پناه حق موفق و سربلند باشید 

Mohammad Javad Rezaei

unread,
May 21, 2016, 3:57:22 AM5/21/16
to IranDeepLearning
با سلام
من به مشکل برخوردم گفتم شاید اینجا بتونم کمک بگیرم ،
راستش من تصمیم گرفتم برای پایان نامه یادگیری عمیق کار کنم وجز ی تعریف اولیه چیز خاصی ازش نمیتونم 
 مشکلی که دارم اینه که من وقت زیادی ندارم و باید تو چند روز کارم مشخص کنم و نهایت یک هفته بعد پروپزال بدم ولی هیچ اشرافی بهموضوعات ندارم و نمیدونم باید چکار کنم 
آیا دوستان کسی هست که بتونه راهنماییم کنه که چکار کنم ؟ از چی شروع کنم و سراغ چ موضوعاتی برم ؟ چون واقعا وقتی ندارم 
ممنون

Mohsen

unread,
May 21, 2016, 6:22:20 AM5/21/16
to IranDeepLearning
سلام لطفا سوالاتی که ارتباطی با سوال قبلی ندارن در قالب سوال جدید مطرح کنید
Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages