تالار گفتمان مانشت
نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - نسخه‌ی قابل چاپ

نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - ایزدی - ۱۲ اسفند ۱۳۹۲ ۰۳:۰۸ ب.ظ

می خوایم که یک شبکه عصبی حالا از نوع هب یا پرسپترون داشته باشیم که به عنوان ورودی یک ماتریس یا ارایه ۵×۵ رو دریافت می کنه
ما فقط دو تا حالت خاص از جایگشت های ممکن یک ها و صفر ها در این ماتریس مد نظرمون هست

برای خروجی شبکه باید ۱ بیت در نظر بگیریم که بشه دو تا کلاس یا باید ۲ بیت در نظر بگیریم که بشه برای هر جایگشت یک کلاس و برای ۲ به توان ۲۵ منهای دو تا حالت بقیه هم یک کلاس؟سر جمع سه کلاس

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

حالا در ادامه مثلا برای اموزش در شبکه ی پرسپترون ما میایم تمام حالت های ورودی ها رو برای اموزش به شبکه می دیم اما ۲ به توان ۲۵ حالت خیلی زیاده چه کار کنیم که ساده سازی کنیم و این همه حالت مختلف برای پردازش ندیم به شبکه ؟
اگر تعداد کم بود شاید می شد با جدول های کارنو و ... ساده سازی کرد اما ۲۵ تا ورودی غیر ممکن می شه !

اگر کتابی هم در این زمینه می دونین لطفا بهم معرفی کنین

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - ایزدی - ۱۲ اسفند ۱۳۹۲ ۰۷:۳۹ ب.ظ

می گم چطوره پیش پردازش کنم
بعد دو تا الگویی ک مطلوبن رو به دو تا ورودی دو یا یک بیتی ساده کنم (بسته به اینکه باید سه تا کلاس داشته باشم یا دو تا) بعد دیگه ورودی شبکه من نمی شه یک بردار ۲۵ بیتی می شه دو تا بیت

همچین کار یمی تونم بکنم؟
مثل حالتی که عکس ها رو از RGB به باینری تبدیل می کردیم برای ورودی به شبکه توی متلب؟

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - ایزدی - ۱۳ اسفند ۱۳۹۲ ۱۲:۴۲ ب.ظ

حالا هی جواب ندید
من ول کن نیستم Big Grin

اگر اطلاعی دارید بهم بگید اصلا تا چه حد اجازه ساده سازی برای پیش پردازش داریم ؟

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - equilibrium - 13 اسفند ۱۳۹۲ ۱۰:۵۲ ب.ظ

من اطلاعاتم از شبکه عصبی محدوده؛
تا جائیکه میدونم لازم نیست (نباید) شما تمام ۲ به توان ۲۵ حالت ممکن رو به عنوان مجموعه داده آموزشی در نظر بگیرید؛ کار شبکه اینه که چندتا پترن نمونه بهش بدیم و خودش یاد بگیره با بقیه پترن ها چکار کنه؛
میتونید برنامتون رو چندین بار و هر بار با تعداد مشخصی پترن ورودی اجرا کنید طوریکه اون دو تا پترن خاص همیشه در ورودی ها باشن؛
مثلا می تونید هر بار دو تا سطر ماتریس های ورودی رو تغییر بدید و بقیه سطرها رو ثابت برابر ۰ یا ۱ در نظر بگیرید؛ یعنی اندازه مجموعه آموزشی میشه حدود ۱۰۰۰ تا پترن؛ و بعد در فاز تست می تونید هر کدوم از پترن هایی که در فاز یادگیری لحاظ نکردید رو به شبکه بدید؛

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - ایزدی - ۱۴ اسفند ۱۳۹۲ ۱۲:۱۳ ق.ظ

(۱۳ اسفند ۱۳۹۲ ۱۰:۵۲ ب.ظ)Ghiasoddin نوشته شده توسط:  من اطلاعاتم از شبکه عصبی محدوده؛
تا جائیکه میدونم لازم نیست (نباید) شما تمام ۲ به توان ۲۵ حالت ممکن رو به عنوان مجموعه داده آموزشی در نظر بگیرید؛ کار شبکه اینه که چندتا پترن نمونه بهش بدیم و خودش یاد بگیره با بقیه پترن ها چکار کنه؛
میتونید برنامتون رو چندین بار و هر بار با تعداد مشخصی پترن ورودی اجرا کنید طوریکه اون دو تا پترن خاص همیشه در ورودی ها باشن؛
مثلا می تونید هر بار دو تا سطر ماتریس های ورودی رو تغییر بدید و بقیه سطرها رو ثابت برابر ۰ یا ۱ در نظر بگیرید؛ یعنی اندازه مجموعه آموزشی میشه حدود ۱۰۰۰ تا پترن؛ و بعد در فاز تست می تونید هر کدوم از پترن هایی که در فاز یادگیری لحاظ نکردید رو به شبکه بدید؛

