آموزش Deep Learning (بخش اول)
• یادگیری عمیق ( Deep Learning )و باوری اشتباه درباره آن
روند تکاملی سیستم های خبره در هوش مصنوعی همواره از موضوعات جذابی برای انجام تحقیق های متنوع بوده که در طول زمان افراد زیادی با ارائه روش های مختلفی سعی در هموار کردن مسیر برای پاس کردن آزمون آلن تورینگ (معروف به بنیان گذار علم هوش مصنوعی) داشته اند.
امروزه چیزی که سروصدای زیادی به پا کرده و آن را به اسم Deep Learning می شناسیم، تقریبا صنایعی همچون پزشکی، ربات ها، سیستم های تشخیص چهره و … نفوذ کرده و حتی محققان زیادی را نیز از رشته های خارج مهندسی جذب کرده است.
اما قبل از شروع درباره چیستی شبکه های عصبی، بهتر است اول از همه به این باور اشتباه رایجی بپردازیم که یادگیری عمیق هیچ شاخهای از هوش مصنوعی نیست!
علم یادگیری ماشین یک زیرشاخه از هوش مصنوعی است که با ارائه الگوریتم های منسجمی سعی در Estimate و یا Predict کردن بر اساس دیتاهای ورودی را دارد. یادگیری ماشین در اولین سطح به شاخه های مختلفی از قبیل suprvised Learning، unsupervised Learning، Reinforcement Learning و … تقسیم بندی می شود که توصیف تک تک آنها خارج از گستره این مقاله است.
• سوال اصلی : نقش یادگیری عمیق در هوش مصنوعی چیست؟
برای پاسخ به این سؤال لازم است در نظر داشته باشیم که هر سیستم خبره هوش مصنوعی که ما نیاز به طراحی آن داریم صرفا یک مدلسازی ریاضی از تابعی است که با استفاده از ورودی های داده شده خروجی موردنظر را تولید کند.
با این توصیف، ریاضیدانان با بررسی مدل های عمیق شبکه های عصبی و با استدلال هایی قوی اثبات کرده اند که شبکه های عصبی توانایی مدلسازی هر نوع تابعی را دارا هستند که این اصل به نام Universal approximation theorem شناخته شده است. بنابراین می توان گفت یادگیری عمیق با شبیه سازی ساختارهای نورون های مغزی صرفا یک ابزار پیشنهادشده قدرتمندی است که برای انجام وظایف مختلف یادگیری ماشین همچون classification، clustering و … مورداستفاده قرار می گیرد و با تغییر معماری لایه های آن میتوان آن را مناسب برای هر کاربردی ساخت.
• شبکههای عصبی چیست اند و چگونه خروجی تولید می کنند؟
در این بخش، مرحله به مرحله از جزیی ترین بخش شبکه های عصبی یعنی نورون ها شروع کرده و نحوه محاسبه خروجی را خواهید آموخت و با اولین ساختار شبکه های عصبی آشنا خواهید شد.
شکل ۱ ،نمونه ساده ای از شبکه های عصبی (Dense) متراکم را نشان می دهد.

• نورون: اولین پایه شبکه های عصبی
بهطورکلی نورونها پایهایترین واحدهای محاسباتی در یک شبکه عصبی هستند که مقداری به عنوان ورودی می گیرند و اعمال ریاضیاتی را بر روی آنها اعمال میکنند سپس به عنوان خروجی به نورون یا نورونهای بعدی پاس میدهند.
شکل ۲ تصویری از یک نورون با دو ورودی x1 و x2 را نشان میدهد.

در یک نورون و بطور مشخص در نورون بالایی سه اتفاق رخ میدهد:
۱ .ورودی x1 در یک وزن مشخص w1 و ورودی x2 در یک وزن مشخص w2 ضرب میشود. (بطور کلی، در یک نورون به تعداد ورودی ها وزن خواهیم داشت).
۲ .مقادیر وزن دار تمامی ورودی ها با یک دیگر جمع شده و با یک عدد b جمع میشود که bias نامیده میشود.
۳ .مقدار محاسبه شده در مرحله دو، به یک تابع که در شبکه های عصبی با function activation شناخته شده اند به عنوان ورودی داده شده و خروجی مورد نظر مخصوص آن نورون تولید میشود.
مجموع این سه مرحله که در یک نورون رخ میدهد بصورت زیر است:

