زمان مطالعه: 17 دقیقه
شبکه عصبی پیشخور (Feedforward Neural Network) یکی از انواع اصلی شبکههای عصبی مصنوعی است. در این نوع شبکه عصبی، اطلاعات در یک جهت (از ورودی به خروجی) جریان پیدا میکنند و هیچ گونه بازخوردی از خروجی به ورودی وجود ندارد. شبکه عصبی پیشخور از یک یا چند لایه پنهان (hidden layer) و یک لایه خروجی (output layer) تشکیل شده است. هر لایه پنهان شامل یک یا چند نرون است که هر کدام با نرونهای لایه قبلی کاملا متصل هستند. در هر نرون، اطلاعات ورودی با وزنهای مشخصی ضرب میشوند و مقدار حاصل به یک تابع فعالسازی (activation function) اعمال میشود. سپس، خروجی حاصل از تابع فعالسازی به نرونهای لایه بعدی منتقل میشود. یک شبکه عصبی پیشخور در فرآیند آموزش، با دادن مجموعه اطلاعات ورودی و خروجی متناظر به شبکه، وزنهای مربوط به هر اتصال بین سلولهای عصبی را به صورت خودکار و بهبودیافته تنظیم میکند. این فرآیند یادگیری میتواند به صورت نظارتشده (supervised)، بدون نظارت (unsupervised) یا نیمه نظارتشده (semi-supervised) باشد که بسته به نوع مسئله و دادههای آموزشی مورد استفاده است. شبکههای عصبی پیشخور به دلیل قابلیت مدلسازی توابع پیچیده و استفاده گسترده در حوزههای گوناگون مانند تشخیص الگو، تشخیص صدا، تشخیص تصویر، پردازش زبان طبیعی و غیره، بسیار محبوب هستند.
چه تفاوتی بین شبکه عصبی پیشخور و شبکه عصبی بازگشتی وجود دارد؟
تفاوت اصلی بین شبکه عصبی پیشخور (Feedforward Neural Network) و شبکه عصبی بازگشتی (Recurrent Neural Network) در جریان اطلاعات است. همانگونه که اشاره کردیم در شبکه عصبی پیشخور، اطلاعات در یک جهت از لایه ورودی به لایه خروجی جریان میکنند و هیچ گونه بازخوردی از خروجی به ورودی وجود ندارد. به عبارت دیگر، هر نرون در لایه خروجی تنها از سلولهای عصبی قبلی خود تاثیر میپذیرد و هیچ تاثیری از خودش بر روی نرونهای قبلی ندارد. این نوع شبکه عموما برای مسایلی که به صورت تک مرحلهای حل میشوند و نیازی به حفظ حالت گذشته ندارند، استفاده میشود. اما در شبکه عصبی بازگشتی، اطلاعات به جهت جلو و به صورت بازخوردی جریان دارند. یعنی خروجی یک نرون میتواند به عنوان ورودی برای نرونهای قبلی در زمانهای بعدی استفاده شود. به این ترتیب، این شبکهها قادر به حفظ حالت گذشته و استفاده از اطلاعات قبلی هستند. این ویژگی باعث میشود که شبکههای عصبی بازگشتی برای مسایلی که وابستگی به زمان و دنبالههای ورودی دارند، مانند ترجمه ماشینی، تشخیص گفتار، پردازش زبان طبیعی و غیره، بسیار مناسب باشند. به طور خلاصه، تفاوت اصلی بین شبکه عصبی پیشخور و شبکه عصبی بازگشتی در جریان اطلاعات است، که در شبکه عصبی بازگشتی بازخورد زمانی وجود دارد و اطلاعات میتوانند به طور بازگشتی از خروجی به ورودی منتقل شوند.
آیا شبکه عصبی بازگشتی میتواند در تشخیص الگوهای زمانی مفید باشد؟
پاسخ مثبت است. شبکه عصبی بازگشتی (Recurrent Neural Network) برای تشخیص الگوهای زمانی بسیار مفید است. به عنوان یک نوع کاربردی از شبکههای عصبی، شبکههای عصبی بازگشتی دارای حافظه زمانی هستند که امکان حفظ و استفاده از اطلاعات قبلی را فراهم میکنند. با استفاده از بازخورد زمانی، شبکه عصبی بازگشتی قادر است تا الگوهای زمانی پیچیده را تشخیص دهد. این شبکهها میتوانند به صورت توالی و به ترتیب دنبالههای ورودی را پردازش کنند و توجه به ترتیب و ارتباط بین اجزای دنباله را داشته باشند. به عبارت دیگر، آنها قادرند الگوهایی که بر اساس توالی و ترتیب زمانی ایجاد میشوند را شناسایی و تشخیص دهند. به عنوان مثال، در حوزه تشخیص گفتار، شبکههای عصبی بازگشتی میتوانند به طور موثری از الگوهای زمانی در گفتار استفاده کنند. آنها قادرند اطلاعات صوتی را به صورت توالی و به ترتیب زمانی پردازش کنند و با استفاده از حافظه زمانی خود، الگوهای مفهومی در گفتار را شناسایی کنند مانند تشخیص کلمات و جملات.
بنابراین، شبکه عصبی بازگشتی به دلیل قابلیت حفظ حالت گذشته و استفاده از بازخورد زمانی، بسیار مناسب برای تشخیص الگوهای زمانی است و در بسیاری از حوزهها مانند ترجمه ماشینی، تشخیص گفتار، پردازش زبان طبیعی، پیشبینی سری زمانی و غیره مورد استفاده قرار میگیرند.
چه نوع مسایلی میتوانند با استفاده از شبکه عصبی پیشخور حل شوند؟
شبکه عصبی پیشخور (Feedforward Neural Network) در بسیاری از مسایل مختلف میتواند مورد استفاده قرار بگیرد. این شبکهها دارای لایههای ورودی، لایههای پنهان و لایههای خروجی هستند و اطلاعات در آنها به یک جهت (یعنی از لایه ورودی به لایه خروجی) جریان دارد. این شبکهها در زمینه تشخیص الگو کاربرد دارند. شبکه عصبی پیشخور قادر است الگوهای پیچیده و غیرخطی را در دادهها تشخیص دهد. مثالهایی از این نوع مسایل شامل تشخیص تصاویر (مانند تشخیص تصاویر اشیا، تشخیص چهره و تشخیص عناصر در تصاویر) و تشخیص الگوهای صوتی (مانند تشخیص سیگنالهای صوتی، تشخیص ساختار موسیقی و تشخیص گفتار) است. شبکه عصبی پیشخور میتواند در مسایل طبقهبندی دادهها عملکرد مفیدی داشته باشد که این شامل طبقهبندی متن (مانند تشخیص احساسات در متن، تشخیص دستهبندی خبرها و تشخیص زبان متن)، طبقهبندی تصاویر (مانند تشخیص دستهبندی تصاویر، تشخیص شی در تصاویر و تشخیص چهره) و طبقهبندی صوت (مانند تشخیص گونههای صدا و تشخیص تلفظ) است.
همچنین، در زمینه پیشبینی و رگرسیون نیز مورد استفاده قرار میگیرد. برای مثال، پیشبینی قیمتهای سهام، پیشبینی قیمت خودروها، پیشبینی میزان تقاضا برای محصولات و پیشبینی ترافیک را میتوان با استفاده از شبکه عصبی پیشخور حل کرد. یکی دیگر از کاربردهای شبکههای عصبی پیشخور در سامانههای توصیهگر (Recommendation Systems) استفاده شود که شامل توصیه محصولات در فروشگاههای آنلاین، پیشنهاد فیلم و موسیقی و غیره میشود.
شبکههای عصبی پیشخور را میتوان به گونهای آموزش داد تا در زمینه تشخیص تقلب در معاملات بانکی، تشخیص سرقت هویت و تشخیص عملیات غیرمجاز در سیستمهای امنیتی استفاده شود. علاوه بر این، شبکههای فوق در زمینه تولید تصاویر واقعیت مجازی، تصحیح تصاویر خراب و ترمیم تصاویر نیز کاربرد دارند. موارد یاد شده تنها چند نمونه از مسایلی هستند که با استفاده از شبکههای عصبی پیشخور قابل حل هستند، اما لازم به ذکر است که هر مساله خاص نیازمند بررسی و طراحی درست شبکههای عصبی است تا مساله به شکل بهینه و درست حل شود.
یک مثال کاربردی از شبکه عصبی پیشخور
به عنوان یک مثال کاربردی، فرض کنید شما میخواهید یک سیستم تشخیص تصاویر را بسازید که بتواند در تصاویر اشیا را تشخیص دهد. از شبکه عصبی پیشخور میتوان برای حل این مساله استفاده کرد. مراحل اجرای این مثال به صورت زیر است:
جمعآوری داده: ابتدا نیاز به مجموعهای از تصاویر دارید که تصویر اشیا مختلف در آن دستهبندی شده باشد. به عنوان مثال، شما میتوانید تصاویری از اشیا مختلف مانند خرس، ماشین، سگ و گربه را جمعآوری کنید. هر تصویر باید به همراه برچسب دستهبندی آن (مثلا “خرس”، “ماشین”، “سگ” یا “گربه”) ذخیره شود.
پیشپردازش داده: تصاویر جمعآوری شده باید پیشپردازش شوند تا به شکل مناسبی برای ورودی شبکه عصبی تبدیل شوند. این مرحله ممکن است شامل تغییر اندازه تصاویر، تبدیل آنها به سیاه و سفید، نرمالسازی و استانداردسازی رنگها و سایر فرآیندهای پیش پردازش باشد.
ساختار شبکه عصبی: باید یک ساختار شبکه عصبی پیشخور مناسب را طراحی کنید. این شبکه میتواند شامل لایههای ورودی، لایههای پنهان (hidden layers) و لایههای خروجی باشد. همچنین، باید تعداد نورونها و توزیع آنها در هر لایه را تعیین کنید.
آموزش شبکه: با استفاده از دادههای جمعآوری شده و پیشپردازش شده، شبکه عصبی را برای تشخیص اشیا آموزش میدهیم. این فرایند شامل تغییر وزنها و پارامترهای شبکه است تا بهترین عملکرد را در تشخیص الگوها به دست آورد.
ارزیابی شبکه: پس از آموزش شبکه، باید آن را بر روی دادههای آزمایشی ارزیابی کنیم. در این مرحله، شبکه بر روی تصاویری که قبلا دستهبندی نشدهاند، استفاده میشود تا دقت تشخیص اشیا مورد بررسی قرار گیرد.
بعد از این که شبکه عصبی ما روی دادههای آزمایشی ارزیابی شد و دقت قابل قبولی را داشت، میتوانیم از آن برای تشخیص اشیا در تصاویر جدید استفاده کنیم. برای این کار، تصاویر جدید را به شبکه عصبی وارد میکنیم و شبکه عصبی با استفاده از الگوریتمهای خود، اشیا موجود در تصویر را تشخیص میدهد و دستهبندی میکند. در نتیجه، شبکه عصبی پیشخور با استفاده از دادههای آموزش، به صورت خودکار و بدون نیاز به الگوریتمهای دستی، میتواند اشیا موجود در تصاویر را تشخیص دهد و از آن در برنامهها و سیستمهایی که نیاز به تشخیص تصاویر دارند، استفاده کرد.
روشهای ارزیابی دقت شبکه عصبی پیشخور
متخصصان یادگیری ماشین و یادگیری عمیق راهکارهای مختلفی برای ارزیابی دقت این مدل شبکهها در اختیار دارند که از آن جمله به موارد زیر باید اشاره کرد.
ماتریس درهم ریختگی (Confusion Matrix): ماتریس درهم ریختگی یک روش قدرتمند برای ارزیابی دقت شبکه عصبی است. این ماتریس نشان میدهد که شبکه عصبی چه تعداد نمونهها را به درستی دستهبندی کرده است و چه تعداد نمونه را به طور نادرست دستهبندی کرده است. با بررسی ماتریس درهم ریختگی، میتوان دقت، صحت، قدرت پیشبینی شبکه و سایر معیارهای ارزیابی را محاسبه کرد.
دقت (Accuracy): دقت به عنوان یک معیار ساده و معروف برای ارزیابی شبکه عصبی مورد استفاده قرار میگیرد. این معیار نسبت تعداد نمونههایی که به درستی دستهبندی شدهاند به کل تعداد نمونهها را محاسبه میکند.
درصد خطا (Error Rate): درصد خطا به عنوان معکوس دقت تعریف میشود و نشان میدهد که شبکه عصبی چه درصد از نمونهها را به طور نادرست دستهبندی کرده است. این معیار میزان خطا را به صورت درصدی نشان میدهد.
دقت میکرو و ماکرو (Micro-accuracy and Macro-accuracy): اگر دادهها دارای توزیع نامتوازن دستهها باشند، معیار دقت می تواند به طور نادرست مقداری از کلاسهای کمتر را نادیده بگیرد. در این مواقع، میتوان از دقت میکرو و ماکرو استفاده کرد. دقت میکرو معیاری است که تمام نمونهها را در نظر میگیرد و دقت کلی را محاسبه میکند. اما دقت ماکرو میانگین دقت هر کلاس را محاسبه میکند.
منحنی مشخصه عملکرد (ROC Curve): این منحنی برای ارزیابی عملکرد شبکه عصبی بر روی مسایل دستهبندی دوکلاسه استفاده میشود. این منحنی نشان میدهد که با تغییر آستانه تصمیمگیری، نرخ درست مثبت و نرخ نادرست مثبت چگونه تغییر میکند. معیارهایی مانند مساحت زیر نمودار ROC (AUC-ROC) نیز میتوانند برای مقایسه عملکرد شبکههای عصبی مورد استفاده قرار بگیرند.
علاوه بر موارد فوق، بسته به نوع مساله و ویژگیهای دادهها، معیارهای دیگری نیز میتوانند برای ارزیابی دقت شبکه عصبی استفاده شوند. به عنوان مثال، برای مسایل چندکلاسه، میتوان از معیارهای مانند ماتریس درهمریختگی چندکلاسه، دقت کلاس مشخص، بازخوانی کلاس و دقت فوقالعاده (F1 score) استفاده کرد.
شبکه عصبی پیشخور (FFN) چطور کار میکند؟
شبکه عصبی پیشخور یکی از سادهترین و پرکاربردترین معماریهای شبکه عصبی است. در FFN، اطلاعات از لایه ورودی به صورت یک جریان یکسره عبور میکنند و هیچ اتصالی بین نورونهای هممرز وجود ندارد. به طور کلی نحوه کار و مولفههای اصلی یک شبکه عصبی پیشخور به شرح زیر است.
لایه ورودی (Input Layer) که مسئول دریافت دادههای ورودی است. هر نورون در این لایه نماینده یک ویژگی ورودی است و هیچ پردازشی بر روی ورودیها انجام نمیدهد. لایههای پنهان (Hidden Layers) که بین لایه ورودی و خروجی قرار دارند و مسئولیت استخراج ویژگیهای پیچیدهتر از دادههای ورودی را دارند. هر لایه پنهان شامل یک تعداد نورون است که با یکدیگر ارتباط دارند. وزنها بین نورونها در هر لایه تعیین میشوند و عملیات محاسباتی مانند ضرب ماتریسی و تابع فعالسازی بر روی خروجیهای لایه قبلی انجام میشود.
لایه خروجی (Output Layer) که نتایج نهایی شبکه را تولید میکند. تعداد نورونها در این لایه وابسته به نوع مسالهای است که شبکه برای آن طراحی شده است. برای مسایل دستهبندی چندکلاسه معمولا از یک نورون برای هر کلاس استفاده میشود، در حالی که برای مسایل رگرسیون میتواند یک نورون مستقل برای هر ویژگی خروجی وجود داشته باشد. وزنها (Weights) که هر اتصال بین دو نورون در شبکه را نشان میدهند. این وزنها نشان دهنده اهمیت و نقش نورونهای ورودی در تعیین خروجی نورونهای لایه بعدی است. هنگام آموزش شبکه، وزنها به صورت تصادفی مقداردهی اولیه میشوند و سپس با استفاده از الگوریتم بهبود دهنده مانند پسانتشار خطا (Backpropagation) بهبود مییابند.
تابع فعالسازی (Activation Function) که در هر نورون برای تبدیل جمع وزنها و ورودیهای نورون به یک خروجی استفاده میشود. این تابع به صورت غیر خطی است و به شبکه عصبی قابلیتها و پیچیدگیهای غیرخطی را میدهد. برخی از توابع فعالسازی معروف شامل تابع سیگموید (Sigmoid)، تابع تانژانت هیپربلیک (Hyperbolic Tangent) و تابع ReLU (Rectified Linear Unit) هستند. هنگامی که دادهها در لایههای مختلف پردازش شدند نوبت به انتقال (Propagation) میرسد. در مرحله آموزش شبکه، اطلاعات از لایه ورودی به طور ترتیبی از یک لایه به لایه دیگر منتقل میشوند. این عملیات به عنوان انتقال به جلو (Forward Propagation) شناخته میشود. هر نورون در لایه بعدی خروجی خود را بر اساس وزنها و خروجیهای لایه قبلی محاسبه کرده و به لایه بعدی منتقل میکند. در مرحله آموزش (Training) با استفاده از مجموعهای از دادههای آموزشی و برچسبهای متناظر، وزنها را ویرایش میکنیم. این عملیات با استفاده از الگوریتم پسانتشار خطا (Backpropagation) صورت میگیرد که به شبکه اجازه میدهد خطا را به عقب منتقل کرده و وزنها را به روزرسانی کند.
پس از آموزش شبکه، میتوان از آن برای پیشبینی و تولید خروجی بر روی دادههای جدید استفاده کرد. دادههای جدید از لایه ورودی به صورت ترتیبی در شبکه عبور میکنند و پاسخ توسط لایه خروجی تولید میشود. این مراحل به طور خلاصه نحوه کار شبکه عصبی پیشخور (FFN) را شرح میدهند. با تغییر تعداد و اندازه لایههای پنهان و تعیین توابع فعالسازی مختلف، میتوان معماریهای شبکه عصبی پیچیدهتری را ساخت و برای مسایل مختلف استفاده کرد.
چرا از لایههای پنهان استفاده میکنیم؟
استفاده از لایههای پنهان در شبکههای عصبی به دلایل مهمی انجام میگیرد که اولین مورد استخراج ویژگیهای پیچیده است. لایههای پنهان به شبکه امکان میدهند تا ویژگیهای پیچیدهتر از دادههای ورودی را استخراج کند. با افزایش تعداد لایههای پنهان، شبکه قادر خواهد بود ویژگیهای پیچیدهتر و ساختارهای دادهای عمیقتر را نمایش دهد و در نتیجه، میتواند الگوهای پیچیدهتر را در دادهها شناسایی کند.
مورد بعد در ارتباط با تعمیمپذیری بهتر است. استفاده از لایههای پنهان به شبکه عصبی امکان میدهد تا تعمیم پذیری (Generalization) بهتری داشته باشد. با وجود لایههای پنهان، شبکه قادر است الگوهای کلی و قابل تعمیم را از دادهها استخراج کند و بهترین تطابق را با دادههای جدید برقرار کند. این لایهها نقش مهمی در رفع مشکل بیشبرازش (Overfitting) دارند. لایههای پنهان در شبکه عصبی میتوانند به کاهش مشکل بیشبرازش کمک کنند. بیشبرازش وقتی به وجود میآیند که شبکه به شکل زیادی به دادههای آموزشی خود عادت کرده و نمیتواند با دادههای جدید به خوبی عمل کند. با استفاده از لایههای پنهان و کنترل تعداد پارامترها، احتمال بیشبرازش کاهش مییابد و شبکه قادر است الگوهای عمومیتر را یاد بگیرد. لایههای پنهان به شبکه عصبی امکان میدهند تا اطلاعات را در سطوح مختلف از ساده به پیچیده پردازش کنند. هر لایه پنهان در شبکه میتواند ویژگیهای مختلف را استخراج کند و این اطلاعات در لایههای پیشرفتهتر مورد ترکیب و استفاده قرار بگیرند. این نمایش سلسله مراتبی اطلاعات میتواند به شبکه کمک کند تا ویژگیها را به شکل سلسله مراتبی و ساختارمند فرا بگیرد.
در نهایت با استفاده از لایههای پنهان، شبکه عصبی قادر است مسایل پیچیدهتر را حل کند. با افزایش تعداد لایههای پنهان، شبکه قادر خواهد بود الگوها و روابط پیچیدهتری را در دادهها بیابد و استخراج کند. این امر به شبکه امکان میدهد تا در حل مسایلی مانند تشخیص تصویر، ترجمه ماشینی، تشخیص گفتار و سایر وظایف پیچیده عملکرد بهتری داشته باشد. به طور کلی، استفاده از لایههای پنهان در شبکههای عصبی به ما امکان میدهد با استفاده از ساختار عمیقتر و پیچیدهتر، الگوها و ویژگیهای پیچیدهتری را از دادهها استخراج کنیم و در نتیجه، عملکرد مدل را بهبود بخشیم.
توابع فعالساز چه نقشی در این شبکهها دارد؟
توابع فعالساز (activation functions) در شبکههای عصبی برای اعمال یک نوع تبدیل غیرخطی به خروجی لایههای پنهان و نیز خروجی نهایی استفاده میشوند. این توابع به شبکه عصبی کمک میکنند تا نمایش غیر خطی و پیچیدهتری از دادهها را فرا بگیرد. برخی از توابع فعالساز رایج که به شکل گسترده در شبکههای عصبی مورد استفاده قرار میگیرند به شرح زیر هستند.
تابع سیگموید (Sigmoid): تابع سیگموید یک تابع غیرخطی است که خروجی آن در بازه 0 تا 1 قرار دارد. فرمول تابع سیگموید به صورت زیر است:
f(x) = 1 / (1 + exp(-x))
این تابع معمولا در شبکههای عصبی استفاده میشود که خروجی بین دو مقدار یا دو دسته بندی (مانند بین 0 و 1) باشد. با این حال، از آن به عنوان تابع فعالساز لایههای پنهان نیز استفاده میشود، اما مشکلی که در استفاده از تابع سیگموید وجود دارد، این است که در محدوده دور از صفر یا یک، مشتق آن به صفر نزدیک میشود و میتواند موجب مشکلاتی همچون کاهش گرادیان (vanishing gradient) شود.
تابع تانژانت هیپربلیک (Tanh): تابع تانژانت هیپربلیک نیز مانند تابع سیگموید یک تابع غیر خطی است، اما خروجی آن در بازه -1 تا 1 قرار دارد. فرمول تابع تانژانت هیپربلیک به صورت زیر است:
f(x) = (exp(x) – exp(-x)) / (exp(x) + exp(-x))
شبیه به تابع سیگموید، تابع تانژانت هیپربلیک نیز در برخی موارد به عنوان تابع فعالساز استفاده میشود. این تابع نسبت به تابع سیگموید دارای محدودیت کمتری است و مشکل کاهش گرادیان را کمتر تجربه میکند.
تابع ReLU سرنام (Rectified Linear Unit): تابع ReLU یکی از توابع فعالساز پر استفاده در شبکههای عصبی است. فرمول این تابع به صورت زیر است:
f(x) = max(0, x)
تابع ReLU برای ورودیهای مثبت، خروجی برابر با خود ورودی است و برای ورودیهای منفی، خروجی صفر است. این تابع به عنوان یک تابع غیر خطی و بدون محدودیت در شبکههای عصبی استفاده میشود و در بیشتر موارد نقش توابع فعالساز را دارد تا غیر خطی بودن و تعریف دامنه مقادیر خروجی را فراهم کنند.
تابع Leaky ReLU: این تابع یک نسخه اصلاح شده از تابع ReLU است که برای مقادیر منفی، یک شیب کوچک (a) به جای خروجی صفر دارد. این تغییر کمک میکند تا مشکل صفر شدن گرادیان در مقادیر منفی را بهبود بخشیده و آموزش شبکه را بهبود ببخشد.
تابع خطی f(x) = x: یک تابع خطی است و برای مدلهایی که نیاز به ارزیابی ماهیت ورودیها بدون تغییر خروجی دارند مفید است. این تابع معمولا در لایه خروجی مدلهای رگرسیون مورد استفاده قرار میگیرد.
موارد یاد شده تنها چند مورد از توابع توابع فعالساز رایج در شبکههای عصبی هستند. نکته مهمی که باید به آن دقت کنید این است که هر تابع فعالساز باید بر اساس ویژگیها و مشخصات مدل و وظیفه مورد نظر مورد استفاده قرار گیرد.
بدون دیدگاه