یادگیری عمیق (Deep Learning) با پایتون — به زبان ساده

در این مطلب، مفهوم یادگیری عمیق و روش پیادهسازی آن با زبان برنامهنویسی پایتون آموزش داده شده است. دلیل اصلی نهفته در پس «یادگیری عمیق» (Deep Learning) این ایده است که «هوش مصنوعی» (Artificial Intelligence) باید از مغز انسان الهام بگیرد. این چشمانداز موجب سربرآوردن مفاهیم «شبکه عصبی» (Neural Network) شده است. مغز انسان دارای میلیاردها «نورون» (neuron) با دهها هزار اتصال میان آنها است. الگوریتم یادگیری عمیق، مغز انسان را در بسیاری از شرایط شبیهسازی میکند، از همین رو هم مغز و هم مدلهای یادگیری عمیق دارای گستره وسیعی از واحدهای محاسباتی (نورونها) هستند که به صورت منزوی (ایزوله) فوقالعاده «هوشمند» (Intelligent) نیستند، اما هنگامی که با یکدیگر تعامل دارند هوشمند میشوند.
«جفری اورست هینتون» (Geoffrey Everest Hinton)، دانشمند علوم کامپیوتر متولد بریتانیا است که بیشتر به دلیل پژوهشهایی که در زمینه «شبکههای عصبی مصنوعی» (Artificial Neural Networks) انجام داده شهرت دارد، او در این رابطه میگوید: «من فکر میکنم مردم نیاز دارند بدانند که یادگیری عمیق انجام کارها را – در پشت صحنه – بسیار بهتر میسازد. یادگیری عمیق در حال حاضر در جستوجوهای گوگل و جستوجوی تصاویر مورد استفاده قرار میگیرد و به شما این امکان را میدهد که عبارتی مانند «آغوش» را جستوجو کنید.»
نورونها
مبنای اساسی شبکههای عصبی، «نورونهای مصنوعی» (artificial neurons) هستند که از نورونهای مغز انسان تقلید میکنند. این نورونها، واحدهای محاسباتی ساده و قدرتمند دارای سیگنالهای ورودی وزنداری محسوب میشوند که سیگنال خروجی را با استفاده از یک تابع فعالسازی تولید میکنند. نورونها در چندین لایه در شبکه عصبی منتشر میشوند.
شبکههای عصبی مصنوعی چگونه کار میکنند؟
یادگیری عمیق دربرگیرنده شبکههای عصبی مصنوعی است که روی شبکههایی مشابه با آنچه در مغز انسان وجود دارد مدل شدهاند.
با جابهجایی داده در این «مِش مصنوعی» (Artificial Mesh)، هر لایه یک جنبه از دادهها را پردازش، دورافتادگیها را فیلتر، موجودیتهای مشابه را علامتگذاری و خروجی نهایی را تولید میکند.

لایه ورودی
«لایه ورودی» (Input layer) شامل نورونهایی است که کاری به جز دریافت ورودیها و پاس دادن آنها به دیگر لایهها انجام نمیدهند. تعداد لایهها در لایه ورودی باید مساوی «خصیصهها» (attributes) یا «ویژگیهای» (features) موجود در «مجموعه داده» (dataset) باشد.
لایه خروجی
«لایه خروجی» (Output Layer)، ویژگی پیشبینی شده است، این لایه اساسا به نوع مدلی که ساخته میشود بستگی دارد.
لایه پنهان
در میان لایه ورودی و خروجی «لایههای پنهان» (Hidden Layers) بسته به نوع مدل قرار دارند. لایههای پنهان شامل گستره وسیعی از نورونها میشوند. نورونها در لایه پنهان، «تبدیلها» (transformations) را پیش از پاس دادن ورودیها روی آنها اعمال میکنند. با آموزش دیدن شبکه، وزنها به روز رسانی میشوند تا پیشبینتر باشند.
وزن نورونها
«شبکههای عصبی نظارت شده پیشخور» (Feedforward supervised neural networks) از جمله اولین و موفقترین الگوریتمهای یادگیری به شمار میآید. به این الگوریتم «شبکههای عمیق» (Deep Networks)، «پرسپترون چند لایه» (Multi-layer Perceptron | MLP) یا به صورت سادهتر «شبکههای عصبی» (Neural Networks) نیز گفته میشود و معماری متداول آن با یک لایه پنهان نمایش داده میشود. هر نورون با وزنی به نورون دیگر مرتبط میشود. شبکه، به منظور تولید یک مقدار خروجی، ورودی را با فعالسازی نورونها پردازش میکند. به این کار «مسیر رو به جلو» (Forward Pass) در شبکه گفته میشود.

تابع فعالسازی در یادگیری عمیق
«تابع فعالسازی» (Activation Function)، «مجموع ورودی وزندار» را به خروجی نورون نگاشت میکند. به این تابع، بدین دلیل تابع فعالسازی/انتقال (transfer function) گفته میشود که آغازی که در آن نورون فعال میشود را کنترل کرده و سیگنال خروجی را قدرت میبخشد.
به بیان ریاضی داریم:
Y=∑(weight∗input)+bias
تابعهای فعالسازی زیادی وجود دارد که در میان آنها «واحد خطی یکسوسازی شده» (Rectified Linear Unit | ReLU)، «تانژانت هذلولوی» (tanh) و «SoftPlus» از پر استفادهترینها هستند. «تقلبنامهای» (Cheat Sheet) برای توابع فعالسازی در زیر آمده است.

بازگشت به عقب
مقدار پیشبینی شده شبکه عصبی با خروجی مورد انتظار مقایسه میشود و مقدار خطا با استفاده از تابع محاسبه میشود. این خطا بعدا در کل شبکه، یک لایه در واحد زمان، به عقب بازگشت داده میشود و وزنها مطابق با مقداری که در خطا مشارکت داشتهاند به روز رسانی خواهند شد. این ریاضیات هوشمندانه «الگوریتم بازگشت به عقب» (Back-Propagation algorithm) نامیده میشود.