neural-network

شبکه عصبی به زبان ساده- اجرای آن در نرم افزار SPSS Modeler

امروزه از شبکه‌های عصبی برای حل مسائل در بسیاری از حوزه‌ها استفاده می‌شود که غالباً مربوط به دسته‌بندی کردن هستند. به عنوان مثال می‌توان داده‌هایی شامل عکس‌های نژادهای مختلف گربه‌ها را گرداوری کرد و با استفاده از آن‌ها شبکه عصبی را تعلیم داد. سپس اگر یک عکس جدید از گربه را به شبکه عصبی نشان بدهیم، یک امتیاز آماری مربوط به میزان شباهت آن با مدل به دست می‌دهد و سپس در خروجی خواهد گفت گربه حاضر درعکس متعلق به کدام نژاد است. از دیگر موارد استفاده شبکه‌های عصبی، راندن اتوماتیک خودروها، شناسایی گونه، فشرده‌سازی تصویر، پیش‌بینی بازار بورس، مدیریت ریسک و … را می‌توان نام برد.

شبکه عصبی چیست ؟

شبکه‌های عصبی الهام‌گرفته از مغز انسان هستند: نورون‌هایی که به هم وصل شده‌اند تشکیل یک شبکه را می‌دهند. برای انجام یک کار ساده مثل تکان دادن دست و بلند کردن مداد، پیام مورد نظر از تعداد زیادی نورون عبور می‌کند. عملکرد یک شبکه عصبی بسیار ساده است: متغیرها به صورت ورودی وارد می‌شوند (به عنوان مثال اگر یک تصویر مد نظر باشد و بخواهیم بگوییم تصویر چیست)، و پس از انجام محاسبات، یک خروجی برگشت داده می‌شود (مثلاً در خروجی مثال قبلی اگر تصویر گربه باشد، کلمه «گربه» برگشت داده می‌شود).

همان طور که گفته شد، عملکرد شبکه عصبی بدین صورت است که تعداد زیادی از واحدهای پردازش‌گر متصل بهم را شبیه‌سازی می‌کند و شبیه به نورون‌ها عمل می‌کند. هر شبکه عصبی معمولاً شامل سه لایه است: یک لایه ورودی که شامل فیلدهای ورودی است؛ یک یا چند لایه پنهانی؛ و یک لایه خروجی که شامل فیلدهای خروجی است. این واحدها با قدرت‌های ارتباطی مختلفی به هم متصل هستند که به آن‌ها وزن می‌گویند. داده‌های ورودی در اولین لایه نشان داده می‌شود، و مقادیر از هر نورون به نورون‌های لایه بعد گسترش می‌یابد. در نهایت، نتیجه مدل در لایه خروجی نمایش می‌یابد

در حقیقت شبکه عصبی با انجام تعدادی عمل، کار یادگیری را انجام می‌دهد: هر کدام از رکوردها را بررسی می‌کند، برای هر رکورد یک پیش‌بینی انجام می‌دهد و هر جا پیش‌بینی نادرست انجام گرفته باشد، اصلاحاتی را روی وزن‌ها انجام می‌دهد. این فرایند به دفعات زیاد تکرار می‌شود، و شبکه عصبی به بهبود دادن پیش‌بینی‌های خود ادامه می‌دهد تا یک یا چند معیار توقف برقرار شود.

در ابتدا، وزن‌ها تصادفی هستند، و پاسخ‌هایی که از شبکه بیرون می‌روند بی‌معنی هستند. اما شبکه از طریق تمرین کردن یاد می‌گیرد. مثال‌هایی که برای آن‌ها خروجی معلوم است به طور مکرر به شبکه ارائه می‌شوند، و پاسخ‌های دریافت‌شده با خروجی‌های معلوم مقایسه می‌شوند. با ادامه تمرین، شبکه در تکرار خروجی‌های مشخص دقیق و دقیق‌تر می‌شود. وقتی شبکه به طور کامل تعلیم داده شد، آن گاه برای موارد آینده که در آن‌ها خروجی نامشخص است به کار گرفته می‌شود.

در ادامه مطلب، عملکرد شبکه عصبی را به زبان ساده توضیح می‌دهیم و سپس یک مثال در نرم‌افزار SPSS Modeler را خواهیم دید.

طرز کار شبکه عصبی به زبان ساده

شبکه عصبی مصنوعی معمولاً در ستون‌ها قرار می‌گیرد، به طوری که یک نورون در ستون n می‌تواند به نورون‌های ستون‌های n-1 و n+1 متصل شود. البته شبکه‌های عصبی با ساختارهای غیر از این نیز وجود دارند، اما در مطلب حاضر، همین ساختار ساده را توضیح می‌دهیم. بنابراین یک شبکه عصبی مصنوعی می‌تواند بدین شکل باشد:

