اطلاعیه

Collapse
No announcement yet.

هرس کردن شبکه عصبی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    هرس کردن شبکه عصبی

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

    #2
    پاسخ : هرس کردن شبکه عصبی

    دوستان فرض میکنیم که یه شبکه داریم که بلاخره بعد از کشمکش زیاد و انواع ترین کردن ها و .... به یه جواب نسبتا خوب میرسه وقتی به شبکه نگاه میکنیم میبینم چند لایه نرون داریم که تو هر لایه چند تا نرون داریم چند تا ورودی (مثلا 12) با چند تا خروجی (مثلا 5) داریم یه حساب کتاب که میکنیم میبینیم (مثلا 330) مجهول یا همون وزنو بایاس داریم .....
    حالا یه ایده کلی برای هرس کردن اینه که اول از همه برای اموزش این شبکه داده هامون رو حتما نرمالیزه کنیم یعنی اندازه رو از داده ها حذف کنیم و وتنها جهت رو روی وردی داشته باشیم.
    برای نرمالیزه کردن خیلی راه های مختلف وجود داره که یه دونه از خوباش فرمول زیره
    Delta = Xmax – Xmin
    C = (X-Xmin)/Delta
    m = 1/Delta
    Y = mX+C
    یعنی هر ورودی اختلاف ماکزیمم و مینیمم اون رو میگیرم و برای هر عنصر طبق فرمول بالا یه y بدست میاد که نرمالیزه شده اون عنصر هستش تمام عناصر دیتا ست رو نرمالیزه میکنیم و با نرمالیزه داده ها شبکه رو اموزش می دیم
    بعد از اموزش و انتخاب نوع یادگیری و .... وقتی که شبکه به جواب نسبتا خوبی رسید میشه یه کلک رشتی به شبکه زد وزنهایی رو که مقدار شون کم هستش مثلا 0.001 از شبکه حذف کنیم این وزنها تو خروجی اثر کمی دارن و جودشون نه تنها لوزومی نداره بلکه موجب افزایش خطای پیچیدگی شبکه میشه و تنها راه برای کم کردن خطای پیچیدگی اینکه شبکه هرس بشه ....
    بعد از هرس شبکه بدون تغییر دادن پارامترها دوباره شبکه رو ترین کنید احتمال خیلی زیاد جوابی شگفت انگیز خواهید دید و خطای پیچیدگی شدیدا کم میشه و یه شبکه عالی خواهید داشت

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

    در ضمن تمام این کاررا رو میشه برای ورودیها هم انجام داد یعنی اون ورودی که میانگین وزنهای اتصال داده شده بهش از یه مقدار در نظر گرفته شده ای کمتر باشه میشه اون ورودی رو از شبکه حذف کرد

    بعد از این کارا یه شبکه درست حسابی دارین که میتونین لذتشو ببرین... :mrgreen:

    امیدوارم یه ایده خوب بهتون داده باشم
    موفق باشین
    ایرونی ساقه و برگ و ریشه\ساقه از ریشه جدا نمیشه

    دیدگاه


      #3
      پاسخ : هرس کردن شبکه عصبی

      خیلی جالب بود و ممنونم از شما.بازم اگر میشه چندتا چی مهم بگید
      جانم به فدای ائمه اطهار
      می دونستم تحمل مرگ اعضای خانواده خیلی سخته ولی نه تا این حد،ایکاش پدرم بیشتر می موند.روحش شاد.

      دیدگاه


        #4
        پاسخ : هرس کردن شبکه عصبی

        با سلام
        در ابتدا، از شما برای موضوع طرح شده، متشکرم.

        چند موضوع تجربی :

        1- وزنها را که در ابتدا به صورت رندمی انتخاب می کنیم، اگر در بازه بزرگی باشند،
        امکان اینکه خروجی نرونهای دارای تابع اشباع شونده (مانند سیگمویید) را تا مدت طولانی در اشباع نگه دارند وجود دارد.( در مرحله آموزش )
        لذا لازم است بازه رندمی وزنهای اولیه ، کوچکتر باشند.( با چند بار آزمون بدست می آید.)

        2- چون وزنها در ماتریس ها ذخیره می شوند، لذا حذف وزنهای کوچک و کم اثر باید به صورت صفر نمودن آنها باشد، نه اینکه در ماتریس متناظر دیگری وزنهای موجود و حذف شده را با علایم متفاوت نشان دهیم.
        چون در شبکه های بزرگ ، ماتریس متناظر دوم بر حجم محاسبات اثری نزدیک به دو برابر خواهد داشت.

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

        4- ضریب آموزش کم باعث کندی و طولانی شدن و افتادن در مینیمم محلی می شود.
        ضریب آموزش زیادی هم باعث نوسان و فرار از هدف می شود.
        برای هر شبکه ، عملا طی 5 تا 10 بار آزمون ضرایب مختلف ، مقدار مناسب بدست می آید.

        5- انتخاب شبکه پس انتشار خطا:
        ابتدا 1 لایه میانی با تابع منحنی و با 3 تا 5 نرون و ورودی به تعداد مورد نیاز و خروجی به تعداد مورد نیاز ، لایه خروجی با تابع منحنی یا خطی.
        سپس آموزش و آزمون.
        افزایش نرونهای لایه میانی و تکرار آموزش و آزمون
        """"""""&q uot;"""""""&quo t;"""""""" """"""""&q uot;"""""""&quo t;"""""
        """"""""&q uot;"""""""&quo t;"""""""" """"""""&q uot;"""""""&quo t;"""""
        این افزایش نرون نباید از تعداد ورودی + تعداد خروجی ، خیلی بیشتر باشد، چون بی تاثیر خواهد بود ( حداکثر 2 برابر )
        ارزیابی و انتخاب یک ترکیب متعادل از میان آزمونهای فوق که سرعت آموزش و دقت نتایج خوبی داشته باشد.

        بر اساس بررسی هزاران ترکیب و حدود جمعا 4000 ساعت آموزش آنها ، برای شبکه پس انتشار خطا موارد ذیل بدست آمده است.

        افزایش نرون لایه میانی از تقریبا 1000 نرون تا 100،000،000 نرون بی تاثیر است!
        تعداد لایه ها از 3 به بالا بی تاثیر است!
        برای ساخت شبکه بزرگ جهت بررسی ، شما به محدودیت RAM در PC برخورد خواهید نمود.
        برای ساخت شبکه بزرگ جهت بررسی ، سرعت محاسباتی متلب کافی نخواهد بود.( C باید انتخاب شود.)
        برای ساخت شبکه بزرگ جهت بررسی ، سرعت محاسباتی PC کافی نخواهد بود.

        با سپاس
        گشتی در لاله زار
        http://www.eca.ir/forum2/index.php?topic=76138.0

        http://www.eca.ir/forum2/index.php?topic=76141

        دیدگاه


          #5
          پاسخ : هرس کردن شبکه عصبی

          البته به تجربیات دوستمون موارد زیر رو هم من اضافه میکنم
          بازه رندمی وزنها بستگی به بازه ورودیها داره اگر واریانس تمامی عناصر ورودی کم باشه یعنی تقریبا ورودی های هم اندازه باشن میشه بازه رندمی وزنها رو بزرگتر در نظر گرفت(ولی بهترین راه نرمالیزه کردنه اندازه داده ها بین صفر و یک و انتخاب رندمی وزنها بین صفر و یک است فرمول قبلی این کار رو میکنه)

          به طور نظری میشه دامنه تابع سیگمویید را بالا برد تا سرعت ترین بسار زیادتر بشه و احتمال اشباع کمتر بشه (افزایش دامنه تابع موجب افزایش دامنه خطا و در نتیجه افزایش سرعت ترین میشه بخ خاطر همین که سرعت اموزش در tanh خیلی بیشتر از سیگموییده چون دامنه tanh بین -1 تا 1 هست و سیگمویید بین 0 تا 1) :rolleyes:

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

          در ضمن توصیه میکنم همیشه ورودیهارو نرمالیزه کنیدبعد شبکه رو اموزش بدید

          دستمون اشاره کردن که 1000 تا ... بی تاثیر هستش اصولا بیشتر از 30 تا نرون در هر لایه وبیش از 3 لایه پنهان استفاده نمیشه هزارتا واقعا زیاده این موجب افزایش خطای پیچیدگی میشه ....

          در ضمن نکته دیگه دوستمون این بود که از سی جای متلب استفاده کنیم چون سرعت متلب برای شبکه های بزرگ کم میشه نظر من مخالف ایشونه چون
          اگر سرعت متلب در ارایه های بزرگ کم میشه به خاطر اینکه شما در زبانهای برنامه نویسی مثل سی اندازه ارایه رو مشخص میکنید اما در متلب این کارو نمیکنید و این هم به دلیل رویکرد سادگی در کد نویسی متلبه اگر در ارایه های بزرکگ از دستور zeros استفاده کنید 300 الی 400 برابر سرعت متلب زیاد میشه و با سی فرقی نمیکنه (چون با این دستور اندازه ارایه ها رو برای متلب مشخص میکنید و متلب متوجه میشه که چه مقدار از حافظه رم رو باید به این ارایه اختصاص بده)
          در ضمن در دنیای واقعی تعداد تکرارها یا درایه ماتریسها خون پرش 5000 میشه 100000000000000 برای حرفه ولی تو واقعت وجود نداره و برای 5000 تکرار نه احتیاج به zeros دارین نه به سی

          موفق باشین
          ایرونی ساقه و برگ و ریشه\ساقه از ریشه جدا نمیشه

          دیدگاه


            #6
            پاسخ : هرس کردن شبکه عصبی

            سلام خسته نباشید . بهتر بود که این مطالب بعد از ویرایش بصورت pdf روی سایت برای دانلود قرار میگرفت

            دیدگاه


              #7
              پاسخ : هرس کردن شبکه عصبی

              سلام
              با تشکر از مطالب مفیدتون،میشه یک کد نمونه از این کارم بزارین.

              دیدگاه

              لطفا صبر کنید...
              X