عبارت بالا توصیف ریاضی کلی از اتفاقاتی است که در درون یک نورون رخ میدهد. همچنین انتخاب activation function بستگی به مسئله و هدف ما از طراحی شبکههای عصبی دارد که معماری آن را تعیین میکند. برخی از توابع مهم شامل LeakyRelu، Relu، tanh، sigmoid و … هستند که در آموزشهای بعدی مفصلا در مورد انتخاب صحیح تکتک آنها شرح داده خواهد شد.
اما بهمنظور درک شهودی بهتر و آشنایی اولیه فرض میکنیم که در مثال بالا از تابع tanh استفاده میکنیم که این تابع نموداری بهصورت شکل ۳ دارد. از ویژگیهای مثبت آن zero-centered بودن آن است، استفاده از این تابع موجب می شود که تمامی خروجی نورون های مان بین -۱ و +۱ باشند که در موقعیت های به خصوصی کاربرد خواهد داشت.

• ساخت شبکه های عصبی با نورون ها
در این قسمت بررسی خواهیم کرد که شبکه های عصبی با چه معماری از نورون ها ساخته می شوند. معمولا شبکههای عصبی کاملا متصل (Fully Connected) با لایههای متراکم (Dense) ابتداییترین معماری هستند که در شروع یادگیری Deep Learning مورد بررسی قرار میگیرند. این نوع از معماری میتواند برای وظایف مختلفی همچون رگرسیون مورد استفاده قرار گیرد.
سادهترین تعریفی که میتوان برای شبکههای Fully Connected ارائه داد این است که در این نوع معماری نورونهای موجود هر لایه (منظور از لایه، مجموعه نورونهای مجاوریاند که به هم متصل نیستند) به تمامی نورونهای موجود لایه بعد و قبل متصلاند، به این معنی که تمامی ورودیهای یک نورون در یک لایه مشخص، همان خروجیهای تکتک نورونها در لایه قبل هست.
ساختار ساده شکل ۴ این موضوع رو بهتر مشخص میکند:

همچنین به هر لایه میانی بجز خروجی و ورودی در شبکه های عصبی Hidden Layer یا لایه پنهان گفته میشود که لایه های پنهان به هر تعداد دلخواهی میتوانند پشت سر هم چیده شوند و دقت شبکه را افزایش دهند.
انتخاب پارامتر هایی همچون تعداد لایه ها، تعداد نورون ها در هر لایه و Activation Function ها در حال حاضر از داغ ترین مباحثی هستند که تحقیقات زیادی بر روی آن ها به منظور پیدا کردن بهینه ترین انتخاب نسبت به هر مسئله صورت می گیرد.
• معماریهای بزرگ fully connected
همانطورکه اشاره شد شبکههای fully connected میتوانند Hidden Layer های پشت سر هم بیشتری با تعداد نورون (unit size) های متفاوتی داشته باشند. اما در مورد انتخاب تعداد آنها از جهت آموزش شبکه و همچنین حجم محاسباتی زیاد، در حال حاضر دچار محدودیتهایی هستیم. بنابراین، ارائه روشهای بهینه و همچنین مدلسازی های ریاضی مختلفی جهت افزایش کارکرد شبکه از موضوعاتی هستند که در طراحی شبکه حتما باید در نظر گرفته شوند.
درنهایت، تصویر شکل ۵ یک شبکه پیچیدهتری از fully connected ها را با سه خروجی نشان میدهد.

• قسمت بعدی آموزش
در قسمت بعدی آموزش پس از ساخت و طراحی معماری شبکه خواهید آموخت چطور میتوان آن را train کرد تا بتواند خروجیهای مدنظر را تولید کند و همچنین optimizer های مختلف مربوط به مرحله آموزش شبکه بررسی خواهند شد. همچنین، با استفاده از تابع loss میزان عملکرد شبکه را خواهیم سنجید و با مفهومی به نام forward-pass آشنا خواهید شد.