neural-network-display

شبکه‌های عصبی معمولاً از چپ به راست خوانده می‌شوند. در شکل 1، اولین لایه یعنی لایه L1، ورودی‌ها را وارد می‌کند. در این جا دو لایه درونی یعنی لایه L2 و لایه L3 وجود دارد (که لایه‌های پنهان نامیده می‌شوند) و عمیات ریاضی را انجام می‌دهند. هم چنین یک لایه دیگر نیز وجود دارد (لایه L4) که شامل همه خروجی‌های ممکن است. فعلاً نماد «1+» در انتهای هر کدام از ستون‌ها را نادیده بگیرید. این نماد به معنای اَریبی (bias) است و در مورد آن بعداً صبحت خواهیم کرد.

نورون چه کاری انجام می‌دهد؟

کارهایی که نورون انجام می‌دهد ساده است:

Neuron-operation

اولین کاری که نورون انجام می‌دهد این است که مقدار هر نورونی را که در ستون قبل به آن متصل است اضافه می‌کند. در شکل 2، تعداد 3 ورودی (x1، x2 و x3) وجود دارد که به نورون وارد می‌شوند، بنابراین 3 نورون از ستون قبلی به نورون حاضر متصل شده‌اند.

حال این مقدار توسط یک متغیر دیگر که «وزن» نامیده می‌شود (w1، w2 و w3) در یک مقدار مشخص ضرب می‌شود و اتصال بین دو نورون را تعیین می‌کند. هر اتصال نورون‌ها وزن خاص خود را دارد، و وزن‌ها تنها مقادیری هستند که در طی فرایند یادگیری اصلاح می‌شوند.

علاوه بر این، اریبی می‌تواند به کل مقادیر محاسبه‌شده اضافه شود. اریبی از یک نورون خاص نمی‌آید، بلکه قبل از مرحله یادگیری انتخاب می‌شود و برای شبکه عصبی مفید است.

پس از اضافه کردن‌ها، نهایتاً نورون یک تابع به اسم «تابع فعال‌سازی» را برای مقدار بدست‌آمده به کار می‌برد.  این تابع معمولاً برای این به کار گرفته می‌شود که مقدار کلی محاسبه‌شده قبلی را به عددی  بین صفر و یک تبدیل کند. به عنوان مثال این کار توسط تابع سیگموید (sigmoid) در شکل 3 انجام می‌شود.

Sigmoid-function

آن چه بیان شد همه آن چیزی است که نورون انجام می‌دهد. همه مقادیر نورون‌های متصل را در وزن‌های متناسب ضرب می‌کند، آن‌ها را جمع می‌کند و در تابع فعال‌سازی به کار می‌گیرد. بنابراین، نورون آماده فرستادن مقدار جدید خود به نورون‌های دیگر است.

بعد از آن که همه نورون‌های یک ستون این کار را انجام دادند، شبکه عصبی به ستون بعدی می‌رود. در انتها، آخرین مقادیر بدست‌آمده باید برای تعیین خروجی مورد نظر به کار بیایند.

حال که متوجه شدیم یک نورون چه کاری انجام می‌دهد، می‌توانیم هر شبکه عصبی را که بخواهیم ایجاد کنیم. اما، عملیات‌ دیگری نیز باید انجام شود تا یادگیری یک شبکه عصبی کامل شود.

یک شبکه عصبی چه طور یاد می‌گیرد؟

گر چه ایجاد متغیرها و ایجاد تعامل بین آن‌ها با یک‌دیگر لازم است، اما برای آن که شبکه عصبی بتواند خودش یادگیری را انجام بدهد کافی نیست. برای این امر احتیاج به آماده کردن مقدار زیادی داده و دادن آن به شبکه عصبی هستیم. این داده‌ها شامل ورودی‌ها و خروجی مورد انتظار از شبکه عصبی هستند. حال بیایید ببینیم فرایند یادگیری چگونه انجام می‌شود:

اول آن که می‌دانیم وقتی یک ورودی به شبکه عصبی داده می‌شود، یک خروجی را برمی‌گرداند. در اولین تلاش، شبکه عصبی نمی‌تواند خروجی درست را خودش (مگر با شانس) به دست بدهد و به همین دلیل است که در طی مرحله یادگیری همه ورودی‌ها با برچسب خود می‌آیند که توضیح می‌دهد شبکه عصبی باید چه خروجی را حدس بزند. اگر انتخاب خوبی انجام می‌شود، پارامترهای واقعی نگه داشته می‌شوند و ورودی بعدی داده می‌شود. اما، اگر خروجی بدست‌آمده با برچسب هماهنگ نباشد، وزن‌ها تغییر می‌یابند. این فرایند را می‌توان به صورت دکمه‌های مختلف تصور کرد، که هر بار که خروجی به درستی حدس زده نمی‌شود این دکمه‌ها در حالت‌های دیگری قرار داده می‌شوند.

