این مقاله یک تکنیک جدید در حوزه Unsupervised Learning را معرفی کرده است که بخش عمده از فرآیند آموزش آن بدون استفاده از Backpropagation است و در انتها نیز مدل برای یک Task مشخص آموزش ندیده است و میتواند بسته به نوع Task شخصی سازی شود که این از نقاط قوت روش است. البته در مقاله مثال ها و نتایج بر روی داده های تصویر نشان داده شده است ولی هیچ محدودیتی در این زمینه وجود ندارد و میتوان همین روش را بر روی انواع Task ها و نوع داده های دیگر نیز انجام داد.
نویسندگان مقاله یعنی Dimitry Krotov و John Hopfield پیش زمینه نوروساینس دارند و این پیش زمینه نیز در مقاله خود را نشان داده و اصولا مقاله نیز بر مبنای دو مشاهده زیستی بنا شده است. تفکر آنها این است که قواعد یادگیری در شبکه های عصبی (backpropagation یا SGD) ، بر خلاف نرون ها و ساختار آنها که الهام گرفته از سیستم عصبی انسان است، هیچ گونه ارتباطی با نروبیولوژی ندارد و تلاش دارند که بر مبنای مشاهدات زیستی یک الگوریتم یادگیری ارایه کنند.
الگوریتم ارایه دهنده آنها بر مبنای دو مشاهده است که در زیر به آنها پرداخته شده است :
مشاهده ۱: تغییرات سیناپسی به صورت محلی است :
در یک سیستم عصبی واقعی پاسخ نرون توسط یک روش تغییر سیناسپسی انجام می شود که به صورت فیزیکی محلی است. این جمله شاید کمی نامفهوم باشد. پس کمی آن را بازتر میکنیم. فرض کنید یک اتصال سیناپسی که بین دو نرون i و j قرار دارد. در فرآیند آموزش به وسیله الگوریتم SGD تغییر این وزن نه تنها به نرون های i و j بستگی دارد بلکه به لیبل ها و فعالیت نرون های لایه های بعد نیز بستگی دارد. (فرمول Backpropagation) پس فرآیند یادگیری در این حالت local نیست در حالی که در یک سیستم عصبی واقعی این وزن و اتصال به صورت Local تغییر می کند و اینجا همان نقطه ای که نویسندگان مقاله میخواهند آن را رفع کنند و روشی ارایه دهند که این اتصال به صورت Local و محلی تغییر کند. اگر چه تغییرات در سیستم عصبی میتواند به بعضی از متغیرهای Global بستگی داشته باشد (مثل وضعیت توجه حیوان ، ترس و ...) اما باز هم به فعالیت سایر نرون ها بستگی ندارد.
مشاهده ۲ : فرآیند یادگیری در حیوانات بدون استفاده از Label است و سیستم عصبی آنها نیز داده بسیار کمتری را برای یادگیری نیاز دارد.
فرآیند یادگیری شبکه های عصبی در بسیاری از اوقات نیاز به حجم زیادی از داده های label دار دارد در حالی که وقتی به موجودات زنده مثل انسان یا حیوان نگاه میکنیم برای یادگیری نیاز به این حجم از داده نیست و یادگیری با حجم داده بسیار کمتری امکان پذیر است.
بنابراین سوالی که مقاله به دنبال پاسخ آن است این سوال است :
“آیا میتوان فرآیند یادگیری بدون استفاده از داده های Label دار باشد و فرآیند تغییر وزن ها نیز به صورت local باشد و بسته به فعالیت نرون ها در لایه های بعد نداشته باشد ؟ “
در ادامه به الگوریتم یادگیری مطرح شده میپردازیم.
قبل از معرفی الگوریتم دو نکته در مورد این مقاله قابل ذکر است :
· نکته ۱ : به لحاظ محاسباتی این الگوریتم محاسبات کمتری دارد و حجم محاسبات آن تقریبا مشابه با Forward Pass در Backpropagation است.
· نکته ۲ : برای بدست آوردن یک representation مناسب نیاز نیست که بر روی یک Task خاص آموزش ببینید.
حال به توضیح ساختار کلی الگوریتم میپردازیم :
بخش سمت چپ تصویر بالا همان الگوریتم یادگیری زیستی است که فرآیند آپدیت وزن های آن به صورت Local است و در آن داده بدون استفاده از هیچ گونه Label در این ساختار جاری می شود و وزن های مربوطه آپدیت می گردد. پس از آموزش این بخش اگر بخواهیم این ساختار را برای یک مساله خاص گسترش دهیم کافی است تا یک شبکه Fully Connected به این ساختار اضافه کنیم (بخش سمت راست تصویر بالا) و آن را به کمک الگوریتم Backpropagation آموزش دهیم. در طی کل فرآیند آموزش تنها این بخش است که از Backpropagation استفاده میکند.
در ادامه کمی دقیق تر به ریاضیات مربوط به این ساختار میپردازیم.
روابروابط بالا همان روابطی است که در شبکه های عصبی به صورت متداول دیده می شود. تنها نکته در روابط بالا مربوط به توان n تابع فعال سازی می باشد که اگر این مقدار برابر یک باشد همان تابع فعال سازی ReLU است. همچنین وزن های Wui به کمک الگوریتم Unsupervised که در ادامه معرفی می شود آپدیت میگردد. لازم به ذکر است که همانطور که گفته شد برای آپدیت این بخش از وزن ها از هیچ Label ای استفاده نمی شود. پس از آموزش این بخش نیز نیز به کمک همان روش متداول SGD محاسبه می گردد.
نحوه محاسبه وزن های Wui :
به صورت معمول برای محاسبه خروجی hu باید ورودی یعنی vi در Wui ضرب ماتریسی شود و سپس تابع فعال سازی غیرخطی اعمال گردد. در تکنیک جدید ارایه شده در مقاله مقدار hu از طریق حل معادل دیفرانسیلی زیر بدست می آید:
در بالا همان روابطی است که در شبکه های عصبی به صورت متداول دیده می شود. تنها نکته در روابط بالا مربوط به توان n تابع فعال سازی می باشد که اگر این مقدار برابر یک باشد همان تابع فعال سازی ReLU است. همچنین وزن های Wuj به کمک الگوریتم Unsupervised که در ادامه معرفی می شود آپدیت میگردد. لازم به ذکر است که همانطور که گفته شد برای آپدیت این بخش از وزن ها از هیچ Label ای استفاده نمی شود. پس از آموزش این بخش نیز نیز به کمک همان روش متداول SGD محاسبه می گردد.
برای ارزیابی الگوریتم از دو دیتاست MNIST و CIFAR-10 استفاده شده است و ابتدا به کمک الگوریتم زیستی پیشنهاد شده وزن های محاسبه شده اند. برای این بخش ۲۰۰۰ نرون در لایه مخفی قرار داده شده است. وزن دهی اولیه این پارامترها نیز به کمک توزیع نرمال استاندارد انجام شده است. در مرحله بعد با استفاده از الگوریتم SGD بخش Supervised آموزش داده شده است که در این مرحله وزن های بخش اول آپدیت نخواهد شد و اصطلاحا Freeze می شوند.
نتایج مربوط به دیتاست MNIST:
نتایج بدست آمده نیز قابل ملاحظه بود. در شکل زیر نمودار مربوط به فرآیند Train و Test برای دیتاست MNIST آورده شده است که در ادامه بررسی می گردد:
نتایج بسیار قابل ملاحظه است. بخش سمت راست تصویر بالا ، نتایج مربوط به فرآیند Train و Test الگوریتم SGD (یعنی شبکه ای معادل با شبکه پیشنهادی به ترتیب با ۷۸۴ و ۲۰۰۰ و ۱۰ نرون ) با رنگ های صورتی و سبز رنگ نشان داده شده است و نتایج مربوط به ترکیب روش زیستی و SGD نیز با رنگ های آبی و قرمز نشان داده شده است. آنچه که در اینجا بیشتر اهمیت دارد نتایج بر روی داده های Test است که مشاهده میکنیم که الگوریتم زیستی توانسته است کاملا پا به پای الگوریتم SGD حرکت کند. اگر چه در فرآیند آموزش نتایج SGD کمی بهتر است اما در نهایت نتایج بر روی داده های تست معادل می باشد و این نشان می دهد که الگوریتم زیستی توانسته است به رقابت با SGD بپردازد و خطایی معادل با ۱.۵۲ درصد کسب کند که نسبت به سایر الگوریتم های زیستی ارایه شده به مراتب بهتر است. (بهترین نتایج مقالات قبل بین ۲ تا ۳ درصد خطا را ارایه می کردند.)
در اشکال سمت چپ و وسط تصویر بالا نیز ویژگی های یاد گرفته شده توسط الگوریتم زیستی و SGD نشان داده شده است و مشاهده می گردد که ویژگی های یاد گرفته شده کاملا متفاوت می باشند. رنگ های استفاده شده در شکل بالا به این صورت است که رنگ سفید نشان دهنده وزن های صفر و رنگ قرمز نشان دهنده وزن های مثبت و رنگ آبی نشان دهنده وزن های منفی می باشد. نکته مهمی که در اینجا وجود دارد آن است که این الگوریتم صرفا یک تطبیق ساده با اعداد را یاد نمیگیرد و به واقع به دنبال یادگیری الگوها است. در بخش چپ شکل بالا از ۱ تا ۵ (نحوه خواندن : از چپ به راست و سپس از بالا به پایین) یک سری زیرالگو استخراج شده است که نشان می دهد شبکه به دنبال یادگیری ساختار و الگوها است. اگر چه این موضوع در نتایج مربوط به داده های تست نیز قابل مشاهده بود. چرا که اگر به دنبال تطبیق الگو بود قطعا قادر به رقابت با SGD که ساختارها را پیدا میکند ، نبود.
نتایج مربوط به داده های CIFAR-10 :
برای دیتاست CIFAR-10 نیز به صورت مشابه ۲۰۰۰ نرون در لایه مخفی در نظر گرفته شده است و ساختار شبکه تشکیل شده از ۳۰۷۲ و ۲۰۰۰ و ۱۰ نرون (نرون های لایه آخر) که این ساختار به کمک ترکیبی از الگوریتم زیستی و SGD یک بار آموزش دیده است و بار دیگه کل ساختار به کمک SGD آموزش دیده شده است. در شکل زیر نتایج مربوط به فرآیند Train و Test این الگوریتم آورده شده است :
برای SGD نتایج تا ۱۰۰ ایپاک آموزش داده شده است ولی برای الگوریتم زیستی نتایج تا ۵۰۰ ایپاک ادامه پیدا کرده است تا بتوان به لحاظ خطا به SGD نزدیک شد. البته قابل ذکر است که حجم محاسبات در الگوریتم زیستی به خاطر ذات آن کمتر می باشد و ۵۰۰ ایپاک آن نسبت به ۵۰۰ ایپاک الگوریتم SGD زمان کمتری را میگیرد و به لحاظ زمانی برای محاسبه با دقت بیشتری را داشت. اما در هر صورت نشان داده شده است که باز هم الگوریتم می تواند به دقت کافی برسد.
قابل ذکر است که دیتاست CIFAR-10 مورد علاقه طراحان الگوریتم های زیستی نیست و عموما کمتر دیده می شود در حالی که در این مقاله نتایج مربوط به آن آورده شده است.
با وجود همه نتایج اما به نظر می رسد الگوریتم های زیستی هنوز مسیر درازی را در پیش دارند. به عنوان مثال این مقاله به سوالات زیر پاسخ نداده است :
· آیا برای بهینه ساز Adam نیز نتایج به همین شکل است و الگوریتم زیستی می تواند به رقابت با Adam بپردازد ؟
· آیا برای تعداد لایه های بیشتر این اتفاق تکرار می شود ؟
· برای سایر Task ها چطور ؟ آیا الگوریتم زیستی قادر به رقابت با بهینه سازهای دیگر خواهد بود؟
در این مقاله تلاش شده است تا با الهام بخشی از نحوه یادگیری حیوانات فرآیند آموزش را کمی متفاوت تر کند. الگوریتم زیستی پیشنهاد شده به صورت Unsupervised آموزش می بیند چنانچه یادگیری حیوانات نیز بدون استفاده از Label می باشد. این الگوریتم پیشنهادی مربوط به Task خاصی نیست و برای آن که یک Task خاص مثل طبقه بندی را انجام دهد کافی است تا یک یا چند لایه Fully Connected اضافه گردد و به کمک SGD و Backpropagation آموزش ببیند. در نهایت نیز نشان داده شده که برای Task های خاص و ساده مثل طبقه بندی MNIST و CIFAR-10 نتایج میتواند به شبکه ای معادل که تنها با SGD آموزش دیده است نزدیک شود.