شبکه عصبی مصنوعی (Artificial neural network, ANN)، یا به اختصار شبکه عصبی، به روش هایی اطلاق می شود که مکانیسم عمل مغز انسان یا سیستم عصبی انسان را توسط کامپیوتر شبیه سازی یا مدل سازی می کنند. این روش اولین بار توسط McCulloch و Pitts در سال 1943 پیشنهاد داده شد و در سال های بعد توسط افرادی چون Hebb ,Hopfield ,Kohonen و … بسط و توسعه داده شد.
استفاده از شبکه های عصبی در روش های مختلف آنالیز کمی و کیفی مواد شیمیایی در سال های اخیر روند رو به رشدی دشته است. از کالیبراسیون و رگرسیون تا مدل سازی و شبیه سازی فرایندهای شیمیایی. به نظر می رسد با پیشرفت تصاعدی استفاده از شبکه عصبی مصنوعی در بسیاری از حوزه های علمی صنعتی و تکنولوژی آشنایی با مبانی آن ضروی به نظر می رسد.
روش های ANN کاربردهای مختلفی شامل دسته بندی و تشخیص الگو (pattern recognition)، مدل سازی، رگرسیون و نقشه برداری در شاخه های مختلف بیوانفورماتیک، اقتصاد و آمار، بازی های کامپیوتری، کنترل سیستم، پیش بینی سری های زمانی و .. دارد.
اصول و مبانی شبکه عصبی مصنوعی
روش های ANN بر اساس الگوریتم یادگیری ماشین (machine learning) عمل می کنند. الگوریتم یادگیری ماشینی، به زبانی ساده، به برنامه های کامپیوتری اطلاق می شود که با توجه به تجربیات پیشین بتواند عملکرد خود را بهبود ببخشند. یا به عبارت دیگر در روش های یادگیری ماشین، با توجه به تعداد زیادی مثال همراه با پاسخ درست، برنامه ای تولید می شود که قابلیت تعمیم پذیری (Generalizability) و تطبیق پذیری (adaptivity) دارد. تعمیم پذیری یعنی در صورت یادگیری صحیح، برنامه تولید شده برای نمونه های جدید نیز پاسخ درست خواهد داشت و تطبیق پذیری یعنی در صورت تغییر دادها، برنامه توانایی تغییر را خواهد داشت.
از نظر بیولوژی مغز انسان متشکل از تعداد بسیار زیادی نورون (حدود صد میلیارد معادل 1011) است که هر کدام از این نورون ها به طور متوسط با چندین هزار نورون دیگر ارتباط دارد. توجه شود که واژه شبکه عصبی بیشتر بر واژه شبکه تاکید دارد تا عصبی. شکل یک سلول عصبی در شکل 1 نشان داده شده است. یک نورون عصبی، سیگنال ها را از طریق دندریت ها (Dendrites) از نورون های دیگر دریافت می کند. سپس نورون یک فعالیت الکتریکی آغاز کرده و از طریق رشته آکسون (Axon) به هزاران شاخه می فرستد. در انتهای هر شاخه یک ساختاری که سیناپس (Synapse) نامیده می شود، وجود دارد که فعالیت دریافتی از آکسون را به اثرات الکتریکی تبدیل می کند که فعالیت در نورون های متصل را مهار (inhibition) یا تحریک (stimulation) می کند.
هر سلول عصبی یا نورون نقش یک پردازنده کوچک را در روش های ANN ایفا می کند. بنابر این یک شبکه عصبی مجموعه ای از پردازنده های کوچک و ساده ای ست که برای هدف خاصی آموزش می بینند. هر سلول عصبی یا گره می تواند سیگنال های عصبی (ورودی) را از نورون های دیگر یا از محیط اطرافش دریافت کند.
شکل 2 شمای کلی یک شبکه عصبی مصنوعی (ANN) را نشان می دهد. همان طور که در این شکل نیز مشخص است، یک شبکه عصبی مصنوعی به طور معمول شامل سه لایه است. لایه ورودی (input layer) برای دریافت داده های اولیه، لایه پنهان یا مخفی (hidden layer) برای وزن دهی به ورودی ها و ارتباط بین آنها و لایه خروجی (output layer).
از نظر ریاضی ورودی را می توان به صورت زیر نمایش داد:
X بردار ورودی و x متغیرهای ورودی شبکه هستند. عدد 1 در رابطه بالا را، سوگیری یا بایاس (bias) می نامند. نقش اصلی بایاس این است که برای هر نورون یا گره (node) یک مقدار ثابت آموزش پذیر (trainable) فراهم می کند. در واقع مقدار بایاس امکان تغییر تابع فعالسازی یا تابع انتقال به چپ و راست را فراهم می کند.
W بردار وزنی و w وزن هر متغیر از بردار ورودی است. با توجه به مجموع وزن دهی ورودی ها و مقدار آستانه هر نورون، فعال سازی (activation) نورون اتفاق می افتد. سیگنال فعال سازی شده بر اساس یک تابع انتقال (transfer function) از نورون خارج می شود.
توجه شود که لایه مخفی ممکن است تک لایه یا چند لایه باشد و بر همین اساس شبکه های عصبی تک لایه (single layer) یا چندلایه (multilayer) نامگداری می شوند. به شبکه های تک لایه پرسپترون (Perceptron) و به شبکه های چندلایه ( Multi-layer Perceptron) یا به اختصار MLP گویند.
هم چنین شبکه های عصبی با تعداد نورون در هر لایه نیز نامگداری می شوند. به عنوان مثال یک شبکه با سه ورودی، دو لایه مخفی و دو خروجی به صورت 3-2-2 نامگذاری می شود.
تابع انتقال در شبکه عصبی مصنوعی
در هر شبکه عصبی به تابع انتقال (Transfer function) جهت تبدیل سیگنال های ورودی به سیگنال خروجی نیاز است. به زبان ساده تابع انتقال وضعیت و نحوه فعال شدن یک نورون در شبکه عصبی را مشخص می کند. به توابع انتقال توابع فعال ساز (Activation Functions) نیز می گویند.
به طور کلی چهار نوع تابع انتقال وجود دارد که عبارتند از: تابع انتقال پله واحد (unit step transfer function) یا hard limit، تابع انتقال خطی (linear transfer function)، تابع انتقال سیگموئیدی (sigmoid transfer function) و تابع انتقال گوسی (Gaussian transfer function). شکل 3 انواع توابع انتقال و شکل هر کدام را نشان می دهد. تابع انتقال پله واحد یا hard limit خروجی را به صورت دو سطحی نشان می دهد و بسته به بزرگتری یا کوچک تری ورودی کل به مقدار آستانه (threshold value) یکی از دو سطح را باز می گرداند. به عنوان مثال برای مقدار آستانه 1، تابع انتقال hard-limit به ازای هر ورودی بزرگتر یا مساوی صفر مقدار 1 را به عنوان خروجی باز می گرداند. تابع انتقال خطی خروجی را متناسب با ورودی، مشابه روش رگرسیون خطی، باز می گرداند. تابع انتقال سیگموئیدی (Sigmoid Transfer function) با دو تابع لگاریتمی (log-sigmoid) و تانژانتی (tan-sigmoid) مانع از بزرگ شدن بیش از حد مقادیر خروجی می شود. مقدار خروجی تابع لگاریتمی از 0 تا 1 و تابع تانژانتی از 1- تا 1+ است. از تابع های انتقال سیگموئیدی برای مدل سازی خواص غیرخطی استفاده می شود. توابع گوسی منحنی های پیوسته زنگوله ای (bell-shaped) شکل هستند.
در بیشتر شبکه های عصبی از قوانین یادگیری (Learning rules) برای آموزش شبکه استفاده می شود. شبکه های عصبی انواع مختلف دارند اما از نظر توپولوژی و الگوریتم یادگیری به دو دسته کلی شبکه عصبی پیش خور (feed-forward network) و شبکه عصبی پس خور (feed-back network) تقسیم می شوند.
در شبکه عصبی پیش خور سیگنال تنها از یک مسیر و رو به جلو حرکت می کنند. اطلاعات ورودی به لایه های مخفی رفته و از آنجا به خروجی می روند. این نوع شبکه ها از شبکه های ساده و متداول هستند و معمولا برای واکاوی داده ها (Data mining) به کار می روند. شبکه عصبی پرسپترون (Perceptron)، هم خطی و هم غیرخطی، و شبکه عصبی تابع با پایه شعاعی (Radial Basis Function) از نوع شبکه عصبی پیش خور هستند.
در شبکه عصبی پس خور سیگنال می تواند در دو جهت حرکت کند و تمام اتصالات بین نورون ها مجاز است. بنابراین در این نوع شبکه ها از حلقه (loop) زیاد استفاده می شود. خطا در این نوع شبکه ها به صورت انتشار برگشتی (back propagating) در خروجی محاسبه شده و براساس آن وزن های جدید تعریف می شود. این نوع شبکه ها معمولا پیچیده (complex) و به صورت یک سیستم پویا غیرخطی عمل می کنند.
عملکرد هر شبکه به توپولوژی شبکه (Network topology)، تعداد لایه ها در شبکه، تعداد نورون در هر لایه، الگوریتم یادگیری، تابع انتقال و تعداد تکرار (Number of iteration) بستگی دارد.
یادگیری شبکه
یادگیری شبکه از اجزاء اصلی شبکه های عصبی ست. آموزش با قوانین یادگیری و الگوریتم های مختلف و یا ترکیب از آنها ممکن است انجام شود. یک سیستم که مراحل یادگیری و تولید مجرایی دارد را شبکه استاتیک (static network) و شبکه هایی که قادر به ادامه یادگیری طی فرایند تولید هستند را شبکه های داینامیک (dynamic network) می نامند.
تعداد پارامترهای موثر بر عملکرد شبکه های عصبی زیاد است. بهینه کردن و محاسبات شبکه های عصبی اغلب وقت گیر و زمان بر است. شبکه باید به خوبی آموزش ببیند تا نتایج موفقیت آمیزی داشته باشد. مشکل عمده در آموزش شبکه های عصبی مشکل Overfitting است. این مشکل زمانی به وجود می آید که شبکه عصبی فقط روی داده ها آموزشی عملکرد مناسب و خوبی دارد و برای سایر مجموعه داده ها نتایج خوبی ارائه نمی کند. یکی از راه های متداول رفع مشکل Overfitting این است که علاوه بر مجموعه آموزشی برای آموزش شبکه، از یک مجموعه آزمایشی (test set) برای بررسی تغییرات خطا استفاده شود. اگر در برای رفع این مشکل ما باید بدانیم چه زمانی آموزش شبکه را متوقف کنیم. یکی از راه ها این است که شبکه را علاوه بر داده های آزمایشی روی داده های تست نیز مرتبا اجرا کنیم و جریان تغییر خطا را در آنها بررسی کنیم.اگر در این داده ها به جایی رسیدیم که میزان خطا رو به افزایش بود حتی اگر خطا در داده های آزمایشی همچنان رو به کاهش باشد آموزش را متوقف کنیم. شکل 4 استفاده از نمودار کارایی بر حسب دوره (epoch) را برای یک شبکه نشان می دهد. توجه شود وقتی شبکه به خوبی آموزش دیده است که خطا هم در داده های آموزشی و هم داده های ارزیابی متوقف شود.
شکل 4 یادگیری شبکه و مشکل Overfitting
از آنجایی که پارامترهای شبکه های عصبی زیاد است یک خروجی خاص می تواند با مجموعه های مختلفی از مقادیر پارامترها ایجاد گردد درنتیجه این پارامترها مثل وزن یالها قابل تفسیر نبوده و معنی خاصی نمی دهند.
یکی از مهم ترین فواید شبکه های عصبی قابلیت اجرای آنها روی کامپیوترهای موازی می باشد.
استراتژی مختلف برای آموزش شبکه عبارتند از:
یادگیری بدون نظارت (unsupervised learning):
در روش یادگیری بدون نظارت داده های اولیه یا ورودی های شبکه بدون پاسخ یا هدف (Target) هستند و وزن ها و بایاس شبکه فقط بر اساس ورودی ها اصلاح می گردند. بیشتر روش های یادگیری بدون نظارت برای خوشه بندی (Clustering) استفاده می شوند که در آن یافتن ساختار و رابطه درون مجموعه داده ها بررسی می شود.
یادگیری با نظارت (supervised learning):
یک مجموعه داده به عنوان مجموعه آموزش (training set) با پاسخ صحیح برای آموزش شبکه استفاده می شود. قانون یادگیری (learning rule) بر اساس اصلاح و تنظیم وزن ها و بایاس (bias) شبکه برای نزدیکی به مقادیر پاسخ تولید شده و از این قانون برای پیش بینی داده های جدید استفاده می شود. روش یادگیری با نظارت برای مدل سازی، طبقه بندی، رگرسیون و درون یابی به کار می رود.
یادگیری تقویتی (Reinforcement learning): در این شبکه ها آموزش از طریق مشاهده و سعی و خطا صورت می گیرد. در واقع با توجه به تعاملی که با محیط پیرامون خود دارد عملی انجام داده و نتیجه عمل را به صورت پاداش و تنبیه برای نزدیکی و دوری به هدف مشخص می شود. شبکه کارهایی انجام می دهد که منجر به کسب پاداش بیشتری می شود.
انواع شبكه عصبی مصنوعی
انواع مختلفی از شبکه های عصبی تاکنون اراده شده و در زمینه های مختلفی به کار رفته و عملکرد موفقی داشته اند. در ادامه چند نوع متداول و با اهمیت شبکه عصبی معرفی می شود.
شبکه عصبی پیش خور (Feed-Forward): در این نوع شبکه پردازش داده های ورودی رو به جلو انجام می شود و مسیر پردازش به نورون های لایه قبلی بر نمی گردد و خروجی هر لایه فقط بر لایه بعدی تاثیرگذار خواهد بود. یعنی سیگنال یک طرفه خواهد بود. در این نوع شبکه مقدار پارامتر خروجی، براساس پارامترهای ورودی و یک سری وزن های اولیه تعیین می گردد. مقادیر ورودی با هم ترکیب می شوند و سپس در لایه های پنهان (hidden layer) از آنها استفاده می شوند و در آخر مقادیر لایه های پنهان نیز برای محاسبه مقادیر خروجی ترکیب می شوند.
شبکه عصبی انتشار برگشتی (Backpropagation): در این نوع شبکه، خطای خروجی با مقایسه مقدار خروجی با مقدار تجربی یا مقدار مورد نظر محاسبه می گردد. از مقدار و میزان خطا برای تصحیح شبکه و تغییر وزن ها استفاده می شود. این محاسبات از گره خروجی شروع شده و به لایه های پنهان ادامه می یابد. این عمل به ازای تمامی داده های اولیه تکرار می گردد. به هربار اجرای این الگوریتم برای تمام داده ها یک دوره (epoch) گفته می شود. دوره (epoch) آنقدر تکرار می شوند تا مقدار خطا به مقدار ثابتی رسیده و تغییر نکند.
نکات روش های شبکه عصبی مصنوعی
- پردازش موازی و در نتیجه سرعت بالای محاسبات و بدون نویز (noise) دارند.
- توانایی تعمیم پذیری و تطبیق پذیری
- پردازش خطی و غیر خطی
- دامنه کاربردی وسیع شامل پردازش سیگنال، دسته بندی، شناسایی الگو، رگرسیون، مدل سازی و ..
- بیشتر شبکه های عصبی مشابه جعبه سیاه (Black boxes) هستند یعنی روابط بین ورودی و خروجی و پروسه عملکرد شبکه برای کاربر ناشناخته و غیرقابل تفسیر است.
- زمان محاسبه نسبتا طولانی دارند مخصوصا برای حل مسائل پیچیده با شبکه های چند لایه. اگرچه با پیشرفت قدرت محاسبه کامپیوترهای امروزی و استفاده از سیستم های موازی (parallel systems) این مشکل چندان جدی گرفته نمی شود.
زمینه های کاربردی روش های شبکه عصبی
- کنترل، بهینه سازی و مدل سازی فرایندهای صنعتی
- تشخیص و ارزیابی پدیده های پزشکی، پیش بینی هزینه درمان و اقامت بیمار و …
- مدل سازی، پیش بینی، دسته بندی آنالیز سری های زمانی و ارزیابی داده ها
- الگو شناسی، ارزیابی اکوسیستم، شناسایی ژن ها، تجزیه و تحلیل سیستم های بیولوژیک، شناسایی ترکیبات شیمیایی و …
- مدیریت ریسک (risk management)، بازاریابی هدف (target marketing) و تحقیق مشتری (customer research)
نرم افزارهای متداول برای محاسبات ANN
nntool Matlab toolbox https://www.mathworks.com/products/matlab.htmli
neurosolutions: http://www.neurosolutions.com
Simbrain http://www.simbrain.net
BrainMaker: http://www.calsci.com/BrainIndex.html
JustNN http://www.justnn.com
IPNNL http://www.uta.edu/faculty/manry/new_software.html