شبکههای عصبی خطی
شبکههای عصبی خطی از سادهترین انواع شبکههای عصبی هستند که میتوانند برای حل مسائل مختلف از جمله رگرسیون و طبقهبندی به کار روند.
شبکههای عصبی خطی از سادهترین انواع شبکههای عصبی هستند که میتوانند برای حل مسائل مختلف از جمله رگرسیون و طبقهبندی به کار روند. در این شبکهها، ورودیها به صورت خطی با وزنها ترکیب میشوند و نتیجه به عنوان خروجی شبکه محاسبه میشود. با وجود سادگی، این نوع شبکهها پایههای اساسی برای درک شبکههای عصبی پیچیدهتر را فراهم میکنند. در ادامه، به توضیح شبکههای عصبی خطی برای دو نوع مسئلهی رایج یعنی رگرسیون و طبقهبندی میپردازیم.
۱. شبکههای عصبی خطی برای رگرسیون
(Linear Neural Networks for Regression)
مقدمه: یک شبکه عصبی خطی برای رگرسیون، شبکهای ساده است که خروجی آن یک ترکیب خطی از ورودیها میباشد. این شبکه برای پیشبینی مقادیر پیوسته مانند قیمت خانه، دما یا سایر کمیتها به کار میرود.
نحوه کار:
- لایه ورودی: ورودیها شامل ویژگیهای داده (مانند اندازه خانه، تعداد اتاقها) هستند.
- وزنها: هر ویژگی ورودی در یک وزن ضرب میشود. این وزنها مشخص میکنند که هر ویژگی چقدر در پیشبینی نهایی تأثیر دارد.
- بایاس: یک مقدار ثابت که به مجموع خطی ورودیها و وزنها اضافه میشود.
- خروجی: مجموع وزنی ورودیها به علاوهی بایاس پیشبینی را تولید میکند. چون مسئله رگرسیون است، خروجی یک مقدار پیوسته خواهد بود.
از دید ریاضی:
تابع زیان:
میانگین مربع خطا (MSE): رایجترین تابع زیان برای رگرسیون است که میانگین مربع اختلاف بین مقادیر پیشبینیشده و واقعی را اندازهگیری میکند.
مثال:
فرض کنید میخواهیم قیمت یک خانه را بر اساس متراژ آن پیشبینی کنیم. شبکه عصبی خطی به متراژ خانه یک وزن اختصاص میدهد، آن را در ورودی ضرب میکند و بایاس را اضافه میکند تا قیمت خانه را پیشبینی کند.
۲. شبکههای عصبی خطی برای طبقهبندی
(Linear Neural Networks for Classification)
مقدمه: یک شبکه عصبی خطی برای طبقهبندی، ساختاری مشابه شبکهی رگرسیون دارد اما برای پیشبینی دستههای گسسته (مانند اسپم یا غیر اسپم، گربه یا سگ) به کار میرود. خروجی شبکه معمولاً از طریق یک تابع فعالسازی به احتمال دستههای مختلف تبدیل میشود.
نحوه کار:
- لایه ورودی: مانند رگرسیون، ورودیها شامل ویژگیها (مانند مقادیر پیکسلی یک تصویر) هستند.
- وزنها و بایاس: همانند رگرسیون، هر ویژگی ورودی در یک وزن ضرب میشود و بایاس اضافه میشود.
- لایه خروجی: برای هر کلاس یک نمره تولید میشود. این نمرات از طریق یک تابع فعالسازی به احتمالها تبدیل میشوند.
تفاوتهای کلیدی
- نوع خروجی:
- رگرسیون: یک مقدار پیوسته را خروجی میدهد (مثلاً پیشبینی یک عدد).
- طبقهبندی: یک مقدار دستهای را خروجی میدهد (مثلاً پیشبینی یک برچسب مانند "گربه" یا "سگ").
- تابع زیان (Loss Function):
- رگرسیون: از توابع زیان مانند میانگین مربعات خطا (MSE) استفاده میکند که میزان فاصله مقادیر پیشبینی شده از مقادیر واقعی را اندازهگیری میکند.
- طبقهبندی: از توابع زیان مانند Cross-Entropy Loss استفاده میکند که میزان تطابق احتمالات پیشبینی شده با برچسبهای دسته واقعی را اندازهگیری میکند.
- تابع فعالسازی (Activation Function):
- رگرسیون: اغلب از تابع فعالسازی خطی یا ReLU برای لایه خروجی استفاده میکند.
- طبقهبندی: اغلب از توابع فعالسازی softmax یا sigmoid برای لایه خروجی استفاده میکند تا امتیازهای خام را به احتمالات تبدیل کند.
در مورد توابع فعال سازی جلوتر با جزییات بیشتر توضیح دادم.
توضیحات تکمیلی
این ویدئو بهترین مقدمه برای رگرسیون خطی است
حالا بیایید جدیتر شویم: با دنبال کردن دستورالعملهای ChatGPT درباره اینکه کدام ویدئوها را به چه ترتیبی ببینیم تا به درک خوبی از موضوع برسیم، ابتدا این سوال را مطرح میکنیم که "شبکههای عصبی چیست؟" از سازندهی محتوای علمی مورد علاقهام
نورونها چیزهایی هستند که عددی بین ۰ و ۱ را نگه میدارند. اعدادی که نگه میدارند، به تصویری که به شبکه داده میشود بستگی دارد. چیزی که از این ویدئو فهمیدم این است که اساس شبکههای عصبی در واقع جبر خطی و ماتریس است، بهویژه ضرب ماتریسها. در هر لایه، هر نورون وزن و بایاس خاص خود را دارد. و تابعی به نام سیگموید محدوده این اعداد را بین ۰ و ۱ نگه میدارد.
بنابراین، کل شبکه به عنوان یک تابع عمل میکند.
این ویدئو ما را به ویدئوی اول درباره دختر و سگش برمیگرداند. چیزی که از این ویدئو یاد گرفتم این است: تصور کنید دادههایی از هر منبعی دارید و این دادهها را به صورت نقاطی روی یک نمودار قرار میدهید. حالا میخواهید یک خط را انتخاب کنید که دقیقترین و نزدیکترین خط به دادههای شما باشد. این خط یک خط راست است. سوال این است که چطور تصمیم میگیرید که این خط کجا باید قرار بگیرد؟ چه چیزی این را تعیین میکند؟
اینجاست که وزنها و متغیرهای دیگر وارد بازی میشوند. فرمولی که ایجاد شد به این صورت بود که یک خط افقی رسم کردند و شروع به اندازهگیری فاصله بین دادهها و خط کردند. سپس این فاصلهها را جمع میکنید و به توان ۲ میرسانید تا از اعداد منفی جلوگیری کنید. در نهایت یک عدد به دست میآید که مجموع فاصلههای هر داده از خط شماست. حالا اگر این خط را حرکت دهید، مجموع این فاصلهها کمتر میشود. هر چه این عدد کوچکتر باشد، بهتر است. بنابراین از فرمول ساده خط استفاده میکنیم y=ax+b
و در ادامه ویدئو میبینید که چرا مشتقات برای پیدا کردن شیبها و در نهایت خط مناسب مفید هستند.
تمرین نحوه نمایش کدها در PyCharm
برای تمرین نحوه نمایش کدها در PyCharm و آشنایی با این محیط، میتوانید به لینک زیر مراجعه کنید: Encyclopedia of Neural Networks
این لینک، به شما اطلاعات جامع و کاملی درباره شبکههای عصبی ارائه میدهد، اما توضیحات آن ممکن است کمی سخت باشد. بنابراین در اینجا یک خلاصه ساده از مفاهیم اصلی ارائه شده است.
توابع فعالسازی چیستند؟
برای آشنایی بیشتر با توابع فعالسازی، میتوانید مقاله سادهشده در DataCamp را مشاهده کنید: مقاله DataCamp درباره توابع فعالسازی
تابع فعالسازی
توابع فعالسازی در شبکههای عصبی به نورونها کمک میکنند تا تصمیم بگیرند که چه اطلاعاتی را به لایه بعدی ارسال کنند. این توابع با اعمال تغییراتی بر روی ورودیها، خروجی نهایی نورون را تعیین میکنند. چند تابع فعالسازی رایج عبارتند از:
Sigmoid
ورودی را به یک مقدار بین 0 و 1 تبدیل میکند. معمولاً برای خروجیهای احتمالی در طبقهبندی باینری استفاده میشود.
ReLU (Rectified Linear Unit)
هر ورودی منفی را به صفر و مقادیر مثبت را به همان صورت باقی میگذارد. بسیار پرکاربرد است زیرا به سرعت شبکهها کمک میکند.
Tanh
ورودی را به یک مقدار بین -1 و 1 تبدیل میکند. شبیه به Sigmoid است، اما خروجیها میتوانند منفی هم باشند، که یادگیری بهتر را ممکن میسازد.
Softmax
برای طبقهبندی چندکلاسه استفاده میشود. خروجیها را به احتمالهایی بین 0 و 1 تبدیل میکند که مجموع آنها برابر 1 است.
این توابع به شبکه عصبی امکان میدهند تا بتواند الگوهای پیچیده و غیرخطی را یاد بگیرد و در نتیجه، مدلهای دقیقتری بسازد.
چرا توابع فعالسازی مهم هستند؟
- معرفی غیرخطی بودن: بدون توابع فعالسازی، شبکههای عصبی تنها قادر به یادگیری و نمایش روابط خطی خواهند بود. دادههای واقعی معمولاً غیرخطی هستند، به این معنی که روابط پیچیدهتری وجود دارد که باید یاد گرفته شوند. توابع فعالسازی به شبکه اجازه میدهند تا این الگوهای غیرخطی را شناسایی کند.
- امکان یادگیری الگوهای پیچیده: با معرفی غیرخطیها، توابع فعالسازی به شبکههای عصبی اجازه میدهند تا دادههای پیچیده را یاد بگیرند و مدلسازی کنند، که برای کارهایی مانند شناسایی تصویر و گفتار ضروری است.
انتخاب تابع فعالسازی مناسب
انتخاب تابع فعالسازی میتواند تاثیر قابل توجهی بر عملکرد شبکه عصبی داشته باشد. در اینجا برخی از دستورالعملها آورده شده است:
- برای لایههای پنهان: ReLU و انواع آن (مانند Leaky ReLU) معمولاً انتخابهای خوبی هستند زیرا به شبکهها کمک میکنند سریعتر آموزش ببینند و عملکرد بهتری داشته باشند.
برای لایههای خروجی: از Sigmoid برای طبقهبندی باینری، از Softmax برای طبقهبندی چندکلاسه و از Tanh برای خروجیهایی که میتوانند در بازه -1 تا 1 باشند، استفاده کنید.
پسانتشار (Backpropagation)
روشی است که در آموزش شبکههای عصبی استفاده میشود. این روش به شبکه کمک میکند تا با تنظیم وزنهای خود (پارامترها) برای کم کردن خطای بین پیشبینیهای خود و نتایج واقعی، یاد بگیرد.
نحوه کار:
- پاس جلو: دادههای ورودی از طریق شبکه عبور میکند و پیشبینیها انجام میشود.
- محاسبه خطا: تابع زیان تفاوت بین پیشبینیها و نتایج واقعی را اندازهگیری میکند.
- پاس برگشت:
- مرحله ۱: خطا به عقب در شبکه انتشار داده میشود.
- مرحله ۲: شبکه وزنهای خود را بهروزرسانی میکند تا خطا کاهش یابد. این بهروزرسانی با استفاده از روش گرادیان کاهشی انجام میشود.
چرا به آن Backpropagation میگویند؟ این نام به این دلیل است که خطا در خروجی محاسبه شده و سپس به عقب از طریق شبکه ارسال میشود تا وزنها بهروزرسانی شوند.
مراحل Backpropagation:
- شروع: با وزنهای تصادفی شروع کنید.
- پاس جلو: پیشبینیها را با استفاده از وزنهای فعلی محاسبه کنید.
- محاسبه زیان: از تابع زیان برای محاسبه خطا استفاده کنید.
- پاس برگشت:
- محاسبه گرادیانها: (مشتقات جزئی زیان نسبت به هر وزن).
- تنظیم وزنها: برای کاهش زیان.
- تکرار: تعداد زیادی پاس جلو و عقب انجام دهید تا شبکه یاد بگیرد پیشبینیهای دقیقتری انجام دهد.
پس به بیانی ساده تر:
۱. پاس جلو (Forward Pass):
- با وارد کردن دادههای ورودی به شبکه عصبی شروع میکنید.
- شبکه پیشبینیهایی بر اساس این دادهها انجام میدهد.
۲. محاسبه خطا (Calculate Error):
- پس از اینکه شبکه پیشبینیها را انجام داد، این پیشبینیها را با نتایج واقعی (پاسخهای درست) مقایسه میکنید.
- این مقایسه به شما خطا یا زیان میدهد که میزان اشتباه پیشبینیهای شبکه را اندازهگیری میکند.
۳. پاس برگشتی (Backward Pass):
- این مرحله، جایی است که بازگشتپراکنش اتفاق میافتد. شبکه از خطای محاسبه شده در مرحله قبلی برای بهروزرسانی وزنهای خود (پارامترهایی که کمک میکنند تا پیشبینیها انجام شوند) استفاده میکند.
- خطا به صورت برگشتی از لایه خروجی به لایه ورودی شبکه پراکنده میشود.
- در طول این پاس برگشتی، شبکه محاسبه میکند که هر وزن چقدر در ایجاد خطا نقش داشته است.
۴. بهروزرسانی وزنها (Update Weights):
- با استفاده از اطلاعات بهدستآمده از پاس برگشتی، شبکه وزنهای خود را برای کاهش خطا بهروزرسانی میکند.
- این بهروزرسانی با استفاده از تکنیکی به نام نزول گرادیان (Gradient Descent) انجام میشود که به شبکه کمک میکند بهترین وزنها را برای انجام پیشبینیهای دقیق یاد بگیرد.
۵. تکرار (Repeat):
- این فرآیند شامل پاس جلو، محاسبه خطا، پاس برگشتی و بهروزرسانی وزنها بارها و بارها با دادههای مختلف تکرار میشود.
- با گذشت زمان، این تنظیمات مکرر به شبکه کمک میکند تا یاد بگیرد و دقت خود را بهبود بخشد.
در اصل، بازگشتپراکنش به شبکه عصبی کمک میکند تا از اشتباهات خود یاد بگیرد و با تنظیم پارامترهای داخلی خود بهتر پیشبینی کند.
خلاصه:
در این مقاله، به بررسی شبکههای عصبی خطی و کاربردهای آنها در مسائل رگرسیون و طبقهبندی پرداختیم. شبکههای عصبی خطی به عنوان سادهترین نوع شبکههای عصبی، با استفاده از ترکیب خطی ورودیها و وزنها، میتوانند مقادیر پیوسته و دستههای گسسته را پیشبینی کنند. برای رگرسیون، این شبکهها مقادیر پیوستهای مانند قیمت خانهها را پیشبینی میکنند، در حالی که برای طبقهبندی، این شبکهها با استفاده از توابع فعالسازی، احتمال تعلق دادهها به دستههای مختلف را محاسبه میکنند. همچنین به تفاوتهای کلیدی این دو نوع شبکه از جمله نوع خروجی، تابع زیان و توابع فعالسازی اشاره شد.
پینوشت:
شبکههای عصبی خطی با وجود سادگی، پایهای محکم برای درک و توسعه شبکههای عصبی پیچیدهتر فراهم میکنند. این شبکهها، از طریق پسانتشار و بهینهسازی وزنها، میتوانند به نتایج دقیقی در مسائل مختلف دست یابند. برای کسانی که به دنبال یادگیری مفاهیم پیشرفتهتر هستند، پیشنهاد میشود با بررسی جزئیات این مقاله و استفاده از منابع ویدئویی مرتبط، تسلط بیشتری بر مفاهیم شبکههای عصبی پیدا کنند.
راههای ارتباط:
ایمیل: bita.nf@gmail.com
لینکدین : www.linkedin.com/in/bita-farahmand-58363a232
توییتر: BitaBloom@