شما اینجا هستید

نُرون ها، ماشین‌های پردازش طبیعت

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


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

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

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

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

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


برای پیاده‌سازی حالت آستانه در یک تابع که تعدادی سیگنال ورودی میگیرد و یک سیگنال خروجی تولید می کند، ما نیاز به چیزی به نام تابع فعال ساز داریم. از لحاظ ریاضی، توابع خیلی زیادی داریم که میتوانند این حالت را به وجود آورند. یک تابع پله ای ساده (Step Function) میتواند این کار را انجام دهد. 

 


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

می‌توانیم روی این تابع پله ای یک بهبود دیگر نیز ایجاد کنیم. تابع زیر که شیبه حرف S است به نام تابع سیگموئید (Sigmoid function) شناخته می شوند. این تابع نرم تر از تابع پله ای که کمی سخت‌گیر است عمل می کند. این تابع به نظر طبیعی تر و واقعی‌تر می رسد. طبیعت به ندرت لبه های سخت و تند و تیز دارد.

ما از همین تابع S شکل سیگومئید برای کارهای بعدیمان استفاده می کنیم. محققان هوش مصنوعی از تابع های مشابه ای نیز استفاده می کنند. اما تابع سیگومئید آسان و بسیار رایج است. برای همین میتوانیم با آن راحت باشیم.
تابع سیگموئید گاهی با نام تابع لُجستیک(logistic function) نیز نامیده می شود. 


اوه اوه. قیافه‌اش که در نگاه اول کمی ترسناک به نظر می رسد.
حرف e یک عدد ثابت ریاضی با این مقدار است


2.71828…


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

اعدادی شیبه به این اسم‌ فلسفی دارند. اسم آن‌ها اعداد متعالی است. این اعداد داستان‌های جالبی نیز برای خودشان دارند. اما در اینجا فقط کافی است که فکر کنید این عدد برابر مقدار 2.71828 است.  ورودی x منفی است و مقدار e به توان منفی x میرسد. نتیجه بعلاوه عدد ۱ می‌شود بنابراین ما داریم: 


1+e-x

 

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

 

یکی از ویژگی‌های دیگر جالب این تابع این است که وقتی x برابر با مقدار صفر است مقدار e-x برابر با عدد یک می‌شود به خاطر اینکه هرچیزی به توان صفر برابر با ۱ می شود. بنابراین مقدار 


1 / (1 +1 )


برابر با ۱/۲ یا همان 0.5 می‌شود برای همین تابع سیگموئید محور y را در ۱/۲ قطع می کند.

این یکی دیگر از دلایلی محکم دیگری است که ما تابع سیگموئید را از میان تعداد زیادی از تابع های S شکل  برای تنظیم آستانه تحریک نورون انتخاب کرده ایم. 

 

 

 

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

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

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

 

 

 

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

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


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


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

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


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


اگر راه حل ساده‌تر کار می کند، با همان کنار میاییم. تصویر زیر دوباره همان گره‌های متصل شده را نشان می دهد، اما این بار وزن های مرتبط با هر اتصال نیز آمده است. وزن کم اثر یک سیگنال یا مقدار آن را کم می‌کند و وزن زیاد مقدار و اثر آن را تقویت می کند.


نیازی به توضیح نیست که اعداد کنار نماد وزن ها چی هستند. وزن w2,3 به معنای وزن مربوط به سیگنال متصل شده بین گره ۲ از یک لایه به گره ۳ در لایه بعدی است. بنابراین مثلاً مقدار وزن w1,2  مشخص می‌کند که سیگنال انتقالی از گره ۱ به گره ۲ در لایه بعدی کاهش یابد یا تقویت شود.

برای شرح این ایده در تصویر زیر دو ارتباط بین یک نود در اولین لایه به لایه‌های بعدی پر‌رنگ تر شده‌اند


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

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

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



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

دیدگاه جدیدی بگذارید