بهترین راه برای درک مفهوم و چگونگی عملکرد «شبکه عصبی» (Neural Network)، ساخت آن است. در این مطلب، روش ساخت یک شبکه عصبی با بهره‌گیری از «زبان برنامه‌نویسی پایتون» (Python Programming Language) آموزش داده شده است. شبکه‌های عصبی (NN) که به آن‌ها «شبکه‌های عصبی مصنوعی» (Artificial Neural Networks | ANN) نیز گفته می‌شود، یکی از الگوریتم‌های یادگیری در «یادگیری ماشین» (Machine Learning) به شمار می‌آید که براساس مفهوم زیستی شبکه‌های عصبی بنا نهاده شده است. «اندرو بولزیوک» (Andrey Bulezyuk) کارشناس یادگیری ماشین آلمانی و دارای سال‌ها تجربه، در این رابطه می‌گوید: «شبکه‌های عصبی انقلابی در یادگیری ماشین محسوب می‌شوند، زیرا قادر به مدل‌سازی کارآمد انتزاعات پیچیده در طیف وسیعی از رشته‌ها و صنایع هستند». اساسا، یک شبکه عصبی ترکیبی از مولفه‌های زیر است:

  • یک لایه ورودی که داده‌ها را دریافت می‌کند
  • یک لایه پنهان
  • یک لایه خروجی
  • وزن‌های بین لایه‌ها
  • یک تابع فعال‌سازی تعمدی برای هر لایه پنهان (در این مطلب از تابع فعال‌سازی سیگموئید استفاده شده است.)

چندین نوع شبکه عصبی وجود دارد. در این راهنما یک «شبکه عصبی پیشخور» (Feedforward Neural Network) یا «شبکه عصبی پرسپترون» (Perception Neural Networks) ساخته خواهد شد. این نوع از شبکه عصبی مصنوعی داده‌ها را مستقیما از جلو به عقب بازپخش می‌کند. آموزش نورون‌های پیش‌خور اغلب نیازمند «بازگشت به عقب یا انتشار معکوس» (back-propagation) است که شبکه‌ای با مجموعه‌های متناظر ورودی‌ها و خروجی‌ها محسوب می‌شود. هنگامی که داده‌های ورودی به «نورون» (neuron) انتقال پیدا کردند، پردازش می‌شوند و یک خروجی تولید می‌شود. در تصویر زیر، نموداری که ساختار یک شبکه عصبی ساده را نمایش می‌دهد آورده شده است.

شبکه عصبی ساده

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

مساله

در جدول زیر مساله موجود نشان داده شده است.

شبکه عصبی ساده

اکنون، یک شبکه عصبی که می‌تواند مقدار خروجی را برای مجموعه داده‌های جدید به درستی پیش‌بینی کند ساخته خواهد شد. همانطور که از جدول مشهود است، مقدار خروجی همیشه مساوی با اولین مقدار در قسمت ورودی خواهد بود. بنابراین، انتظار می‌رود مقدار خروجی برای شرایط جدید (New Situation) برابر با 1 باشد. در ادامه این مساله بررسی می‌شود که آیا می‌توان از کد پایتونی استفاده کرد که نتیجه مشابهی داشته باشد.

ساخت کلاس شبکه عصبی

در این بخش، هدف ساخت یک کلاس NeuralNetwork در پایتون به منظور آموزش دادن نورون‌ها برای ارائه پیش‌بینی صحیح است. این کلاس همچنین دارای دیگر «توابع کمک کننده» (helper functions) نیز هست. با وجود اینکه از یک کتابخانه شبکه عصبی برای ساخت این شبکه عصبی ساده استفاده نمی‌شود، کتابخانه NumPy برای کمک به انجام محاسبات «ایمپورت» می‌شود. کتابخانه دارای چهار متد مهم زیر است:

  • exp: برای تولید «تابع نمایی» (natural exponential)
  • array: برای تولید یک ماتریس
  • dot: برای ضرب ماتریس‌ها
  • random: برای تولید اعداد تصادفی (توجه به این نکته نیز لازم است که از اعداد تصادفی برای حصول اطمینان از توزیع کارآمد آن‌ها استفاده می‌شود.)

اعمال تابع سیگموئید

در اینجا از تابع «سیگموئید» (Sigmoid) استفاده خواهد شد که یک منحنی مشخصه S شکل به عنوان تابع فعال‌سازی برای شبکه عصبی ترسیم می‌کند.

تابع سیگموئید

این تابع هر مقدار را به یک مقدار از ۰ تا 1 نگاشت می‌کند و کمک می‌کند تا مجموع وزنی ورودی‌ها «نرمال‌سازی» (normalize) شوند. بعد از آن، مشتق تابع سیگموئید برای کمک به محاسبه تنظیمات اساسی وزن‌ها گرفته می‌شود. خروجی تابع سیگموئید می‌تواند برای تولید مشتق آن مورد استفاده قرار بگیرد. برای مثال، اگر متغیر خروجی برابر با «x» است، مشتق آن برابر با «(x * (1-x» خواهد بود.

آموزش دادن مدل

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

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

  1. ورودی از «مجموعه داده آموزش» (training dataset) گرفته، برخی تنظیمات بر مبنای وزن آن‌ها انجام و سپس با استفاده از متدی که خروجی شبکه عصبی مصنوعی را محاسبه می‌کند انتقال داده می‌شوند.
  2. نرخ خطای بازگشت به عقب محاسبه می‌شود. در این شرایط، این مقدار تفاوت بین خروجی پیش‌بینی شده نورون‌ها و خروجی مورد انتظار از مجموعه داده آموزش است.
  3. برپایه میزان خطای دریافت شده، تنظیمات وزن کوچکی با استفاده از «فرمول مشتق وزنی خطا» (Error Weighted Derivative Formula) انجام می‌شود.
  4. این فرآیند به طور دلخواه 1۵۰۰ بار تکرار می‌شود (این مقدار منتخب نویسنده این مطلب است).

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

بسته‌بندی

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

خروجی حاصل از اجرای کد بالا به صورت زیر است.

ساخت شبکه عصبی

در این مطلب چگونگی ساخت یک شبکه عصبی آموزش داده شد. نورون با تخصیص دادن وزن‌های تصادفی به خودش آغاز به کار می‌کند و خود را با استفاده از «مثال‌های آموزش» (Training Examples)، آموزش می‌دهد. در نتیجه، اگر با یک موقعیت جدید [1,0,0] به شکه عصبی ارائه شود، مقدار 0.9999584 را بازمی‌گرداند. همانطور که پیش‌تر و در بالا بیان شد، پاسخ مورد انتظار برای چنین شرایطی برابر با 1 است و بنابراین پاسخ ارائه شده توسط شبکه عصبی بسیار نزدیک به این مقدار است. نباید فراموش کرد که تابع سیگموئید مقادیر خروجی بین ۰ و 1 دارد.

البته، در اینجا تنها از شبکه تک نورونی برای انجام یک وظیفه ساده استفاده شده است. پرسشی که در این وهله به ذهن خطور می‌کند آن است که در صورت کنار هم قرار گرفتن چندین هزار شبکه عصبی چه اتفاقی می‌افتد و آیا با این کار می‌توان چگونگی عملکرد ذهن انسان را به صورت 1۰۰ درصدی شبیه‌سازی کرد؟

اگر نوشته بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

آیا این مطلب برای شما مفید بود؟

برچسب ها :

نظر شما چیست؟

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