برای تعیین این که چه وزنی باید اصلاح شود، از یک فرایند مخصوص به نام «پشت پرده» استفاده می‌شود. البته زیاد معطل آن نخواهیم شد، چون شبکه عصبی که خواهیم ساخت از این فرایند دقیق استفاده نمی‌کند، اما شامل بازگشتن به شبکه عصبی و شناسایی هر اتصالی است که چک می‌کند چگونه خروجی بر حسب یک تغییر در وزن رفتار خواهد کرد.

در نهایت، یک پارامتر نهایی وجود دارد که باید مقدارش معلوم شود تا بتوانیم نحوه یادگیری شبکه عصبی را کنترل کنیم: «نرخ یادگیری». کار این پارامتر از نامش پیداست، این پارامتر تعیین می‌کند شبکه عصبی با کدام سرعت یاد خواهد گرفت. یا به طور دقیق‌تر چگونه وزن را اصلاح خواهد کرد: اندک اندک یا با گام‌های بزرگ‌تر. معمولاً مقدار 1 مقدار خوبی برای این پارامتر است.

شبکه عصبی (ادراک)

حال که مفاهیم پایه‌ای را می‌دانیم، بیایید ببینیم چه‌طور شبکه عصبی خلق می‌شود. شبکه عصبی که این جا شرح داده می‌شود، ادراک نام دارد و اولین شبکه عصبی است که به وجود آمد. این شبکه از 2 نورون در ستون‌های ورودی تشکیل می‌شود و یک نورون در ستون خروجی وجود دارد. این پیکربندی اجازه ایجاد یک متغیر طبقه‌بندی را می‌دهد که دو گروه را مجزا می‌کند. برای فهم بهتر امکانات و محدودیت‌ها، به مثال ساده زیر توجه کنید.

فرض کنید می‌خواهیم شبکه عصبی قادر باشد خروجی‌هایی طبق نقش‌های «یای شمول» به دست بدهد.

ابتدا حالات زیر را به یاد بیاورید:

  • اگر A درست و B درست باشد، آن گاه A یا B درست است.
  • اگر A درست و B غلط باشد، آن گاه A یا B درست است.
  • اگر A غلط و B درست باشد، آن گاه A یا B درست است.
  • اگر A غلط و B غلط باشد، آن گاه A یا B غلط است.

Neural-network-diagram

اگر «درست» را با مقدار 1 و «غلط» را با مقدار صفر جایگزین کنیم و چهار حالت فوق را با نقاطی با مختصات روی یک صفحه قرار دهیم، آن گاه می‌بینیم که دو گروه نهایی «غلط» و «درست» می‌توانند با یک خط تنها جدا شوند. این کاری است که ادراک می‌تواند انجام دهد.

از طرف دیگر، اگر مورد «یای شمول» را بررسی کنیم (که در آن حالت «درست یا درست» (یعنی نقط (1,1) غلط است)، آن گاه می‌توانیم ببینیم یک خط ساده نمی تواند دو گروه را جدا کند، و ادراک قادر نیست با این مسئله برخورد کند.

بنابراین در حقیقت، ادراک یک شبکه عصبی کارامد نیست، اما ایجاد آن ساده است و هنوز می‌تواند یک دسته‌بندی کننده خوب تلقی شود.

مثالی از شبکه عصبی با نرم‌افزار SPSS Modeler

در این مثال از شبکه عصبی در یک واحد نگهداری سهام (Stock Keeping Unit) برای پیش‌بینی سطح فروش استفاده می‌کنیم. راه‌های مختلفی برای انجام پیش‌‌بینی فروش شامل پیش‌بینی سری زمانی، شبیه‌سازی و سناریو وجود دارد. ولی در این جا از یک مدل شبکه عصبی استفاده می‌کنیم. سپس دقت پیش‌بینی را با استفاده از داده واقعی می‌آزماییم. در این مثال، ورودی‌ها شامل داده‌های تاریخچه فروش، مشخصات جمعیت‌شناسی، تورم و بیکاری هستند و خروجی شامل پیش‌بینی فروش است. روابط بین ورودی‌ها و خروجی مشخص نیست.

ابتدا، برای وارد کردن فایل یک گره (node) را به اسم Var. ایجاد می‌کنیم و فایل cvs را که شامل داده‌های تاریخچه فروش هستند در آن قرار می‌دهیم. این فایل شامل فروش هفتگی تعدادی از واحدهای نگه‌داری سهام در طول چهار سال (2007 تا 2010) است. سپس یک سوپر گره (SuperNode) را به منظور آماده کردن داده‌ه‌ها برای مدل‌یابی به شکل زیر ایجاد می‌کنیم:

neural-network-SuperNode

سوپر گره شکل 5 شامل گره‌های زیر به ترتیب از چپ به راست است:

1) گره انتخاب شماره 1: به منظور انتخاب SKU #1001 به کار می‌رود.

