این روزها بیشترین اخبار حوزه تکنولوژی در مورد ساخت کلاسترهای هوش مصنوعی در شرکتهای بزرگ و کشورهای توسعه یافته با هزینههای زیاد است که به توسعه نرم افزارهای که باعث تغییر رویه زندگی روزمره ما میشود، کمک میکند. سیستمهای مانند: اتومبیلهای خودران، Chatbot ها، رباتها، دستیارهای خانگی و بسیاری موارد دیگر که مدیون پیشرفتهای است که در سالهای اخیر در حوزه یادگیری عمیق داشته ایم.
اگر بخواهیم در یک کلام ساده یادگیری عمیق را تعریف کنیم، میتوانیم بگویم که: یادگیری عمیق به شبکههای عصبی بزرگ و عمیق گفته میشود.
شبکههای عصبی یا neural networks که در شکل زیر به نمایش درآمده است را معمولا یک گراف غیرچرخه ای جهت دار یا directed acyclic graph میگویند. همانطور که در شکل زیر میبینید شبکههای عصبی به طور معمول از سه بخش مختلف تشکیل شدهاند.
لایه ورودی:
لایه ورودی دادههای خام را از محیط خارجی دریافت میکند و به شبکه اعمال میکند. به زبان سادهتر میتوان گفت این لایه وظیفه انتقال اطلاعات به لایه بعدی را دارد. هر نرون (neuron) در این لایه با یک ویژگی (feature) متناظر است.
لایههای پنهان:
در واقع لایههای پنهان جایی هستند که پردازش اصلی بر روی دادهها انجام میشود. هر نرون در این لایه دارای یک تابع فعال سازی(activation function) است که به طور مجموع میتواند باعث محاسبات غیر خطی در این لایه شود، همچنین هر کدام از این نرونها داری وزن و بایاس نیز هستند. تعداد لایههای پنهان هر شبکه و همچنین تابع فعال سازی آن جزو پارامترهای است که در دقت خروجی تاثیر مستقیم دارد. انتخاب این پارامترها بسیار مهم و معمولا با سعی و خطا بدست میآید، البته راهکارهای بهتری نیز برای بدست آوردن مقدار مناسب برای این پارامترها نیز وجود دارد.
لایه خروجی:
لایه خروجی نیز بر اساس نوع وظیفه شبکه عصبی که دستهبندی باید انجام دهد یا پیشبینی خروجی مورد نظر را تولید میکند. عملا میتوان گفت که نتیجه پردازشهای لایه پنهان را تولید میکند. تعداد نرونهای این لایه بسته به نوع وظیفه شبکه عصبی دارد. به طور معمول در این لایه از توابع فعال سازی مانند softmax ، linear و یا sigmoid استفاده میشود.
تاریخچه شبکه عصبی
موضوع شبکههای عصبی، یک موضوع تازه در دهه اخیر نیست و ایده اولیه آن از مغز انسان الهام گرفته شده است و برای اولین بار در سال 1943 دو دانشمند به نامهای Warren McCulloch و Walter Pitts یک مدل ریاضی از نرون بیولوژیکی را معرفی کردند (لینک مقاله) که میتوانست رفتار نرونها را با منطق دودویی شبیه سازی کند که ایده اصلی ساخت نرون های مصنوعی از این مقاله به وجود آمد، در ادامه رزنبلانت در سال 1958 الگوریتم پرسپترون را معرفی کرد(لینک مقاله) که عملا اولین شبکه عصبی با قابلیت یادگیری بود که توانایی دسته بندی دادههای غیر خطی را داشت.
این پیشرفت ها در طول زمان به دلیل نبود زیر ساختهای مناسب مانند دادههای زیاد و سختافزارهای قوی سرعت کمتری داشند. این پیشرفتها تا سال دهه 90 میلادی که یان لیکان با استفاده از شبکههای عصبی کانولوشنی به تشخیص دست نوشتهها پرداخت که باعث تغییر راه در روشهای پردازش تصویر شد، ادامه داشت و البته این پیشرفتها همچنان ادامه دارد.
اما چرا یادگیری عمیق به این سرعت در دهه اخیر پیشرفت چشمگیری داشت، به زبان ساده وجود دادههای زیاد و همچنین سختافزارهای قوی که باعث افزایش سرعت در پردازش شدند باعث شده است که ما روز به روز در این حوزه شاهد مدلهای جدیدتر و قویتری باشیم. در اینجا یک نمودار جالب از رابطه بین حجم دادهها و پرفورمنس مدلها را نشان میدهیم که توسط Andrew NG در یکی از فیلمهای آموزشی آن را توضیح میدهد.
همانطور که در نمودار بالا مشخص است، زمانی که حجم دادههای کم است الگوریتمهای کلاسیک یادگیری ماشین عملکرد بهتری دارند، در مقابل زمانی که حجم دادهها رو به افزایش است شبکههای عمیق کارایی بهتری دارند و دلیل آن وجود پارامترهای بیشتر برای یادگیری است که باعث میشود الگوهای غیر خطی را بهتر درک و یاد بگیرند.
الگوریتم های کلاسیک یادگیری عمیق
در اینبخش الگوریتمهای کلاسیک حوزه یادگیری عمیق را به اختصار توضیح میدهیم:
Convolutional Neural Network
به زبان فارسی شبکههای عصبی پیچشی یا به اختصار CNN یکی از انواع شبکههای عصبی مصنوعی پیشخور (feed-forward artificail neural network) است که در آن الگوی اتصال بین نورونها از سیستم قشر بینایی انسان الهام گرفته شده است. در قشر بینایی انسان، بخش ابتدای آن که به V1 معروف است وظیفه تشخیص لبهها را دارد. در بخش دوم آن به نام V2 ، لبههای که در بخش قبلی شناسایی شدهاند را با یکدیگر ترکیب کرده تا ترکیبات ساده مانند: جهتها، فرکانسهای مکانی و رنگ را استخراج کند. بخش تصویری که به V4 معروف است ترکیبات پیچیدهتری را استخراج میکند و در نهایت تمام ویژگیهای بصری پردازش شده به یک واحد منطقی نهای به نام inferior temporal gyrus یا به اختصار IT جهت تشخیص اشیاء ارسال میشود. در نوع خاصی از شبکههای عصبی پیچشی یک میانبر بین بخشهای مشابه به V1 و V4 در مغز قرار میگیرد که به Residual Net معروف هستند. با این ویژگی که در شبکهها ایجاد میشود، ویژگیهای لایههای قبلی به لایههای جلوتر نیز ارسال میشود.
یک شبیه سازی از بخش بینایی مغز (لینک مقاله)
Convolution
عملیات کانولوشن یک عملیات ریاضی است که بین دو ماتریس اتفاق میافتد و لایههای کانولوشنی در واقع یک ماتریس با ابعاد ثابت است که به آن فیلتر و یا کرنل(Kernel) نیز گفته میشود. این فیلتر عملیات کانوال را بر روی ماتریسی که نماینده تصویر ورودی است انجام میدهد و خروجی آن محاسبه ضرب هر عنصور مجود در ماتریس اصلی (kernel – filtre) و مقادیر تصویر اصلی است.
Recurrent Neural Network
مدلهای ترتیبی معمولا برای تغییر دنبالهای از ورودیها به دنبالهای از خروجیها در یک فضای دیگر مورد استفاده قرار میگیرد. مدلهای بازگشتی یا به اختصار RNN یک مدل بهینه و طراحی شده برای انجام چنین مواردی مانند: ترجمه ماشینی، شناسایی صحبت و شناسایی دستخط.
شبکههای بازگشتی برای پردازش یک توالی طولانی از دادهها طراحی شده است و در هر لحظه یک المان از توالی بزرگ را پردازش میکند. بعد از اتمام محاسبات، واحد مورد پردازش به روز رسانی میشود و به مرحله بعدی زمانی منتقل میشود.
اما یکی از ایراداتی که ممکن است این مدل داشته باشید، این است که ممکن است وابستگیهای طولانی مدت را فراموش کند. برای مثال فرض کنید در ابتدای یک پاراگراف نوشته شده است که ” علی به کار …” مدل RNN شروع به پردازش از اولین کلمه میکند و به جلو حرکت میکند و به پاراگراف بعدی میرسد. در ابتدای پارگراف بعدی نوشته شده ” او به …” اگر مدل اسم کاراکتر را فراموش کرده باشد ما هیچ وقت متوجه نخواهیم شد. برای حل این مشکل محققان یک نرون خاص طراحی کردهاند که قابلیت به خاطر سپردن طولانی مدت موضوعات را دارد که به آن Long-short term memory یا به اختصار LSTM گفته میشود.
Autoencodrs
همانطور که در مقاله مربوطه به شبکههای خودرمزنگار به طور کامل توضیح داده شده است(میتوانید این مقاله را از این لینک بخوانید) برخلاف مدلهای دیگر یک مدل یادگیری بدون نظارت است(میتوانید انواع روشهای یادگیری را از این لینک بخوانید) اگر بخواهیم به طور خلاصه روش کار شبکههای رمزنگار را بیان کنیم، باید بگویم این مدلها در ابتدا با استفاده از شبکه های رمزنگار ویژگیهای اصلی دادهها را یادگرفته و استخراج میکنند و در طرف دیگر یک شبکه رمزگشا سعی میکند از ویژگیهای استخراج شده در بخش اول داده اصلی را بازسازی کند.
Generative Adversarial Network
شبکههای مولد تخاصمی یا به اختصار GAN ها یک مدلهای مولد است و قابلیت تولید نمونههای جدید از دادهها را بعد از یادگیری دارد. به زبان ساده میتوان گفت که مدلهای مولد از دو مدل در مقابل یکدیگر قرار گرفتهاند و یک بازی zero-sum را دنبال میکند.(به این معنی که یکی از مدلها سعی میکند که خطا را کاهش بدهد و مدل دیگر تلاش میکند که خطا را افزایش دهد.)
همانطور که در تصویر بالا مشخص است، مدل مولد سعی میکند با استفاده از یک نویز تصادفی، تصاویری را تولید کند و مدل Discriminator سعی در تشخیص تصاویر تولید شده بر اساس این که آیا این تصاویر واقعی هستند یا خیر دارد.