در ابتدا لازم میدانم آنچه در پیش رو برای مطالعه دارید را در محدودهٔ چند خط به طور مختصر توضیح دهم تا برای آنچه در انتظار شماست یک دید کلی داشته باشید. این مقاله یک توضیح ساده و مختصر درباره شبکههای عصبی مصنوعی ارائه میدهد و مفاهیم اصلی مانند لایههای ورودی، پنهان و خروجی، انتشار رو به جلو، انتشار برگشتی و اصطلاحات کلیدی را توضیح میدهد. همچنین تفاوتهای شبکههای عصبی با یادگیری ماشین سنتی و مزایای درک ساختار شبکههای عصبی را بیان میکند.
حال که با کلیت مقاله آشنا شدید، ده دقیقه از زمان خود را همراه آن باشید تا با شبکههای عصبی بیشتر آشنا شوید.
شبکههای عصبی چیست؟
شبکههای عصبی، اجزای اصلی و پایهای الگوریتمهای یادگیری عمیق هستند. یک شبکه عصبی نوعی الگوریتم یادگیری ماشین است که برای شبیهسازی رفتار مغز انسان طراحی شده است. این شبکه از گرههای به هم متصل تشکیل شده که به آنها نورونهای مصنوعی هم میگویند و در لایههای مختلف سازماندهی شدهاند.
تفاوت شبکه عصبی با یادگیری ماشین چیست؟
شبکههای عصبی یک نوع از الگوریتمهای یادگیری ماشین هستند، اما در چند مورد مهم با یادگیری ماشین سنتی تفاوت دارند. مهمترین تفاوت این است که شبکههای عصبی به طور خودکار و بدون دخالت انسان یاد میگیرند و بهبود مییابند. این شبکهها ویژگیها را مستقیماً از دادهها یاد میگیرند که باعث میشود برای مجموعه دادههای بزرگ مناسبتر باشند. اما در یادگیری ماشین سنتی، ویژگیها به صورت دستی توسط انسان تعیین میشوند.
چرا باید از یادگیری عمیق استفاده کنیم؟
یکی از مزایای اصلی یادگیری عمیق، توانایی آن در مدیریت دادههای بزرگ است. با افزایش حجم دادهها، روشهای سنتی یادگیری ماشین ممکن است از نظر عملکرد و دقت ناکارآمد شوند. اما یادگیری عمیق همچنان عملکرد خوبی دارد و این امر آن را به انتخابی ایدهآل برای کاربردهایی که با حجم زیادی از داده سر و کار دارند، تبدیل میکند.
این سوال، سوال به جایی است اگر که بگوییم چرا باید به مطالعه ساختار یادگیری عمیق بپردازیم، به جای اینکه صرفاً به کامپیوتر برای تولید خروجیها تکیه کنیم. با این حال، دلایل قانعکنندهای وجود دارد که نشان میدهد درک عمیقتر از ساختار زیربنایی یادگیری عمیق میتواند به نتایج بهتری منجر شود.
مزایای درک ساختار چیست؟
با تحلیل ساختار یک شبکه عصبی، میتوانیم راههایی برای بهینهسازی و بهبود عملکرد آن پیدا کنیم. به عنوان مثال، میتوانیم تعداد لایهها یا گرهها را تنظیم کنیم، یا نحوه پردازش دادههای ورودی توسط شبکه را بهبود بخشیم. یا مثلا میتوانیم شبکههای عصبی بسازیم که برای تحلیل تصاویر پزشکی یا پیشبینی بازار سهام مناسبتر باشند. اگر بدانیم کدام گرهها در شبکه برای یک ورودی خاص فعال میشوند، میتوانیم بهتر بفهمیم که شبکه چگونه به تصمیم یا پیشبینی خود رسیده است.
شبکه عصبی چگونه کار میکند؟
هر نورون یک واحد محاسباتی است که مجموعهای از ورودیها را دریافت میکند، یک سری محاسبات انجام میدهد و خروجی را به لایه بعدی منتقل میکند.
درست مانند نورونهای مغز ما، هر گره در یک شبکه عصبی ورودی را دریافت میکند، آن را پردازش میکند و خروجی را به گره بعدی منتقل میکند. همانطور که دادهها در شبکه حرکت میکنند، اتصالات بین گرهها بر اساس الگوهای موجود در دادهها تقویت یا تضعیف میشوند. این امر به شبکه اجازه میدهد تا از دادهها یاد بگیرد و بر اساس آنچه آموخته، پیشبینی یا تصمیمگیری کند.
تصور کنید یک شبکه ۲۸ در ۲۸ داریم که در آن یک عدد طوری کشیده شده که برخی پیکسلها تیرهتر از بقیه هستند. با شناسایی پیکسلهای روشنتر، میتوانیم عددی را که روی شبکه نوشته شده، تشخیص دهیم. این شبکه به عنوان ورودی برای یک شبکه عصبی عمل میکند.
سطرهای شبکه در یک آرایه یکبعدی افقی «horizontal 1-D array» چیده میشوند که سپس به یک آرایه عمودی تبدیل میشود و اولین لایه نورونها را تشکیل میدهد. درست مثل این:
در مورد لایه اول، هر نورون مربوط به یک پیکسل منفرد در تصویر ورودی است و مقدار داخل هر نورون نشاندهنده فعالسازی «activation» یا شدت آن پیکسل است. لایه ورودی «input layer» یک شبکه عصبی مسئول دریافت دادههای خام (در این مورد، یک تصویر) و تبدیل آن به فرمتی است که توسط بقیه شبکه قابل پردازش باشد.
در این مورد، ما ۲۸ در۲۸ پیکسل ورودی داریم که در مجموع ۷۸۴ نورون در لایه ورودی به ما میدهد. هر نورون یک مقدار فعالسازی ۰ یا ۱ خواهد داشت که به ترتیب و بسته به سیاه یا سفید بودن پیکسل مربوطه در تصویر ورودی جایگذاری میشود.
لایه خروجی «output layer» شبکه عصبی در این مورد شامل ۱۰ نورون است که هر کدام نشاندهنده یک کلاس خروجی احتمالی هستند (در اینجا، ارقام ۰ تا ۹). خروجی هر نورون در لایه خروجی نشاندهنده احتمال تعلق تصویر ورودی به آن کلاس خاص است. بالاترین مقدار احتمال، کلاس پیشبینی شده برای آن تصویر ورودی را تعیین میکند.
لایههای پنهان «Hidden Layers»
بین لایههای ورودی و خروجی، یک یا چند لایه پنهان داریم که یک سری تبدیلات غیرخطی «non-linear transformations» روی دادههای ورودی انجام میدهند. هدف این لایههای پنهان، استخراج ویژگیهای سطح بالاتر «higher-level features» از دادههای ورودی است که برای وظیفه مورد نظر معنادارتر هستند. تعداد لایههای پنهانی که میخواهید به شبکهتان اضافه کنید، به شما بستگی دارد.
هر نورون در لایه پنهان، ورودیهایی از تمام نورونهای لایه قبلی دریافت میکند و مجموعهای از وزنها «weights» و بایاسها «biases» را به آن ورودیها اعمال میکند، قبل از اینکه نتیجه را از طریق یک تابع فعالسازی غیرخطی «non-linear activation function» عبور دهد. این فرآیند در تمام نورونهای لایه پنهان تکرار میشود تا به لایه خروجی برسد.
انتشار رو به جلو «Forward Propagation»
انتشار رو به جلو فرآیندی است که طی آن دادههای ورودی از طریق یک شبکه عصبی برای تولید خروجی عبور داده میشوند. این فرآیند شامل محاسبه خروجی هر نورون در هر لایه از شبکه با اعمال وزنها و بایاسها به ورودیها و عبور دادن نتایج از طریق یک تابع فعالسازی است.
معادله ریاضی:
y = g (wo + Sigma xi. wi) یا y = g (wo + Xt. W)
که در آن y خروجی شبکه عصبی، g تابع فعالسازی غیرخطی، xi اشاره به i-امین ویژگی ورودی یا متغیر ورودی، wi وزن مرتبط با i-امین ویژگی یا متغیر ورودی، و wo ترم بایاس است که یک مقدار ثابت است که به ترکیب خطی ورودیها اضافه میشود.
Sigma xi. wi: این ترکیب خطی ویژگیهای ورودی و وزنهای مرتبط با آنهاست. این عبارت گاهی اوقات به عنوان «مجموع وزندار» «weighted sum» ورودیها نیز شناخته میشود.
انتشار برگشتی «Backpropagation»
انتشار برگشتی یک الگوریتم محبوب در آموزش شبکههای عصبی است. این فرآیند شامل محاسبه گرادیان «gradient» است که معیاری از تغییر در تابع زیان «loss function» نسبت به هر وزن در شبکه است. تابع زیان معیاری است که نشان میدهد شبکه عصبی چقدر خوب میتواند خروجی صحیح را برای یک ورودی مشخص پیشبینی کند. با محاسبه گرادیان تابع زیان، انتشار برگشتی به شبکه عصبی اجازه میدهد وزنهای خود را به گونهای بهروزرسانی کند که خطا یا زیان کلی را در طول آموزش کاهش دهد.
این الگوریتم با انتشار خطا از لایه خروجی به عقب و از طریق لایههای شبکه کار میکند و از قانون زنجیرهای حساب دیفرانسیل «chain rule of calculus» برای محاسبه گرادیان تابع زیان نسبت به هر وزن استفاده میکند. سپس از این گرادیان در بهینهسازی نزول گرادیان «gradient descent optimization» برای بهروزرسانی وزنها و به حداقل رساندن تابع زیان استفاده میشود.
اصطلاحات مورد استفاده در شبکههای عصبی
آموزش شبکه عصبی «Training»:
فرآیند تنظیم وزنهای یک شبکه عصبی بر اساس دادههای ورودی و خروجی مطلوب، به منظور بهبود دقت پیشبینیهای شبکه است.
وزن «Weight»:
وزنها به پارامترهایی اشاره دارند که در طول آموزش یاد گرفته میشوند و قدرت ارتباطات بین نورونها را تعیین میکنند. به هر اتصال بین نورونها یک وزن اختصاص داده میشود که در مقدار ورودی به نورون ضرب میشود تا خروجی آن را تعیین کند.
بایاس «Bias»:
بایاس پارامتر یادگیری دیگری است که به مجموع وزندار ورودیهای یک نورون در یک لایه مشخص اضافه میشود. این یک ورودی اضافی به نورون است که به تنظیم خروجی تابع فعالسازی کمک میکند.
تابع فعالسازی غیرخطی «Non-linear activation function»:
یک تابع فعالسازی غیرخطی به خروجی یک نورون اعمال میشود تا غیرخطی بودن را به شبکه معرفی کند. غیرخطی بودن مهم است زیرا به شبکه اجازه میدهد روابط پیچیده و غیرخطی بین ورودیها و خروجیها را مدلسازی کند. توابع فعالسازی رایج در شبکههای عصبی شامل تابع سیگموید «sigmoid function»، تابع ReLU (واحد خطی یکسوشده) «Rectified Linear Unit»، و تابع سافتمکس «softmax function» هستند.
تابع زیان «Loss function»:
این یک تابع ریاضی است که خطا یا تفاوت بین خروجی پیشبینی شده شبکه عصبی و خروجی واقعی را اندازهگیری میکند. زیان تجربی «empirical loss» کل زیان را در مجموعه دادههای ما اندازهگیری میکند. زیان آنتروپی متقاطع «cross-entropy loss» معمولاً با مدلهایی که احتمالی بین ۰ و ۱ را خروجی میدهند استفاده میشود، در حالی که زیان میانگین مربعات خطا «mean squared error loss» با مدلهای رگرسیونی که اعداد حقیقی پیوسته را خروجی میدهند، استفاده میشود. هدف به حداقل رساندن تابع زیان در طول آموزش برای بهبود دقت پیشبینیهای شبکه است.
بهینهسازی زیان «Loss optimization»:
این فرآیند به حداقل رساندن خطا یا زیانی است که شبکه عصبی هنگام پیشبینی متحمل میشود. این کار با تنظیم وزنهای شبکه انجام میشود.
نزول گرادیان «Gradient descent»:
این یک الگوریتم بهینهسازی است که برای یافتن حداقل یک تابع، مانند تابع زیان یک شبکه عصبی، استفاده میشود. این فرآیند شامل تنظیم تکراری وزنها در جهت منفی گرادیان تابع زیان است. ایده این است که وزنها را مدام در جهتی که زیان را کاهش میدهد حرکت دهیم تا به حداقل برسیم.
حالا برای درک بهتر اصطلاحات بیایید با مثالهای واقعی روبرو شویم
۱- یک سناریو را در نظر بگیرید که در آن یک شرکت میخواهد با فروش یک محصول، سود خود را به حداکثر برساند. آنها ممکن است مدلی داشته باشند که سود را بر اساس عوامل مختلفی مانند قیمت، هزینه بازاریابی و غیره پیشبینی میکند. بایاس «Bias» میتواند به هر عامل ثابتی اشاره کند که بر سود محصول تأثیر میگذارد، اما مستقیماً به قیمت یا هزینه بازاریابی مربوط نیست. به عنوان مثال، اگر محصول یک کالای فصلی باشد، ممکن است در زمانهای خاصی از سال تمایل به سود بیشتری وجود داشته باشد. تفاوت بین سود واقعی و سود پیشبینی شده، تابع زیان «loss function» است. نزول گرادیان «Gradient descent» شامل محاسبه گرادیان تابع زیان نسبت به هر ویژگی ورودی است و از این گرادیان برای تنظیم تکراری مقادیر ویژگیها تا زمانی که مقادیر بهینه پیدا شوند، استفاده میشود. فرآیندی که شامل یافتن مقادیر بهینه برای ویژگیهای ورودی برای به حداقل رساندن تابع زیان است، بهینهسازی زیان «loss optimization» نام دارد. مدل پیشبینی سود میتواند از یک تابع فعالسازی غیرخطی «non-linear activation function» برای تبدیل ویژگیهای ورودی (مانند قیمت، هزینه بازاریابی) به یک مقدار سود پیشبینی شده استفاده کند. این تابع میتواند برای معرفی روابط غیرخطی بین ویژگیهای ورودی و سود خروجی استفاده شود.
۲- تصور کنید در حال بازی کردن یک بازی ویدیویی هستید که در آن شما یک شخصیت هستید که سعی دارید به یک مقصد برسید، اما فقط میتوانید در دو بعد حرکت کنید (جلو/عقب و چپ/راست). شما مختصات دقیق مقصد را میدانید، اما نمیدانید چگونه به آنجا برسید. هدف شما پیدا کردن کوتاهترین مسیر به مقصد است. در این سناریو، تابع زیان «loss function» میتواند فاصله بین موقعیت فعلی شما و مقصد باشد. گرادیان تابع زیان، جهت و اندازه تندترین شیب به سمت مقصد خواهد بود که میتوانید از آن برای تنظیم حرکت خود و نزدیکتر شدن به مقصد استفاده کنید. همانطور که به مقصد نزدیکتر میشوید، تابع زیان کاهش مییابد (زیرا به هدف خود نزدیکتر میشوید) و گرادیان متناسب با آن تغییر میکند. با استفاده مکرر از گرادیان برای تنظیم حرکت خود، میتوانید در نهایت در کوتاهترین مسیر ممکن به مقصد برسید.
در انتها امیدواریم که در دقایق سپری شده توانسته باشیم شناخت مناسب و مطلوبی را از شبکههای عصبی به شما خواننده محترم منتقل کرده باشیم.