پایتون بهترین زبان برای ورود به دنیای عظیم هوش مصنوعی است. یادگیری عمیق فرایندی است که در آن از دادهها برای پیشبینی استفاده شده و به شدت به شبکههای عصبی وابسته است. در این سری از پستهای آموزشی با هم و با استفاده از زبان پایتون یک شبکه عصبی را از پایه میسازیم.
در فضای توسعه از فریمورکهای یادگیری عمیق نظیر TensorFlow یا PyTorch برای راحتی کار و تسریع فرایند توسعه استفاده میکنند. با این حال اطلاع از نحوه کار شبکههای عصبی خالی از لطف نیست.
در این پست ما با مفاهیم و اصول اولیه شبکههای عصبی آشنا شده و نحوه آموزش یک شبکه عصبی را یاد میگیریم. در قسمت بعدی نیز با استفاده از مطالب این پست و پایتون، یک شبکه عصبی میسازیم.
مفاهیم اصلی شبکههای عصبی
شبکه عصبی یک سیستم است که با انجام مراحل زیر پیشبینی را یاد میگیرد:
- گرفتن داده ورودی
- پیش بینی
- مقایسه پیشبینی با خروجی مورد نظر
- بهبود وضعیت داخلی برای پیشبینی بهتر
بردارها، لایهها و رگرسیون خطی برخی از اجزای اصلی شبکههیا عصبی هستند. دادهها به عنوان بردار ذخیره میشوند و به کمک پایتون میتوانید این بردارها را داخل آرایهها ذخیره کنید. هر لایه دادههایی که از سمت لایه قبلی میآیند را تغییر میدهد.
یکی از قسمتهای جذاب شبکههای عصبی این است که یک سری محاسبات میتوانند اطلاعات هر نوع دادهای را استخراج کنند. فرقی نمیکند که دادههای شما از جنس عکس باشد یا متن، فرایند استخراج اطلاعات مفید و آموزش مدل یادگیری عمیق برای هر دو سناریو یکی است.
در مثال زیر یک مثال از شبکه عصبی با لایه را میبینید:
فرایند آموزش یک شبکه عصبی
آموزش یک شبکه عصبی در واقع یک فرایند آزمون و خطا است. فرض کنید که برای اولین بار دارت بازی میکنید. شما در اولین پرتاب تلاش میکنید نقطه وسط را بزنید. این اولین پرتاب به شما کمک میکند سرعت و ارتفاع پرتاب را تخمین بزنید. اگر تیر شما بالاتر از هدف بخورد، میدانید که باید سرعت یا ارتفاع را کاهش دهید. در پرتابهای آتی شما حدود سرعت، ارتفاع و قدرت پرتاب لازم برای برخورد تیر به هدف را تخمین زدهاید.
در فرایند بالا میبینید که با هر بار برخورد دارت روی تخته میزان خطاب خود را میسنجید و این کار را تا زمانی که به هدف بزنید، ادامه میدهید.
فرایند آموزش در شبکههای عصبی نیز از این فرایند پیروی میکند. شما با چند وزن و بردار Bias تصادفی شروع میکنید، نتیجه را پیشبینی کرده و آن را با خروجی مورد نظر خود مقایسه میکنید. شما باید این فرایند را تا زمانی که فاصله بین پیشبینیها و نتیجه درست به حداقل برسد، ادامه دهید.
دانستن زمان درست برای پایان آموزش و میزان دقت لازم برای رسیدن به اهداف مورد نظر یکی از مهمترین جنبههای شبکههای عصبی است، چرا که بدون تعیین درست این موارد ممکن است یکی از سناریوهای Overfitting یا Underfitting اتفاق بیفتد.
بردارها و وزنها
کار کردن با شبکههای عصبی در واقع شامل انجام عملیات با بردارها است. در فرایند آموزش بردارها با آرایههای چند وجهی نشان داده میشوند. بردارها به دلیل وجود عملیات ضرب داخلی در یادگیری عمیق بسیار کاربردی هستند. ضرب داخلی دو بردار مقدار شباهت آنها را نشان داده و با بزرگی دو بردار اندازهگیری میشود.
دو بردار اصلی در شبکههای اصلی بردارهای وزن و Bias هستند. به طور خلاصه یک شبکه عصبی باید تشخیص دهد ورودی شما با ورودیهایی که قبلا دیده است مطابقت دارد یا نه. اگر ورودیها یکسان باشند، پس خروجیها هم باید یکسان باشند. به این ترتیب نتیجه پیشبینی مشخص میشود.
مدل رگرسیون خطی
رگرسیون زمانی استفاده میشود که شما قصد دارید رابطه بین یک متغیر وابسته و دو یا بیش از دو متغیر مستقل را حدس بزنید. در رگرسیون خطی شما رابطه بین متغیرها را خطی در نظر میگیرید. این روش به قرن ۱۹ میلادی برمیگردد و محبوبترین مدل رگرسیون است.
با مدلسازی رابطه بین متغیرها به صورت خطی، میتوانید متغیرهای وابسته را به عنوان جمع وزنشده متغیرهای مستقل ارائه دهید. بنابراین هر متغیر مستقل در یک بردار به نام وزن ضرب میشود. در کنار وزنها و متغیرهای مستقل، یک بردار دیگر به نام Bias هم داریم. این بردار زمانی که همه متغیرهای مستقل دیگر معادل صفر هستند، نتیجه را مشخص میکند.
تصویر کنید میخواهید یک مدل برای پیشبینی قیمت خانهها بر اساس سال ساخت و محله بسازید. تصمیم میگیرد که این کمدل را بر اساس رگرسیون خطی بسازید. معادله زیر نشان میدهد چطور یک مدل رگرسیون خطی برا مشکل ذکرشده بسازید.
۱ |
price = (weights_area * area) + (weights_age * age) + bias |
در مثال بالا دو وزن داریم: weights_area و weights_age. فرایند آموزش شامل تنظیم وزنها و بایاس برای پیشبینی صحیح قیمت است. برای رسیدن به این مقصود، باید خطای محاسبات را محاسبه کرده و وزنها را با توجه به آن به روز کنید.
خب حالا که مفاهیم و اصول اولیه شبکههای عصبی را یاد گرفتیم، میتوانیم از آنها در پایتون استفاده کنیم. در قسمت بعدی نشان میدهیم که چطور با استفاده از این مفاهیم و پایتون، یک شبکه عصبی بسازیم.