ما در طول روز اغلب با ماشینهایی مواجه هستیم که برای کاری که برنامهریزی شدهاند، به روشی مکانیکی آن را انجام میدهند. یادگیری عمیق (Deep learning) یکی از شاخههای هوش مصنوعی و یادگیری ماشین است که در آن ماشین یاد میگیرد وظایفی را انجام دهد که به صراحت برای تمامی شرایط، برنامهریزی نشده و عملکرد ماشین به صورت خودکار از طریق تجربه در انجام این وظیفه، بهبود مییابد. به عبارت سادهتر، این ماشینها مانند ما انسانها میتوانند از تجربه درس بگیرند و در یک محیط کنترل شده رفتار خود را تغییر دهند تا کارایی بیشتری داشته باشند.
یادگیری ماشین با روشهای متفاوتی قابل پیادهسازی و اجرا است که از سه روش اصلی آن میتوان به یادگیری با نظارت، یادگیری بدون نظارت و یادگیری تقویتی نام برد. دیپ لرنینگ، به مدلهای یادگیری ماشین اشاره دارد که از لایههای متعددی از الگوریتمهای پردازش اطلاعات استفاده میکند تا ویژگیهای پیچیدهای از دادهها را استخراج و برای طبقهبندی، پیشبینی و تصمیمگیری بکار گیرد.
دیپ لرنینگ (یادگیری عمیق) با الگوبرداری از ساختار مغز انسان، توانایی پردازش اطلاعات پیچیده را دارد و در زمینههایی مثل تشخیص تصویر، پردازش زبان طبیعی، تشخیص گفتار و بسیاری زمینههای دیگر به کار میرود. برای درک بهتر مفهوم دیپ لرنینگ، باید ابتدا با روشهای مختلف یادگیری آشنا شویم. اگر مقالهی پیشین هامیا ژورنال، با عنوان ماشین لرنینگ (یادگیری ماشین) را خوانده باشید، بدون شک با روشهای یادگیری هوش مصنوعی آشنا هستید. انواع مختلف یادگیری در ماشین لرنینگ و دیپ لرنینگ یکسان است. تفاوتی که وجود دارد این است که شبکههای یادگیری عمیق، متفاوت با شبکههای یادگیری ماشین است.
فهرست مطالب
شبکه عصبی
شبکههای عصبی مصنوعی (ANN: Artificial Neural Network) یک شبیهسازی از ساختار مغز انسان است. در این شبکهها، پردازش اطلاعات، همانند مغز انسان در ساختارهای ساده با تعداد زیاد، به نام نورونها انجام میگیرد. این نورونها به هم متصلاند و هر اتصال، وزن مربوط به خود را دارد که در یک شبکه عصبی، این وزنها در سیگنالی که منتقل میشود ضرب میشوند و در نهایت جمع وزندار سیگنالهای ورودی توسط نورونها از یک تابع فعالساز عبور کرده تا سیگنال خروجی را ایجاد نماید. الگوی اتصال بین نورونهای مختلف آن شبکه را معماری شبکه و روش تعیین وزنها بر اتصالات را الگوریتم آموزشی گویند که با تنظیم پیدرپی وزنها بین نورونها بر اساس ورودی و خروجی دادههای آموزشی که توسط شبکههای عصبی محاسبه شدهاند، به مرور زمان تولید میشود تا پیشبینی دقیقتری صورت گیرد.
شناختهشدهترین معماری یک شبکه عصبی که از آن به عنوان شبکه عصبی چند لایه میتوان نام برد، از 3 لایه تشکیل شده است که عبارتاند از: لایه ورودی، لایه پنهان و لایه خروجی. لایه ورودی اطلاعات را دریافت میکند. یک یا چند لایه پنهان عمل پردازش را انجام و لایه خروجی نتایج را نشان میدهد.
یادگیری با نظارت (Supervised Learning)
رایجترین شکل یادگیری ماشین، یادگیری با نظارت است. در حالت یادگیری با نظارت، سیستم برای هر نمونه آموزشی، یادگیری را بر اساس یک اِلمان دوتایی از ورودی و برچسب خروجی، مسئله را فرا میگیرد. شبکههای از نوع یادگیری نظارت شده به مجموعه داده آموزشی نیاز دارند که نمونههایی را برای ورودی و همچنین پاسخهای متناظر با ورودی که هدف دستیابی به آن پاسخها است را پوشش میدهد. به عبارت دیگر، سیستم آموزش میبیند که برای ورودی جدید بتواند خروجی درست را بر اساس آنچه تاکنون از دادههای آموزشی فراگرفته است، پیشبینی کند. در یادگیری نظارتی اگر دادههای مسئله جهت یادگیری به صورت گسسته باشند، این مسئله طبقهبندی (دستهبندی) و اگر مقادیر دادهها به صورت پیوسته باشند به آن رگرسیون گویند.
الگوریتمهای آموزش شبکه
هدف اصلی در فرایند آموزش شبکه، یافتن وزنهایی است که بتواند از دادههای ورودی به دادهی خروجی صحیح برسد؛ بنابراین شبکه، برای هر بردار ورودی هنگام آموزش، مقادیر خروجی را تولید میکند و آن را با مقدار درست مقایسه میکند تا مشخص شود آیا خطایی رخداده است یا خیر. در این شبکه اگر خطایی رخ ندهد وزنها تغییر نمیکند. در غیر این صورت در طی آموزش، وزنها تغییر میکند و آموزش تا زمانی که شبکه بدون خطا شود، تکرار خواهد شد.
الگوریتم گرادیان کاهشی
در این الگوریتم، مقدار پیشبینی شده شبکه عصبی با خروجی مورد انتظار ما مقایسه میشود و مقدار خطا با استفاده از یک تابع به نام تابع هزینه یا خطا محاسبه میشود. این توابع با استفاده از الگوریتمهای مختلف بهینهسازی در طی فرایند آموزش با استفاده از تغییر وزنها به حداقل مقدار خود میرسد. الگوریتم گرادیان کاهشی، یک روش بهینهسازی مبتنی بر تکرار بوده و با تغییر در وزنهای داخلی شبکه و بروز کردن تدریجی آنها در جهت به حداقل رساندن تابع خطا حرکت میکند. اندازه گام در هر تکرارِ الگوریتم را نرخ یادگیری تعیین میکند. فرایند تکرار تا جایی که در تابع خطا تغییری مشاهده نشود (به آن همگرایی گفته میشود)، انجام میگیرد.
الگوریتم پس انتشار خطا
این الگوریتم از قاعده زنجیرهای حساب دیفرانسیل استفاده میکند و گرادیان خطا را در مسیرهای مختلف از یک گره تا خروجی محاسبه میکند. در این روش، تابع خطا در کل شبکه، یک لایه در واحد زمان، به عقب بازگشت داده میشود و وزنها مطابق با مقداری که در خطا مشارکت داشتهاند بهروزرسانی خواهند شد. این فرآیند برای همه نمونهها در دادههای آموزش تکرار خواهد شد. یک دور بهروزرسانی شبکه برای مجموعه داده آموزشی، epoch نامیده میشود. یک شبکه ممکن است برای دهها صدها یا هزاران epoch آموزش ببیند.
تقسیمبندی دادهها
سنجش میزان دقت مدل با تقسیم نمونههای آموزشی به چندین بخش انجام میشود. با تقسیمبندی دادهها، ابتدا آموزش را روی بخشی از دادهها انجام داده، سپس برای سنجش میزان کارایی مدل و قابلیت تعمیمدهی آن از دادههای آزمایشی استفاده میکنیم. تعمیمدهی، نشان دهنده میزان عملکرد مدل، در برخورد با دادههایی است که تاکنون آنها را در فرایند آموزش مشاهده نکرده است.
- مجموعه آموزشی (Train): به طور معمول، بیشترین تعداد دادهها در این دسته قرار میگیرد و برای یافتن پارامترهای مدل، مورد استفاده قرار میگیرد. مجموعه داده آموزشی، رابطه اساسی بین دادهها و برچسبهای آن را به بهترین وجه ممکن توضیح میدهد.
- مجموعه آزمایشی (Test): اندازهگیری عملکرد یک مدل را بر اساس توانایی مدل در پیشبینی دادههایی که در فرایند یادگیری نقشی نداشته است میسنجند. مجموعه آزمایشی همان دادههای دیده نشده در فرایند یادگیری هستند. این مجموعه، کارایی مدل نهایی را میسنجد و اگر مدلی عملکرد خوبی در مجموعه آموزشی داشته باشد و همچنین متناسب با مجموعه آزمایشی باشد، (برچسب درست را برای تعداد زیادی از دادههای ورودی پنهان، پیشبینی کند) حداقل بیش برازش صورت گرفته است. لازم به ذکر است که مجموعه آزمایشی معمولاً فقط یک بار به محض مشخص شدن کامل پارامترها و ابر پارامترهای مدل برای ارزیابی عملکرد تعمیمدهی مدل استفاده میشود. با این حال برای تقریب عملکرد پیشبینی یک مدل در طول آموزش، از یک مجموعه اعتبارسنجی استفاده میشود.
- مجموعه اعتبارسنجی (Validation): در ارزیابی انواع مختلف مدلها و الگوریتمها برای مسئله مورد نظر از مجموعه اعتبارسنجی استفاده میشود. از این دادهها برای تنظیم ابر پارامترها و جلوگیری از بیش برازش مدل استفاده میشود تا بهترین مدل انتخاب شود.
انواع شبکههای عصبی
RNN (recurrent neural network)
در یک شبکه عصبی سنتی، فرض ما بر این است که تمام ورودیها نسبت به یکدیگر مستقل هستند؛ اما برای بسیاری از کاربردها و وظایف، این فرض سادهی ما صادق نیست. به عبارت دقیقتر، اگر بخواهیم کلمه بعدی در یک جمله را پیشبینی کنیم، لازم است بدانیم کلمات قبل از آن چه کلماتی بودهاند. به همین دلیل RNNها به بازگشتی معروف شدهاند؛ چرا که یک عملیات یکسان را بر روی تمامی المانهای یک دنباله (سری) از ورودیها اعمال میکنند و در این حالت خروجی تولید شده وابسته به محاسبات قبلی خواهد بود. یک معادلهی بازگشتی به صورت زیر قابل تعریف است:
(ht=⨍(ht-1),xt
در این رابطه، ht برداری از مقادیر به نام حالت شبکه داخلی در زمان t و xt ورودی شبکه در زمان t است. برخلاف شبکههای معمولی که در آن حالت خروجی فقط به ورودی فعلی و وزنهای شبکه بستگی دارند، در این شبکهها خروجی، هم به ورودی فعلی و هم به حالت قبلی بستگی دارد.
LSTM (Long short-term memory)
شبکههای حافظه طولانی کوتاه مدت که به اختصار از آن به عنوان LSTM گفته میشود، نوعی خاصی از RNNها هستند. LSTM سه گیت ورودی دارد که گیت ورودی اطلاعات از ورودی میگیرد، گیت خروجی اطلاعات را به خروجی میدهد و گیت فراموشی اطلاعات را از حافظه پاک میکند. در این شبکه ابتدا مقدار یک سلول قبلی از طریق یک گیت فراموشی منتقل میشود که مقدار حالت قبلی را در بازه 0 تا 1 ضرب اسکالر میکند. اگر حاصل به دست آمده نزدیک به 1 باشد، منجر به عبور مقدار حالت سلول قبلی یا به یاد آوردن حالت قبلی میشود. در صورت نزدیکی این مقدار به صفر، منجر به مسدود شدن حالت سلول قبلی یا فراموش کردن حالت پیشین میشود. در مرحله بعدی، گیت ورودی، به سادگی خروجی تغییر یافته، گیت فراموشی را مجدداً بازنویسی میکند و سرانجام، گیت خروجی، اطلاعات نهایی گیت ورودی را میخواند.
MLP (multilayer perceptron)
شبکه عصبی چند لایه پرسپترون (MLP: multilayer perceptron) به عنوان یکی از قدیمیترین مدلهای یادگیری عمیق محسوب میشود. شبکه عصبی پرسپترون تک لایه همانند شکل شبکه عصبی، تعداد مشخصی داده ورودی را به عنوان ورودی دریافت میکند. با داشتن مجموعهای از وزنها (W) و مقدار بایاس (Bias) شبکه عصبی پرسپترون تک لایه، خروجی متناسب با داده ورودی و وزنها تولید میکند. در نهایت خروجی تولید شده وارد یک تابع خاص به نام تابع فعالسازی (Activation Function) میشود. مدل پرسپترون تک لایه، مدل سادهای است که صرفاً میتواند دادهها را در دو کلاس قرار دهد و دستهبندی دادهها را به صورت خطی انجام دهد. به دلیل چنین محدودیتی، نمیتوان از این مدل در مسائل پیچیدهتر استفاده کرد. بنابراین با اضافه کردن لایههای بیشتر به این مدل میتوان خروجیهای پیچیدهتر را تولید کرد.
شبکه پرسپترون چند لایه از چند لایه متصل به هم تشکیل شده است که لایه نخست، ورودیهای شبکه را دریافت میکند و با اعمال عملیات محاسباتی، خروجی را به لایه بعدی خود میفرستد. نورونهای لایههای پنهان با یک سری مقادیر (وزنهای شبکه) به یکدیگر متصل هستند که میزان اهمیت نورون را برای پردازش دادهها مشخص میکند. هر چقدر وزنها بیشتر باشند، تأثیر نورون متصل به آن وزن در محاسبه بیشتر است و در پی این اتفاق، آن نورون بر روی محاسبه خروجی مسئله تأثیر بیشتری خواهد گذاشت. از طرف دیگر، اگر وزن یک نورون خیلی کوچک باشد، تأثیر داده آن نورون در محاسبات بعدی شبکه کمتر خواهد بود و در نتیجه تغییرات چندانی در خروجی نهایی شبکه ایجاد نخواهد کرد. مقدار بایاس هر لایه نیز به نوعی مقدار حد آستانه خروجی یک نورون را مشخص میکند. چنانچه حاصل جمع ورودی یک نورون با بایاس از یک مقدار مشخص بیشتر شود، آن نورون یک مقدار خروجی تولید میکند در غیر این صورت مقدار نهایی حاصل شده آن نورون برابر با عدد ۰ خواهد بود. در نهایت، توابع فعالساز نیز تصمیم میگیرند چه نورونهایی در شبکه فعال باشند و خروجی کدام نورونها نادیده گرفته شوند.
CNN (convolutional neural network)
CNN مجموعهای از شبکههای عصبی است که در پردازش تصویر استفاده میشود. برخلاف سایر شبکههای عصبی که هر لایه به طور کامل به لایه بعدی متصل است، CNN از کرنل (kernel) برای انتقال اطلاعات بین لایهها استفاده میکند. CNN دارای نقشه ویژگی است که از ماتریسهای بزرگتر یا مساوی دو بعدی تشکیل شدهاند؛ در حالی که سایر شبکههای عصبی تنها از لایههای پنهان بین ورودی و خروجی تشکیل شدهاند که ماتریسهای تک بعدی هستند. CNN شامل یک لایه ورودی، یک لایه خروجی و یک لایه پنهان است که شامل چندین لایه کانولوشن، لایه ادغام (pooling layer)، لایه کاملا متصل (fully connected layers) و غیره است. از یک دید دیگر، شبکههای عصبی همگشتی از دو مرحله اصلی ساخته میشوند: مرحله استخراج ویژگی و مرحله طبقهبندی. لایه کانولوشن و ادغام، وظیفه استخراج ویژگیها را عهدهدار هستند. لایه کانولوشن مهمترین قسمت سازنده CNN بوده و همیشه بهعنوان اولین لایه استفاده میشود. وظیفه اصلی لایه کانولوشن، شناسایی ویژگیهای یافت شده در مناطق محلی تصویر ورودی بوده که این ویژگیها در کل مجموعه داده مشترک هستند. این شناسایی ویژگیها از طریق اعمال فیلترها منجر به تولید نقشه ویژگی میشود. لایه ادغام معمولاً به طور دورهای بین دو لایه متوالی همگشت استفاده میشود و وظیفه آن کاهش ابعاد نقشههای ویژگی است. این کار علاوه بر استخراج ویژگیهای مهم در نقشه ویژگی، با کاهش مقدار پارامترها، قدرت محاسباتی مورد نیاز برای پردازش دادهها را نیز کاهش میدهد. خروجی این لایهها وارد لایهی تماماً متصل میشود. این لایه در CNN مانند لایه مخفی یک MLP کار کرده و در انتهای CNN قرار میگیرند و طبقهبندی دادههای خروجی در آن اتفاق میافتد.
یادگیری پارامترهای شبکه توسط الگوریتم پسانتشار که بر اساس گرادیان کاهشی بود، صورت میگیرد. فاز اول انتشار جلورو میباشد، جایی که سیگنالها از ورودی شبکه به خروجی انتشار مییابند. در آخرین لایه، خروجی توسط تابع هزینه با مقدار دلخواه، مقایسه و برآورد خطا صورت میگیرد. در فاز دوم، مجددا از الگوریتم پسانتشار برای جبران این خطا استفاده میشود.
یادگیری بدون نظارت (Unsupervised Learning)
در این روش، دادههای آموزشی بدون برچسب هستند. الگوریتم، بدون داشتن اطلاعاتی از خروجی متناظر با دادههای ورودی، به صورت خودکار الگوهای مختلفی را در دادهها شناسایی میکند. به عبارت دیگر، در این نوع یادگیری، هدف سیستم تعیین خروجیها است. این عمل توسط خود الگوریتم از طریق تجزیه و تحلیل دادهها و شناسایی الگوهای پنهان و خاصی که در ساختار دادهها وجود دارد، انجام میشود. دو نوع از پرکاربردترین شبکهها در یادگیری بدون نظارت، Autoencoder و GAN است.
Autoencoder
در شبکههای عصبی که تاکنون بحث شده، دادههای برچسبدار برای مثالهای آموزشی ضروری و تنظیم دقیق الگوریتم پسانتشار مورد نیاز بودند، زیرا از این برچسبها برای تنظیم مجدد پارامترها استفاده میشد. یک شبکه عصبی خودرمزگذار با تنظیم مقادیر خروجی هدف برابر با مقادیر ورودی، پسانتشار را انجام میدهد. بدین ترتیب، شبکه خودرمزنگار یا Autoencoder برای کاهش اختلاف بین دادهها و بازسازی آن آموزش داده میشود (یعنی تفاوت بین بردار واقعی خروجی و بردار خروجی مورد انتظار؛ که در آن، خروجی مورد انتظار همان بردار ورودی است).
در این شبکه، ورودی به یک رمز در ابعاد پایینتر فشردهسازی شده و سپس خروجی حاصل از این بازنمایی بازسازی میشود. رمز، یک “خلاصه” یا “فشردهسازی” از ورودی است که بازنمایی فضای نهفته نیز نامیده میشود. همانطور که بیان شد، ایدهی پشت این شبکه عصبی، بازسازی دادههای ورودی با کمترین نویز ممکن میباشد.
یک خودرمزنگار به ترتیب از سه مؤلفه تشکیل شده است: رمزگذار (Encoder)، رمز (code) و رمزگشا (Decoder). رمزگذار ورودی را فشرده و رمز را تولید میکند، رمزگشا ورودی را بر اساس رمز، بازسازی میکند. رمزگذار و رمزگشا هر دو شبکه عصبی پیشخور هستند و در اکثر مواقع به صورت متقارن در ساختار خود رمزنگار قرار میگیرند.
ابتدا ورودی، از یک رمزگذار که شبکه عصبی مصنوعی کاملا متصل است، عبور کرده تا رمز را تولید کند. سپس، رمزگشا که ساختاری مشابه رمزگذار دارد و متقارن با آن میباشد، تنها با استفاده از رمز، خروجی را تولید میکند. هدف، بدست آوردن خروجی یکسان با ورودی داده شده به شبکه میباشد. اجزای رمزگذار و رمزگشا میتوانند از هر نوعی باشند. در سادهترین حالت، میتوان از یک شبکه عصبیِ تنها با یک لایه مخفی استفاده کرد. با این حال، نشان داده شده که شبکههای عمیقتر در مقایسه با انواع کمعمق خود قادر به بازنمایی بهتری هستند.
GAN (generative adversarial network)
در این شبکه ترکیبی از دو شبکه عصبی وجود دارد. یکی از این شبکهها مولد (Generator) و دیگری تمایزگر (Discriminator) نامیده میشود و یک رابطهی خصمانهای بین این دو شبکه وجود دارد. به زبان ساده، یکی از آنها برای ایجاد داده و دیگری برای تشخیص اینکه چه دادهایی واقعی و چه دادهایی جعلی میباشد آموزش میبیند. این دو بخش به صورت رقابتی با هم آموزش میبینند. مولد که یک جعل کننده است سعی میکند شبکه دوم را (که یک کارآگاه است که سعی میکند دادههای جعلی را از واقعی تشخیص دهد) فریب دهد و با هر تلاش ناموفق، با دریافت بازخورد از آن، میتواند به صورت بهتری از پس این کار برآید. به صورت خلاصه میتوان گفت، یکی تولید میکند و دیگری عیب جویی میکند و در کنار هم و در یک همکاری کامل، نتایج بسیار خوبی به دست میآورند.
GANها در زمینههای مختلفی مانند پردازش تصویر، سنتز متن به گفتار و حتی ایجاد موسیقی کاربرد دارند. این معماری توانسته نتایج بسیار خوبی در تولید دادههای مشابه دادههای واقعی ارائه دهد.
این شبکه دارای یک مولد (G) است که میتواند از توزیع داده (P) با تبدیل بردارهای نهفته از یک فضای پنهان با ابعاد پایین (Z)، به نمونهها در فضای داده با ابعاد بالاتر (x) نمونه تولید کند. معمولاً از بردارهای نهفته با استفاده از توزیع یکنواخت یا عادی از Z نمونهبرداری میشود. به منظور آموزش G، یک تمایزگر (D) آموزش داده میشود تا نمونههای واقعی را از نمونههای جعلی تولید شده توسط G، متمایز کند. بنابراین، تمایزگر مقدار 0 تا 1 را برمیگرداند که میتواند به عنوان احتمال اینکه نمونه ورودی x، یک نمونه واقعی از توزیع داده باشد تفسیر شود. در این پیکربندی، مولد برای ایجاد انسداد در متمایزگر، با تولید نمونههایی که بیشتر به نمونههای واقعی شباهت دارند، آموزش داده میشود؛ در حالی که متمایزگر به طور مداوم آموزش مییابد تا نمونههای واقعی را از جعلی تشخیص دهد. نکته مهم در این پیکربندی این است که مولد دسترسی مستقیمی به نمونههای واقعی مجموعه آموزشی ندارد؛ چرا که تنها از طریق تعامل با متمایزگر آموزش میبیند.
یادگیری تقویتی (Reinforcement Learning)
یادگیری تقویتی از سیستم پاداش و تنبیه برای آموزش الگوریتم استفاده میکند. در این مورد، الگوریتم یا یک عامل (agent) از محیط خود میآموزد. نماینده برای عملکرد صحیح، پاداش و برای عملکرد نادرست جریمه در نظر میگیرد. هدف سیستم در این روش، یافتن مجموعه الگوهایی با آزمایش و مقایسه همه آنها و در نهایت بهدستآوردن بیشترین پاداش است. این نوع از یادگیری نیازی به مجموعه داده آموزشی ندارد.
اجزای اصلی یک سیستم یادگیری تقویتی عبارتند از:
- عامل (Agent): یک نرم افزار یا سیستم هوشمند که تصمیمات را در محیط اتخاذ می کند.
- محیط (Environment): جایی که عامل در آن عمل میکند و وضعیتهای مختلف را تجربه میکند.
- حالات (States): نمایشی از وضعیت فعلی محیط.
- اقدامات (Actions): فعالیتهایی که عامل میتواند در هر حالت انجام دهد.
- پاداش (Reward): سیگنالی که محیط برای هر اقدام عامل ارسال میکند و نشان میدهد که آن اقدام چقدر خوب یا بد بوده است.
هدف عامل این است که سیاستی (policy) را یاد بگیرد که بیشترین مجموع پاداش را در طول زمان کسب کند. این کار با سعی و خطا و از طریق تجربه انجام میشود. یادگیری تقویتی در زمینههای مختلفی مانند هوش مصنوعی، کنترل خودکار، روباتیک، بازیها، مدیریت منابع و تصمیمگیری در شرایط عدم قطعیت کاربرد دارد. الگوریتمهای معروف یادگیری تقویتی شامل Q-Learning، SARSA، Deep Q-Network (DQN)، Policy Gradients و Actor-Critic میباشند.