یادگیری عمیق چیست؟ #
“یادگیری عمیق” یا “Deep Learning” زیر مجموعهای از یادگیری ماشین و هوش مصنوعی(AI) است که سعی دارد روشهای دسترسی به نوع خاصی از دانش انسانی را تقلید کند. یادگیری عمیق یکی از عناصر مهم علم داده است که شامل آمار و مدلسازی هایِ مبتنی بر پیش بینی می شود.
یادگیری عمیق، برای دانشمندان علم داده که وظیفه جمع آوری، تجزیه و تحلیل و تفسیر داده های زیادی را دارند؛ بسیار مفید است و به کمک یادگیری عمیق می توانند مسائل را سریع تر و آسان تر حل کنند.
در ساده ترین حالت، یادگیری عمیق را میتوان راهی برای خودکارسازی تحلیل پیشگویانه دانست. در حالی که الگوریتم های یادگیری ماشینی سنتی روالی خطی و یکپارچه دارند؛ الگوریتم های یادگیری عمیق دارای پیچیدگی های زیادی از نظر انتزاع هستند.
به منظور درک مفهوم یادگیری عمیق، کودک نوپایی را در نظر بگیرید که اولین کلمه ای که میگوید “سگ” است. کودک نوپا با اشاره به اشیاء و گفتن کلمه “سگ” یاد می گیرد که چه چیزی “سگ” است و چه چیزی “سگ” نیست. والدین میگویند: «بله، این سگ است» یا «نه، این سگ نیست». همانطور که کودک نوپا همچنان به اشیاء اشاره می کند؛ از ویژگی هایی که همه سگ ها دارند آگاهی بیشتری می یابد.
کاری که کودک نوپا بدون اینکه بداند انجام می دهد؛ این است که یک انتزاع پیچیده (مفهوم سگ) را با ساختن سلسله مراتبی که در آن هر سطح از انتزاع دانش به دست آمده از لایه قبلی را واضح و شفاف می کند.
چگونگی عملکرد یادگیری عمیق #
برنامههای رایانهای که از یادگیری عمیق استفاده میکنند؛ تقریباً همان روندی که کودک نوپا برای شناسایی سگ یاد میگیرد را طی می کنند. هر الگوریتم یادگیری عمیق، در سلسله مراتب یادگیری خود، از یک سیستم تبدیل غیرخطی در ورودی خود استفاده می کند و از آنچه یاد می گیرد برای ایجاد یک مدل آماری به عنوان خروجی استفاده می کند.
این الگوریتم تا زمانی که خروجی به سطح قابل قبولی از دقت برسد این رویه را ادامه می دهد. تعداد لایههای پردازشی که دادهها باید از مسیر آنها عبور کنند؛ دلیل این است که از اصطلاح “عمیق” در یادگیری عمیق استفاده می شود.
راهنمای موشکافانه یادگیری ماشین در عمل #
در یادگیری ماشین کلاسیک، روند یادگیری تحت نظارت قرار دارد و برنامه نویس باید به رایانه دستور دهد که دنبال چه چیزی باشد تا تصمیم بگیرد و اینکه آیا یک تصویر شامل یک سگ است یا خیر. این یک روند پرمشقت است که “استخراج ویژگی” نامیده می شود و میزان موفقیت رایانه تماماً به قابلیت برنامه نویس در تعریف دقیق مجموعه ویژگی های یک سگ بستگی دارد. مزیت یادگیری عمیق این است که برنامه این مجموعه ویژگی ها را خودش و بدون نظارت می سازد. یادگیری بدون نظارت نه تنها سریع تر است، بلکه عمدتاً دقیق تر است.
یک برنامه کامپیوتری می تواند با دادههای آموزشی مجموعهای از تصاویر برای هر سگ یا تصویری که با متاتگ برچسب گذاری شده آموزش ببیند. این برنامه، از اطلاعاتی که داده های آموزشی ایجاد می کند؛ برای ایجاد یک مجموعه ویژگی برای سگ ها و ساخت یک مدل پیش بینی استفاده می کند.
در این حالت، مدلی که رایانه در ابتدا می سازد؛ ممکن است پیشبینی کند که هر چیزی که در تصویر چهار عدد پا و یک دم دارد باید برچسب سگ داشته باشد. البته برنامه از برچسب چهار پا یا دم آگاه نیست. اما به سادگی به دنبال الگوهای پیکسل ها در داده های دیجیتال خواهد بود که با تکرار، مدل اولیه, پیچیدهتر و دقیقتر خواهد شد.
برخلاف کودک نوپا که هفتهها یا حتی ماهها طول میکشد تا مفهوم سگ را درک کند، یک برنامه رایانهای که از الگوریتمهای یادگیری عمیق استفاده میکند؛ با استفاده از تصاویر آموزشی می تواند میلیونها تصویر را مرتب کند و در چند دقیقه بهطور دقیق تشخیص دهد که کدام تصاویر دارای سگ هستند.
برای بدست آوردن سطح قابل قبولی از دقت، برنامههای یادگیری عمیق به حجم عظیمی از دادههای آموزشی و قدرت پردازشی بالا نیاز دارند که هیچیک تا قبل از عصر بیگ دیتا و رایانش ابری به راحتی در دسترس برنامهنویسان نبود.
از آنجایی که یادگیری عمیق قادر است مدلهای آماری پیچیده را مستقیماً از خروجی تکرارشونده خود ایجاد کند؛ میتواند مدلهای پیشبینی دقیق را از مقادیر زیادی دادههای بدون ساختار و بدون برچسب بدست آورد. بیشتر دادههایی که انسانها و ماشینها ایجاد میکنند؛ بدون ساختار و بدون برچسب هستند اما با رشد و توسعه هر چه بیشتر اینترنت اشیا (IOT) این موضوع بسیار اهمیت پیدا میکند.
روش هایِ یادگیری عمیق #
روش های متفاوتی برای ایجاد مدل های یادگیری عمیق استفاده می شود. این شیوه ها شامل کاهش نرخ یادگیری(learning rate decay)، یادگیری انتقالی(transfer learning)، آموزش از صفر(training from scratch) و برون اندازی (Dropout) است.
کاهش نرخ یادگیری :
نرخ یادگیری در واقع یک فرا پارامتر محسوب می شود که مقدار تغییرات سیستم را که با هر تغییر وزن پارامترها در یک مدل یادگیری ایجاد می شود را کنترل می کند. نرخ های یادگیری اگر بیش از حد بالا باشند؛ میتواند به ناپایداری فرآیند یادگیری و یا ایجاد مجموعه ای از وزن های نامطلوب منجر شود. این در حالتی است که نرخ های یادگیری بسیار پایین ممکن است؛ منجر به طولانی شدن روند آموزشی و گیر کردن برنامه شود.
روش کاهش نرخ یادگیری (که به نرخ یادگیری با دوام و یا تطبیق نرخ یادگیری قابل تطبیق نیز شناخته می شود) روشی برای تطبیق نرخ یادگیری بوده و به منظور افزایش عملکرد و کاهش زمان آموزش استفاده می شود.
یادگیری انتقالی:
یادگیری انتقالی تکمیل کننده مدلی است که از قبل آموزش دیده است و به یک رابط برای اجزای درون یک شبکه نیاز دارد. در ابتدا کاربران، داده های جدید را که شامل طبقه بندی های ناشناخته قبلی است، به شبکه موجود وارد می کنند. پس از ایجاد تنظیمات در شبکه، می توان وظایف جدیدی را با قابلیت طبقه بندی خاص تر انجام داد. مزیت این روش این است که نسبت به دیگر روش ها، به داده های بسیار کمتری احتیاج دارد؛ بنابراین زمان محاسبه را چند دقیقه یا ساعت کاهش می دهد.
آموزش از صفر:
این روش نیازمند این است که توسعه دهنده، یک مجموعه داده برچسب دار عظیم را جمع آوری کند و نوعی از معماری شبکه را تنظیم کند که بتواند ویژگی ها و مدل ها را بیاموزد. این شیوه به خصوص برای برنامه های جدید و همچنین برنامه های کاربردی که طبقه بندی های زیادی در خروجی دارند؛ مناسب است. اگرچه، این رویکرد کمتر متداول است؛ اما نیازمند داده های زیادی است که مدت زمان آموزش را روزها و یا هفته ها طولانی می کند.
یادگیری از طریق برون اندازی:
در این روش سعی شده تا در حین آموزش، مشکل بیش برازش (Overfitting) در شبکه هایی که پارامترهای زیادی دارند با روش برون اندازی تصادفی واحدها و اتصالات آن ها از شبکه عصبی حل شود. این روش میتواند عملکرد شبکه های عصبی را بر روی وظایف یادگیری تحت نظارت در زمینه هایی مانند تشخیص گفتار ، طبقه بندی اسناد و زیست شناسی محاسباتی بهبود بخشد.
یادگیری عمیق و شبکه های عصبی #
بنیان گذار اغلب مدل های یادگیری عمیق، نوعی از الگوریتم پیشرفته یادگیری ماشین است که به عنوان شبکه عصبی مصنوعی شناخته می شود. در نتیجه، گاهی اوقات ممکن است از یادگیری عمیق به عنوان یادگیری عمیق عصبی یا شبکه عصبی عمیق یاد شود.
شبکههای عصبی دارای اشکال مختلفی از جمله: شبکههای عصبی بازگشتی(Recurrent Neural Networks)، شبکههای عصبی پیچشی(Convolutional Neural Networks)، شبکههای عصبی مصنوعی(Artificial Neural Networks) و شبکههای عصبی پیشخور(Feedforward Neural Networks) هستند.
با این حال، گرچه همه ی آنها تا حدودی عملکردی مشابه دارند: این شبکه ها با تغذیه داده ها و اجازه دادن به مدل که خود تشخیص دهد که آیا تفسیر یا تصمیم درستی در مورد یک عنصر داده گرفته است کار می کنند.
شبکههای عصبی دارای روند آزمون و خطا هستند؛ بنابراین به حجم عظیمی از دادهها نیاز است تا بر روی آنها آموزش ببینند. شبکههای عصبی زمانی محبوب شدند که اکثر سازمانها از تجزیه و تحلیل دادههای بزرگ استقبال کردند و ذخایر بزرگی از داده را جمعآوری کردند.
از آنجایی که تکرارهای اولیه مدل یادگیری، در مورد محتوای یک تصویر یا بخشهایی از گفتار بر اساس حدس است؛ دادههای مورد استفاده در مرحله آموزش باید برچسبگذاری شوند تا مدل بتواند بفهمد که آیا حدسش دقیق بوده یا خیر. این بدان معناست که اگرچه شرکتهای بسیاری از دادههای با حجم زیاد استفاده میکنند؛ اما دادههای بدون ساختار می تواند خیلی مفید و کاربردی نباشد. یک مدل یادگیری عمیق که آموزش دیده و به سطح قابل قبولی از دقت رسیده است؛ می تواند داده های بدون ساختار را تجزیه و تحلیل کند. این در حالی است که مدل های یادگیری عمیق نمیتوانند بر روی داده های بدون ساختار آموزش ببینند.