سلام
خیلی ممنون که جوابمو دادین
در شبکه پرسپترون ک فکر کنم باید تمام داده ها رو برای اموزش به شبکه بدیم و فاز تستشم فقط از الگوهای تکراری می شه بهش بدیم
اشتباه می کنم ؟

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - blackhalo1989 - 14 اسفند ۱۳۹۲ ۱۲:۱۸ ق.ظ

(۱۴ اسفند ۱۳۹۲ ۱۲:۱۳ ق.ظ)ایزدی نوشته شده توسط:  سلام
خیلی ممنون که جوابمو دادین
در شبکه پرسپترون ک فکر کنم باید تمام داده ها رو برای اموزش به شبکه بدیم و فاز تستشم فقط از الگوهای تکراری می شه بهش بدیم
اشتباه می کنم ؟
مجموعه آموزش و تست باید از هم مستقل باشن وگرنه جواب بایاس میشه.

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - ایزدی - ۱۴ اسفند ۱۳۹۲ ۰۱:۳۶ ق.ظ

(۱۴ اسفند ۱۳۹۲ ۱۲:۱۸ ق.ظ)blackhalo1989 نوشته شده توسط:  
(14 اسفند ۱۳۹۲ ۱۲:۱۳ ق.ظ)ایزدی نوشته شده توسط:  سلام
خیلی ممنون که جوابمو دادین
در شبکه پرسپترون ک فکر کنم باید تمام داده ها رو برای اموزش به شبکه بدیم و فاز تستشم فقط از الگوهای تکراری می شه بهش بدیم
اشتباه می کنم ؟
مجموعه آموزش و تست باید از هم مستقل باشن وگرنه جواب بایاس میشه.

وای من بد جوری گیج شدم
استادم گفتن که برای تست دو جور الگو می تونیم استفاده کنیم
یا الگوی دوست که همون الگوی های ورودی اموزش هستن
یا الگوی نا اشنا که الگو های جدید یا الگو های نویزی شده هستن

پس من غلط برداشت کردم و می تونیم یه تعداد محدود از احتمالات ورودی رو به شبکه برای اموزش بدیم
ولی برای تست می توینم هم از تکراری ها هم از جدیدا استفاده کنیم


درست گفتم الان یا بازم دارم اشتباه می کنم ؟

مثل اینکه اصلا هیچی از مبحث یاد نگرفتم
SadHuh

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - equilibrium - 14 اسفند ۱۳۹۲ ۰۱:۵۷ ق.ظ

(۱۴ اسفند ۱۳۹۲ ۰۱:۳۶ ق.ظ)ایزدی نوشته شده توسط:  وای من بد جوری گیج شدم
استادم گفتن که برای تست دو جور الگو می تونیم استفاده کنیم
یا الگوی دوست که همون الگوی های ورودی اموزش هستن
یا الگوی نا اشنا که الگو های جدید یا الگو های نویزی شده هستن
پس من غلط برداشت کردم و می تونیم یه تعداد محدود از احتمالات ورودی رو به شبکه برای اموزش بدیم
ولی برای تست می توینم هم از تکراری ها هم از جدیدا استفاده کنیم
درست گفتم الان یا بازم دارم اشتباه می کنم ؟
مثل اینکه اصلا هیچی از مبحث یاد نگرفتم
SadHuh

