چند ساله که بحث یادگیری عمیق در ایران به شدت فراگیر شده و حتی افرادی که قبل از این میونه ی خوبی با یادگیری ماشین نداشتند رو هم به خودش جلب کرده. نتایجی که یادگیری عمیق به دست می ده نتایج بسیار حیرت آوری هستند. به طوری که در برخی موارد، علت به وجود اومدن این نتایج هنوز به طور دقیق مشخص نیست.(این پست به همین نکته در شبکه های بازگشتی پرداخته).
برای توصیف علت به وجود اومدن این نتایج شگفت انگیز تلاش های نظری و عملی زیادی انجام شده. در حوزه ی عملی بسیاری از افراد سعی کردن با مصور سازی لایه های میانی شبکه های عصبی یا مصور سازی اکتیویشن نورون ها تا حدودی این کار سخت رو انجام بدن. از طرف دیگه افرادی سعی کردن با استفاده از تفسیر مبتنی بر جبر خطی و استفاده از توپولوژی -که مغز جبر خطی و تبدیلات فضایی هست- کارکرد این شبکه ها رو تفسیرکنن. این پست واقعا عالی به صورت مصور این کار رو به خوبی انجام داده.
اما واقعا چه چیزی سد راه فهم کامل مکانیزم یادگیری عمیق میشه؟
به عقیده من یکی از چیز هایی که باید قبل از هر تلاشی در این زمینه صورت بگیره اینه که مرز بین عمیق بودن و عمیق نبودن روشن بشه.
به طور کلی دو تعریف اصلی برای یادگیری عمیق وجود داره. تعریف اول دارای جامعیت کم تر اما خوش فهم تر،جذاب تر و کاربردی تره و میشه گفت رویکرد پایین به بالا داره. در مقابل، تعریف دوم جامعیت بسیاری داره تا جایی که میتونه خیلی از روش های یادگیری فعلی رو هم عمیق کنه! اما شاید شدت کاربردی بودنش کم تر باشه. روش دوم به شدت رویکرد بالا به پایین داره.
تعریف سومی هم هست که کمی گنگ به نظر میرسه اما در این نوشته سعی کردم توضیحش بدم. البته خیلی سخته چیزی که خودت نفهمیدی رو برای کسی توضیح بدی!
پیشنهاد می کنم قبل از مطالعه ی نوشته فعلی، این پست رو بخونید.
اشکالی که این تعریف داره اینه که تنها در مورد شبکه عصبی انطباق کامل داره. دلیلش هم اینه که ایجاد کننده ی -یا ایجاد کنندگان- این تعریف بیشتر روی شبکه عصبی کار کردن و طبیعتا سعی کردن از مدل های عمیق مبتنی بر شبکه عصبی به یک تعریف جامع از یادگیری عمیق برسن و همون طور که گفتم یه جورایی روند شکل گیریش پایین به بالا بوده. یاشوا بنژیو (Yoshua Bengio) در این ویدیو یک توصیف خیلی روشنی از تعریف اول ارایه میده.
طبق این تعریف، زمانی به یک تکنیک یادگیری ماشین ، صفت "عمیق" رو اضافه میکنیم که اون تکنیک قابلیت ایجاد بازنمایی های متعدد و لایه لایه رو داشته باشه. همین نکته نشون میده که این تعریف بیشتر به درد شبکه عصبی میخوره چون اساسا مفهومی به اسم لایه در سایر تکنیک های یادگیری ماشین موضوعیت چندانی نداره.
تصویر زیر یه مثال عینی از به وجود اومدن بازنمایی ها در شبکه عصبی رو نشون میده. البته همیشه بازنمایی ها برای انسان قابل درک نیستن. مهم اینه که نتیجه ی نهایی اون ها درست باشه. اما به هر حال طبق تعریف اول ما مطمئن هستیم در لایه های مختلف شبکه عصبی عمیق این بازنمایی ها وجود دارن.
حتما با آقای یورگن اشمیدهابر ( Jürgen Schmidhuber ) آشنا هستید. اون یکی از چهار نفر مشهور یادگیری عمیقه. اما با بقیه تفاوت های جدی داره. تفاوت جدی اون با بقیه اینه که سعی کرده نگاه بالا به پایین خودشو حفط کنه. ایشون مقاله ای در سال ۲۰۱۴ منتشر کرده و در اون تاریخچه، چیستی و شمای کلی از وضعیت یادگیری عمیق رو ارائه کرده.(لینک مقاله در arxiv)
آقای اشمید هابر در مقاله برای توضیح چیستی یادگیری عمیق به یک مفهوم بسیار قدیمی اشاره میکنه: مسیر تخصیص اعتبار (Credit Assignment Path: CAP)
قبل ازادامه مطلب اجازه بدید یه نکته خنده دار بگم. مفهوم CAP توسط ماروین مینسکی(در سال ۱۹۶۱) پایه گذاری شده. این آقا یکی از کسانیه که با کتاب معروفش ده دوازده سال شبکه عصبی رو ناک اوت کرد! حالا همین مفهوم داره برای توضیح مفهومی استفاده میشه که شبکه عصبی بهترین وسیله برای نشون دادن قدرتشه!
برای این که یه ماشین بتونه چیزی یاد بگیره باید دو شرط اساسی درون اون وجود داشته باشه.
مثلا در شبکه عصبی، ما کلی وزن داریم که با تغییر اون ها رفتار سیستم عوض میشه. از طرف دیگه الگوریتمی به نام گرادیان نزولی (=شیو نزولی) هم وجود داره که متناسب با داده ی آموزش، اون قدر وزن ها رو ذره ذره تغییر میده تا به نقطه ایده آل برسه.
خوب حالا اگه عملکرد این اجزاء ، به هم وابسته باشن یه مسیر تولید میشه. مسیری که در اون موارد زیر توصیف شده:
۱) اجزاء موثر
۲) چگونگی وابستگی اون ها به همدیگه
۳) میزان نقش اون ها در عملکرد ماشین
نکته ی جالب اینه که ماشین کم ترین نقش رو موارد یک و دو ایفا می کنه و در عوض در مورد سوم انسان تقریبا کار خاصی انجام نمیده. در حقیقت تفاوت بین مدل های مختلف یادگیری ماشین تفاوت در انجام موارد یک و دو هست و مورد سوم رو ماشین انجام می ده.
در یک جمله میشه گفت که مفهوم یادگیری در یادگیری ماشین همون تخصیص اعتبار هست.
خوب حالا اگه این مسیر طولانی باشه (مثلا بزرگ تر از ۱۰) میشه گفت که اون الگوریتم، یه الگوریتم عمیقه.
مثلا توی یه پرسپترون چهار لایه طول مسیر تخصیص اعتبار ۳ هست.این مسیر شامل ۱) وزن های انتقال از لایه ورودی به به لایه مخفی اول ۲) وزن های انتقال از لایه مخفی اول به لایه مخفی دوم و ۳) وزن های انتقال از لایه مخفی دوم به لایه خروجی میشه. پس حداکثر مسیر وابستگی بین متغیرها(=پارامترها)ی مدل عدد ۳ هست.
این تعریف در کتاب معروف یادگیری عمیق و در همون صفحات اول مطرح شده. بیان کتاب کمی مبهم و غیر دقیق به نظر میرسه. تمرکز این تعریف بر روی نقش القای مفاهیم به کامپیوتره. میشه به جای کلمه القا از کلماتی مثل تزریق، ورود و حتی یاد دادن مفاهیم استفاده کرد. در گذشته بیشتر بار هوش مصنوعی بر روی دوش طراح هوش مصنوعی بود. زمانی که سیستم های قانون محور و سیستم های خبره ی دارای موتور استنتاج، دستاورد های غرور آمیز هوش مصنوعی بود. در اون زمان، این طراح هوش مصنوعی بود که باید مجموعه ی عظیمی از قوانین و حقایق رو به ماشین میداد و ماشین تنها زحمت اجرای الگوریتم استنتاج رو به عهده داشت.
حالا سوال این جا است که مفاهیم چه جوری میتونن یه سلسله مراتب ایجاد کنن؟ وقتی از سلسله مراتب حرف میزنیم یعنی داریم از یه درخت حرف میزنیم. درختی که مفاهیم سطح پایین تر ذیل مفاهیم سطح بالاتر قرار دارن. منظور از مفاهیم حقایقی هست که ماشین از داده ها بیرون میکشه. پس ماشین باید یک سری حقایق سطح پایین رو از دیتا استخراج کنه و از روی اون مفهوم به مفاهیم سطح بالا تر و قوانین عمومی تر برسه.
اگه مفهوم رو خروجی یک بخش از مدل یادگیری ماشین فرض کنیم. این تعریف بیشتر شبیه به تعریف اول (بازنمایی های پی در پی) میشه. اما اگه مفهوم رو پارامترهای مدل فرض کنیم بیشتر شبیه تعریف دوم میشه. به هر حال تعریف جالبیه و میشه خیلی در موردش صحبت کرد.
شاید این ذهنیت برای شما هم پیش اومده باشه که درخت تصمیم با این عمق زیادش!! حتما یه مدل یادگیری عمیقه و بیچاره تا الان گمنام بوده. اما طبق هیچ کدوم ار تعاریف مطرح شده، درخت تصمیم، عمیق نیست :(
طبق تعریف اول ما نیاز به بازنمایی های پی در پی از داده احتیاج داریم. اما چنین چیزی توی درخت تصمیم وجود نداره .طبق تعریف دوم هم ما نیاز به مسیر تخصیص اعتبار داریم. یعنی یک وابستگی بین پارامترهای مدل و نه ویژگی های داده. و میبینیم که درخت تصمیم عملا چنین چیزی نداره. در واقع درخت تصمیم ساختار خودش رو یادگیری میکنه و نه ارتباط بین پارامترهاشو.
طبق تعریف اول میشه تا حد قابل قبولی یادگیری عمیق رو با روش های معمولی شبیه سازی کرد. یه موضوع جالب در مورد همه ی الگوریتم های یادگیری ماشین وجود داره:
تصمیم های غلط ماشین یادگیرنده هم الگو دارن.
خیلی جالبه نه؟ شاید این موضوع جالب باشه اما چندان عجیب نیست. ماشینی که توانایی یادگیری از روی داده رو داره درحقیقت توانایی بازنمایی و یا تشخیص یک الگو رو داره. خطای ماشین ناشی از تفاوت الگوی واقعی با الگوی یادگیری شده به وسیله ماشینه. پس ماشین همواره زندانی در یک الگوی خاصه و فقط میتونه الگوی خودشو تغییر بده. اما هیچ وقت نمیتونه بدون الگو رفتار کنه. اینم یه جور جبر و اختیار همزمانه!! در نتیجه میبینیم که جمله بالا چندان عجیب نیست.
حالا با استفاده از همین قاعده میشه یادگیری عمیق رو با یادگیری سطحی شبیه سازی کرد. کافیه شما بعد از خروجی گرفتن از ماشین یادگیری شماره یک خروجی های اون رو به عنوان ویژگی به ماشین دو بدید. به همین راحتی شما تونستید یادگیری عمیق راه بندازید!!
البته اشکال این روش اینه که بازنمایی داخلی که همون خروجی ماشین قبل هست به وسیله ماشین تولید نشده و این ممکنه کار رو خراب کنه. اگه این بازنمایی به وسیله خود ماشین تولید بشه قطعا متناسب با مساله و دیتا تغییراتی خواهد داشت. به هر حال با این روش قرار نیست به همه ی قدرت یادگیری عمیق دست پیدا کنیم.
همچین ادعایی طبق تعریف دوم اصلا عجیب و غریب به نظر نمیاد. مثلا توی این مقاله:
این مقاله سعی داره یه راه حل جایگزین برای یادگیری عمیق ارائه بده. به نظر می رسه نویسنده های مقاله بیشتر پیرو تعریف اول از یادگیری عمیق بودن. اونا به جای قرار دادن لایه ایِ پرسپترون ها، اِسنمبِلی از درخت ها (همون جنگل) رو قرار دادن. به همین راحتی! حتی این روش قابلیت ایجاد بازنمایی های داخلی رو هم داره!
از توجهتون ممنونم