نویسنده: محمد قربانی
آشنایی با پرسپترون:
شبکه های عصبی مصنوعی در واقع بر اساس زیست شناسی پیاده سازی شده اند. به نورون هایی که از نورون های مغز انسان شبیه سازی شده اند پرسپترون می گویند.
هر نورون در مغز انسان ها شامل سه بخش دندریت ها که ورودی های نورون می باشند و بدنه اصلی و اکسون ها که خروجی آن می باشد تشکیل شده است.
نورون های مصنوعی نیز دارای ورودی ها و خروجی ها هستند که این مدل ساده به عنوان یک پرسپترون شناخته می شود.
حال بیایید مثال ساده ای از چگونگی عملکرد آن را ببینیم.
ورودی های هر پرسپترون هرکدام معرف مقادیر یک ویژگی می باشند.
هر ورودی پرسپترون در یک وزنی ضرب می شود که در ابتدا این وزن ها بصورت تصادفی انتخاب می شوند و با آموزش شبکه وزن ها با توجه به الگوریتم هایی که در ادامه صحبت خواهیم کرد تغییر می کنند و به مقادیر ایده آل خود می رسند.
حال ورودی ها در وزن های خود ضرب می شوند تا مقدار تاثیر گذاری آن ورودی مشخص شود.
پس از ضرب ورودی ها در وزن های خود این مقادیر به تابع فعال در بدنه پرسپترون انتقال پیدا میکنند.
بیایید با یک تابع فعال ساده شروع کنیم.
تابع فعال: اگر مجموع ورودی ها مثبت شد خروجی یک و اگر منفی شد خروجی صفر می باشد.
اگر تمام ورودی ها صفر باشند چه مشکلی پیش می آید؟
در این حالت وزن ها تاثیر خود را از دست می دهند و شبکه قابل یادگیری نیست پس برای حل این مشکل یک عدد قابل یادگیری بایاس به پرسپترون در کنار ورودی ها می دهیم که در اینجا مقدار یک را در نظر گرفتیم.
حال نحوه نمایش ریاضی این پرسپترون را با هم بررسی کنیم.
برای مثال مجموعه دیتا هدی که تصاویر را به وکتور 25 تایی تبدیل کرده بودیم که معرف پیکسل های آن بود که ما به عنوان ویژگی های آن استفاده کردیم؛ اگر بخواهیم به عنوان ورودی یکی از داده ها را به یک پرسپترون برای آموزش بدهیم باید 25 عدد ورودی ویژگی و یک بایاس با مقدار یک برای پرسپترون در نظر گرفت.
همانطور که ما تعداد بسیار زیادی پرسپترون در شبکه خود داریم پس می توانیم این مدل را به صورت ماتریسی گسترش دهیم.
حال اگر تعداد زیادی از پرسپترون ها را کنار هم قرار دهیم یک MLP یا شبکه ی چند لایه پرسپترون مانند زیر ایجاد می شود.
در شکل بالا به لایه بنفش رنگ لایه ورودی و به لایه قرمز رنگ لایه خروجی گفته می شود که prediction را مشخص می کند.
به لایه هایی هم که نه ورودی هستند و نه خروجی، لایه پنهان گفته می شود.
اگر تعداد لایه های پنهان بیش از 2 باشد شبکه به deep learning تبدیل می شود.
هر چه بیش تر در لایه پیش برویم بصورت انتزاعی تر باید نگاه کنیم؛ برای مثال اگر در لایه دوم شبکه می تواند خط را تشخیص دهد در لایه های بعدی می تواند اشکال متفاوتی را تشخیص دهد که از ترکیب خط های لایه ها قبلی می باشد.
برای درک بهتر این قسمت می توانید از این لینک استفاده کنید.
حال در مجموعه داده هدی اگر بخواهیم این شبکه را آموزش دهیم باید 25 عدد ورودی برای گرفتن ویژگی ها در نظر گرفت و 10 عدد پرسپترون برای خروجی در نظر گرفت که اگر وکتور 25 تایی عدد 2 را برای مثال به این شبکه دهیم باید شبکه عدد دو را به عنوان predict برگرداند که با روش oneHotEncoding باید ترتیب پرسپترون های خروجی به شکل 0010000000 باشد.
مثلا برای عدد 9 باید 0000000001 برگرداند.
حال بیایید کمی بیش تر درباره توابع فعال بحث کنیم:
در شروع توابع فعال ما یک تابع ساده بود که فقط قبول و یا عدم قبول یک مقدار را با برچسب های ۰ و ۱ مشخص می کرد.
یکی از مشکل های این تابع این است که تغییرات کوچک در خروجی آن تاثییری ندارد و اگر ورودی برای مثال از ۰/۹- به ۰/۱- تغییر کند برای آن تفاوتی نمی کند و در هر دو حالت ۰ برمی گرداند.
این تابع به دلیل اینکه مشتق های آن در همه ی نقاط ۰ می باشد در شبکه های پرسپترونی چند لایه جواب نمی دهد.
اگر تابعی بخواهیم که مشتق های آن وجود داشته باشد و تصمیم گیری مشابه تابع قبلی داشته باشد میتوانیم از تابع sigmoid استفاده کنیم.
تابع مشابه دیگری نیز معرفی شد که به دلایل ریاضی محبوب تر از sigmoid می باشد:
این تابع tanh نام دارد.
البته باید توجه داشت که انتخاب تابع فعال به نوع کاری که قصد انجامش را دارید وابسته است.
یکی از مشکل های این تابع آن است که چون مشتق آن بین صفر و یک است در شبکه های چند لایه چون این مشتقات در هم ضرب می شوند در نهایت عددی بسیار نزدیک به صفر تولید می شود پس مناسب MLP نمی باشد.
پس دانشمندان تابع ساده دیگری برای استفاده معرفی کردند:
این تابع ReLU نام دارد که چون مشتقش در محدوده بزرگتر از یک، ۱ می باشد مشکل تابع قبلی را ندارد.
شکل ریاضی این تابع:
max(0, Z)
در آینده به دلیل کارایی بالای دو تابع tanh و ReLU بیشتر تمرکز ما روی این دو تابع خواهد بود.
کتابخانه های deep learning بیشتر این توابع را پیاده سازی کردند پس نیازی نیست که نگران پیاده سازی این توابع باشیم.
شبکه های اجتماعی