همونطور که آقای blackhalo گفتن مجموعه تست باید مجزا باشه؛ کار شبکه عصبی اینه که با دادن یکسری ورودی (نه همه ورودی های ممکن) وزن های بهینه خودشو به دست بیاره طوریکه بتونه ورودی های جدید (اونهایی که در آموزش بهش داده نشده) رو هم برچسب بزنه؛ کل داده های شما همون ۲ به توان ۲۵ تاست؛ از بین این تعداد شما می تونید نصفشو بردارید (یعنی نصف المان های ماتریسهای ورودی رو ثابت و بقیه رو متغیر در نظر بگیرید) و دوباره از نصفه برداشته شده، حدودا ۷۰ درصدشو برای اموزش و بقیه رو برای تست استفاده می کنید؛ میتونید اینکار رو چند بار انجام بدید و میانگین کل اجراها رو به عنوان دقت نهایی شبکه لحاظ کنید؛
( امیدوارم درست گفته باشم (: )

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - blackhalo1989 - 14 اسفند ۱۳۹۲ ۰۱:۰۹ ب.ظ

البته نصف هم خیلی زیاده. در کاربرد های واقعی ما مقدار کمی داده برچسب خورده داریم برای همین هم semi supervised learning مطرح شد.

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - ایزدی - ۱۴ اسفند ۱۳۹۲ ۰۸:۰۶ ب.ظ

امروز تونستم یه وقت از استادم بگیرم
گفتن باید ۷۰ درصد برای اموزش به شبکه اختصاص بدی
تقریبا می شه ۲۲ ملیون و چهار صد هزار داده !!! تازه فقط واسه اموزش و تمام داده های باقی مانده هم باید برای تست به کار برن
ولی تا جایی ک من یادمه برای کارای تصویری که کلا پایگاه داده های خیلی خیلی کوچیک تری از این حرفا در نظر می گرفتیم
شما مساله هایی با این وسعت ورودی حل کردید ؟

وقتی درباره پیش پردازش صحبت کردم
روش هایی ک بتونم تعداد بیت های ورودی رو با یه سری ساده سازیا کمتر کنم
مثلا از ۲۵ بیت ورودی برای شبکه فقط چهار بیت یا ۸ اینا بفرستم
گفتن نه نمی تونید فرمت ورودی رو تغییر بدید باید همون ۲۵ بیتی باشه

گفتن تعریف پیش پردازش اینه که که نویز ها رو حذف کنیم
و برام توضیحش دادن

پس من چه کارایی رو می تونم واسه ساده شدن مساله استفاده کنم ؟

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - blackhalo1989 - 14 اسفند ۱۳۹۲ ۰۸:۲۰ ب.ظ

در مسایل واقعی هیچ وقت تمام حالات ورودی رو به مساله نمیدن. اصلا خیلی وقت ها ممکن نیست این کار انجام بشه چون برای این کار باید تمامی داده ها برچسب بخوره.
در مسایل واقعی اینطوریه که ما یه مجموعه از داده های برچسب خورده (یعنی یه مجموعه داده که خروجی به ازای اونها مشخصه) رو داریم. این مجموعه داده ها خیلی کمتر از تمامی حالاته (در حالتی که ورودی پیوسته باشه اصلا ممکن نیست تمامی حالات رو داشته باشیم). سپس این مجموعه رو به نسبت ۲ و ۱ میشکنیم به مجموعه آموزش و مجموعه تست. سپس لرنر رو روی مجموعه آموزش، آموزش میدیم و روی مجموعه تست دقتشو به دست میاریم.
در صورتی که داده هامون کم باشه از روش های دیگه ای برای مجموعه تست و مجموعه آموزش استفاده می کنیم (مثل k-fold)
میشه با روش های کاهش بعد ابتدا بعد داده های ورودی رو کاهش داد و سپس اونها رو به سیستم بدیم.
برای اینکه درکی از روند کار داشته باشید باید درس الگوشناسی آماری رو گذرونده باشید.
موضوع تز ارشد من بازشناسی گفتار با استفاده از شبکه های عصبی بود.
۲۵ ورودی اصلا زیاد نیست.

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - ایزدی - ۱۵ اسفند ۱۳۹۲ ۰۱:۵۷ ق.ظ

(۱۴ اسفند ۱۳۹۲ ۰۸:۲۰ ب.ظ)blackhalo1989 نوشته شده توسط:  در مسایل واقعی هیچ وقت تمام حالات ورودی رو به مساله نمیدن. اصلا خیلی وقت ها ممکن نیست این کار انجام بشه چون برای این کار باید تمامی داده ها برچسب بخوره.
در مسایل واقعی اینطوریه که ما یه مجموعه از داده های برچسب خورده (یعنی یه مجموعه داده که خروجی به ازای اونها مشخصه) رو داریم. این مجموعه داده ها خیلی کمتر از تمامی حالاته (در حالتی که ورودی پیوسته باشه اصلا ممکن نیست تمامی حالات رو داشته باشیم). سپس این مجموعه رو به نسبت ۲ و ۱ میشکنیم به مجموعه آموزش و مجموعه تست. سپس لرنر رو روی مجموعه آموزش، آموزش میدیم و روی مجموعه تست دقتشو به دست میاریم.
در صورتی که داده هامون کم باشه از روش های دیگه ای برای مجموعه تست و مجموعه آموزش استفاده می کنیم (مثل k-fold)
میشه با روش های کاهش بعد ابتدا بعد داده های ورودی رو کاهش داد و سپس اونها رو به سیستم بدیم.
برای اینکه درکی از روند کار داشته باشید باید درس الگوشناسی آماری رو گذرونده باشید.
موضوع تز ارشد من بازشناسی گفتار با استفاده از شبکه های عصبی بود.
۲۵ ورودی اصلا زیاد نیست.

یعنی شما می گید بی خیال ساده سازی شم دیگه ؟

RE: نحوه ی ساده سازی ورودی های شبکه های عصبی برای کاهش بار محاسبات - blackhalo1989 - 15 اسفند ۱۳۹۲ ۰۲:۳۰ ق.ظ

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