neural-network-SuperNode1-in-spss

2) گره مرتب‌سازی: این گره برای مرتب کردن داده‌ها به ترتیب صعودی بر حسب موقعیت مشتری، سال و شماره هفته به کار می‌رود. این امر به سازمان‌دهی بهتر داده‌ها کمک می‌کند.

neural-network-sort1-in-spss

3) گره‌های استخراج شماره 1 تا 3: این گره‌ها برای ایجاد متغیرهای تأخیر (متغیرهای فروش سال‌های قبل برای سال‌های 2008، 2009 و 2010) استفاده می‌شود. تابع مورد استفاده در گره استخراج شماره 1 در شکل زیر به عنوان مثال نشان داده شده است:

neural-network-Extraction-node-in-spss

4) گره انتخاب شماره 2: برای دور انداختن همه داده‌های قبل از 2010 استفاده می‌شود، زیرا 2010 سال جاری را نشان می‌دهد و گره‌های استخراج قبلی تأخیرهای 2007، 2008 و 2009 را ایجاد کرده‌اند.

neural-network-SuperNode2-in-spss

پس از ایجاد گره‌های فوق، اکنون داده‌ها برای استفاده در مدل آماده است. سپس از دستور پیوند داخلی (Inner Join) برای ادغام گره‌ها استفاده می‌کنیم تا ابتدا داده‌های جمعیت‌شناسی با هم ادغام شوند و سپس داده‌های بیکاری و تورم ادغام شوند.

در مرحله بعد، یک گره نوع (Type) ایجاد می‌کنیم که در آن واحدهای فروش را به عنوان فیلد هدف (Target)، فیلدهای غیرمرتبط را به عنوان هیچ‌کدام (None) و تمامی گره‌های دیگر را به عنوان فیلدهای ورودی (Input) قرار می‌دهیم. در نهایت، داده‌ها را به صورت زیر تقسیم‌بندی می‌کنیم:

neural-network-partition-in-spss

پس از آن یک گره شبکه عصبی (Neural Net) را ایجاد می‌کنیم و داده‌های آماده‌شده را در الگوریتم شبکه عصبی اجرا می‌کنیم تا مدل پیشگوی مورد نظر تولید شود. شکل نهایی مدل‌یابی به صورت زیر خواهد بود:

neural-network-final-shape-in-spss

حال خروجی‌های فرایند را بررسی می‌کنیم:

neural-network-model-summary-shape-in-spss

با توجه به خروجی فوق مشاهده می‌کنیم که مدل به میزان 99.7 درصد دقیق است. مدل شبکه عصبی مورد استفاده، پرسپترون چندلایه (Multilayer Perceptron) است.

neural-network-Multilayer-Perceptron-in-spss

خروجی بالا نمودار اهمیت پیش‌بین‌ها است که با توجه به آن مهم‌ترین پیش‌بین‌ها در تعیین پیشگویی، واحدهای فروش برای دو سال قبل از آن سالی هستند که به دنبال پیش بینی آن هستیم.

neural-network-predicted-by-observed-in-spss

در نمودار فوق واحدهای فروش واقعی در مقابل مقادیر پیش‌بینی شده داده‌ها برای مشاهده میزان دقت مدل پیش‌گو رسم شده است.

با توجه به خروجی‌های فوق، واضح است که مدل شبکه عصبی برای ایجاد پیش‌بین‌هایی که ذات دقیق رابطه بین ورودی‌ها و خروجی به درستی مشخص نیست بسیار خوب عمل می‌کند.

شبکه عصبی یکی از مباحث پیچیده آمار ست، ما در این مطلب سعی کردیم به بهترین شکل این مطلب را با مثال هایی ملموس برای شما توضیح دهیم.اما با توجه به اینکه ممکن است در همه پروژه ها به فراخور تفاوت هایی که در هر پروژه وجود دارد اتفاقاتی رخ دهد، بهتر است که در کنار خود متخصصی با تجربه را داشته باشید و سوال های خود را از او بپرسید. ما برای این دغدغه شما پل ارتباطی را با مشاوران خود ایجاد کرده ایم تا بتوانید بصورت رایگان از تخصص آن ها استفاده کنید. شما برای برخورداری از این پل ارتباطی می توانید به بخش مشاوره آماری رایگان مراجعه کنید.

چنانچه علاقه مند هستید به مباحث آماری با دنبال کردن صفحه اینستاگرام آمار پیشرو می توانید از جدید ترین مطالب منتشر شده بر روی سایت با خبر شوید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *