به نظر شما یک نرمافزار هوشمند چگونه میتواند مسائل خاصی را درک کرده و بتواند مسئلههای مشابه را با کمترین خطا حل کند؟ برای پاسخ به این سوال، بهتر است پرسش دیگری را مطرح کنیم؛ انسانها چگونه میتوانند موضوعی را یاد بگیرند؟ اصلاً چگونه از شکستهای خود درس میگیریم؟
در حقیقت، ما با استفاده از شبکه های عصبی میتوانیم موضوعهای مختلف را درک کنیم، از اشتباهات خود درس بگیریم و زندگی بهتری برای خود بسازیم.
حال برای اینکه بتوانیم یک ماشین هوشمند طراحی کنیم که قدرت یادگیری داشته باشد، بهترین انتخاب شبیه سازی شبکه های عصبی زیستی انسان، بر روی کامپیوتر است. بنابراین شبکه های عصبی در هوش مصنوعی، الهام گرفته از شبکه های عصبی مغز انسان است.
برای اینکه بتوانیم شبکه های عصبی (neural network) را در هوش مصنوعی پیادهسازی کنیم، ابتدا باید مفهوم شبکه عصبی در مغز خود را بهتر درک کنیم.
بهطورکلی برای طراحی ابزارهای هوشمند با قدرت تصمیم گیری، باید علاوه بر درک مفهوم هوشمند بودن، موجودات هوشمند را نیز بهتر بشناسیم؛ و چه موجودی هوشمندتر از انسان؟
مغز انسان از میلیاردها نورون (حدود 85 میلیارد) تشکیل شده است و این سلولهای عصبی میتوانند با یکدیگر ارتباط داشته باشند.
با استفاده از این تعریف میتوانیم به این نتیجه برسیم که مغز ما شامل یک شبکه عصبی عظیم از سلولهای عصبی است. نورونها همان سلولهای عصبی هستند. نورونها انواع مختلفی دارند؛ بدین منظور میتوانیم نگاهی به ساختار کلی یک نورون در مغز داشته باشیم:
در حقیقت نورونها بنیادینترین سلولهای عصبی هستند. هر نورون میتواند با بیش از 10,000 نورون دیگر در ارتباط باشد. هنگامی که در حال یادگیری مهارت جدیدی هستیم، یکی از مهمترین اتفاقهایی که در مغز ما رخ میدهد، ایجاد ارتباطات جدید بین نورونهای مختلف است و زمانی که در حال تمرین هستیم آن ارتباطات را تقویت میکنیم.
فرایند یادگیری در مغز پیچیدهتر از آن است که بتوان آن را در چند پاراگراف توضیح داد و میتوان برای این فرایند در مغز، کتابهای متعددی نوشت.
در علوم رایانه نیز میتوان با استفاده از طراحی ساختار دادهای مشابه نورن و ایجاد ارتباط نمونههای آن با یکدیگر، یک شبکه عصبی مصنوعی تشکیل داد. در حقیقت شبکه عصبی یک سیستم پردازش اطلاعات است که دارای عملکردی مشابه با شبکه عصبی بیولوژیکی است.
شبکه های عصبی مصنوعی در حقیقت ترکیبی از ریاضیات و ساختاری مشابه با شبکه عصبی مغز انساناند:
در تصویر زیر یک شبکه عصبی ساده را مشاهده میکنید:
بهطورکلی یک شبکه عصبی از سه لایه کلی تشکیل میشود که به ترتیب لایه ورودی (Input layer)،لایه پنهان (Hidden layer) و لایه خروجی (Output layer) نام دارند. هر چند شبکه های عصبی میتوانند لایههایی به جز اینها را نیز داشته باشند. اگر لایه پنهان شامل بیش از یک زیرلایه باشد، آن را یک شبکه عصبی عمیق در نظر میگیریم.
یک شبکه عصبی مصنوعی را میتوان با سه ویژگی زیر مشخص کرد:
عاملهای مهمی که رفتار یک نورون را تعیین میکنند شامل تابع فعالسازی، اتصلات ورودی/خروجی و وزنهای هر اتصال هستند. تنها لایهای که دادههای ورودی آن نمیتواند خروجی نورونهای دیگر باشد، لایه ورودی است.
لایه ورودی محاسبات خاصی را انجام نمیدهد و فقط داده را به لایههای دیگر ارسال میکند؛ بنابراین میتوان هنگام شمارش لایه ها آنها را نادیده گرفت. همچنین لایه خروجی نیز در شمارش لایههای شبکه عصبی نادیده گرفته میشود. به عبارت دیگر تعداد لایههای شبکه را میتوان به این شکل مشخص کرد که:
اگر یک لایه شامل اتصالات ورودی وخروجی وزن دار بود، میتوان آن را جزئی از لایههای شبکه در نظر گرفت.
تاریخچه شبکه های عصبی احتمالاً در اواخر دهه 1800 با تلاشهای علمی برای مطالعه فعالیت مغز انسان آغاز شد. در سال 1890، ویلیام جیمز اولین کار خود را در مورد الگوهای فعالیت مغز منتشر کرد. با این حال، پایه سازنده اصلی شبکه های عصبی امروزه نتیجه تلاشهای یک فیژیولیست عصبی به نام مک کالوچ و یک ریاضیدان به نام والتر پیتس بود.
در سال 1943 این دو نفر یک مقاله در رابطه با چگونگی عملکرد نورونها نوشتند. همچنین برای توصیف عملکرد نورونها در مغز، یک شبکه عصبی ساده با استفاده از مدارهای الکتریکی مدلسازی کردند.
در سال 1949 دونالد هب اثری به نام “سازمان رفتار” را نوشت؛ اثری که به این واقعیت اشاره دارد که مسیرهای عصبی با هر بار استفاده تقویت میشوند. او استدلال کرد که هر پرتاب سیگنالهای الکتریکی بین دو سلول عصبی، ارتباط بین آنها را تقویت میکند.
این قانون که بعداً به افتخار دونالد هب به نام یادگیری هبی (Hebbian Learning Rule) شناخته شد، یکی از سادهترین قوانین یادگیری برای شبکه های عصبی مصنوعی است.
در سال 1950، یعنی زمانی که کامپیوترها قدرتمندتر شده بودند، امیدها برای شبیهسازی یک شبکه عصبی روی کامپیتور افزایش یافت. اولین اقدام شبیهسازی توسط ناتانیل روچستر(دانشمند کامپیوتر) در آزمایشگاه شرکت IBM انجام شد که متاسفانه با شکست مواجه شد.
در سال 1951 ناروین مینسکی اولین شبکه عصبی مصنوعی(ANN) را در دانشگاه پرینستون ساخت.
با این حال، تلاشها تا به امروز ادامه داشته و یکی از ثمره این تلاشها دستیارهای صوتی ماننده الکسا بوده.
همانطور که قبلاً مشاهده کردید، ساختار یک شبکه عصبی معمولاً از سه بخش تشکیل شده است که به ترتیب لایه ورودی، لایه مخفی، لایه خروجی نام دارند. با این حال میتواند شامل لایههای کانولوشنال و لایه رمزگذار یا رمزگشایی نیز باشد.
در یک شبکه عصبی نورونهای لایه ورودی نقش متفاوتی نسبت به سایر نورونها بازی میکنند. نورونهای لایه ورودی را “نورن غیرفعال” مینامد، زیرا این نورونها اطلاعاتی را از نورونهای قبلی دریافت نمیکنند (کاملاً واضح است چرا، زیرا این نورونها در اولین لایه هستند).
نورونها در یک شبکه عصبی مصنوعی معمولاً باید شامل ورودیهای وزن دار باشند و بر اساس آنها عمل کنند. اما این قضیه برای نورونهای لایه ورودی میتواند متفاوت باشد زیرا نورونهای لایه ورودی میتوانند شامل وزن نباشند و وزنها در خود نورونهای لایه ورودی محاسبه شوند.
یکی از روشهای رایج برای تولید وزن، استفاده از اعداد تصادفی است. نورونهای لایه ورودی وظیفه ارسال خروجی وزندار برای لایه مخفی را دارند؛ زیرا لایه مخفی شامل نورونهایی میشود که وروودی آنها حتماً باید شامل وزن باشد.
توجه به این نکته نیز ضروری است که اتصال خروجی یک لایه ورودی میتواند به یک نورون در زیرلایه دوم در لایه مخفی باشد؛ یعنی هیچ اجباری به متصل کردن لایه ورودی به اولین زیرلایه در لایه مخفی نیست.
در یک شبکه عصبی مصنوعی، لایه ورودی میتواند بیش از یک لایه باشد.
ورودیهای لایه ورودی باید ابتدا نرمالیزه شوند و سپس برای لایه ورودی ارسال شوند. نرمالیزه کردن داده یکی مهمترین مراحل در دادهکاوی است.
این لایه، بین لایه ورودی و لایه خروجی است و میتواند شامل زیرلایه باشد. شاید بتوان گفت مهمترین قسمت در یک شبکه عصبی مصنوعی لایه مخفی باشد؛ زیرا محاسبات مهم در این لایه انجام میشود و برای لایههای خروجی آماده میشود. اگر تعداد زیرلایههای لایه مخفی در یک شبکه عصبی مصنوعی بیش از یک عدد باشند، آن شبکه یک شبکه عصبی عمیق محسوب میشود.
توجه کنید که هر زیرلایه در لایه مخفی، خود یک لایه مخفی است و ما در این قسمت لایه مخفی را یک مجموعه در نظر گرفتهایم. این قانون برای سایر لایهها نیز صدق میکند.
در این لایه فعالیتهایی مشابه فعالیتهای مغز انسان انجام میشود. لایه مخفی شامل نورونهایی است که شامل ورودی وزن دار و تابع فعال ساز هستند.
تابع فعال ساز مهمترین قسمت یک نورون است که وظیفه دارد طبق پارمترهایی که به همراه دادههای اصلی میآیند(معمولاً وزن و بایاس)، خروجی برای نورن یا نورنهای بعدی تولید کند.
روشهای پیکردبندی نورونهای لایه مخفی میتواند متفاوت باشد. برخی از آنها توسط فرایندی به نام پسانتشار کاملاً تنظیم و کالیبره میشوند. در سادهترین تعریف از آنها میتوان گفت:
مانند یک نورون بیولوژیکی سیگنال(داده) احتمالی را دریافت کرده، محاسبات لازم را انجام میدهند و خروجی وزن دار را برای نورنهای دیگر را تولید میکنند(تابع فعال ساز).
در یادگیری ماشین تمرکز بیشتر بر روی لایه مخفی است. هر زیرلایه در لایه مخفی میتواند شامل یک تابع فعال ساز خاص باشد. معمولاً نورونهای یک زیرلایه رفتار مشابهی دارند.
لایه خروجی وظیفه دارد تا نتیجه نهایی را به برنامه تحویل دهد. میتوان در یک شبکه عصبی از بیش از یک لایه خروجی استفاده کرد. یک تابع خروجی، میتواند نماینده یک مفهوم باشد. به عنوان مثال در یک شبکه عصبی که قرار است تصویر یک عدد را تشخیص دهد، میتوان یک لایه خروجی داشت که شامل 10 نورون است.
هر کدام از آنها نماینده یک عدد از 0 تا 9 هستند و خروجی هر کدام یک عدد بین 0 تا 1 است. اگر عدد خروجی در نورن شماره 10 برابر 0.8 باشد و خروجی بقیه نورون ها زیر این عدد باشد، میتوان نتیجه گرفت که عدد موردنظر 9 است.(زیرا از 0 شروع کردیم).
یک شبکه بدون اتصال اجزای آن به یکدیگر معنی ندارد. شاید بتوان گفت که مهمترین عنصر سازنده یک شبکه، اتصالات بین اجزای آن است.
در شبکه عصبی مغز انسان، هر اتصال یک شدت دارد که اهمیت آن را مشخص میکند، این پدیده در شبکه های عصبی مصنوعی نیز باید پیادهسازی شود. بدین منظور در شبکه عصبی مصنوعی هر اتصال شامل یک وزن است و هر وزن نشاندهنده اهمیت یک اتصال است. وزن در یک شبکه عصبی مصنوعی نماینده شدت در شبکه عصبی بیولوژیکی است و بایاس یک عدد ثابت است که به محاسبات در شبکه عصبی کمک میکند.
کاملاً واضح است که وزن ها مهمترین عنصر در یادگیری یک شبکه عصبی هستند.
در حقیقت یک شبکه عصبی بدین صورت عمل میکند که مجموعه عظیمی از اطلاعات را که شامل سوال و پاسخ صحیح است را تحویل میگیرد. این داده ها همیشه باید به صورت عددی تحویل شبکه داده شوند. وظیفه شبکه عصبی این است که از طریق الگوهای ریاضیاتی، ارتباطی بین این اطلاعات و پاسخ صحیح پیدا کند.
ما باید برای شبکه عصبی یک حد خطا در نظر بگیریم. این کار میتواند با خطاهای متعددی همراه باشد و به ازای هر خطا، شبکه عصبی موظف است که وزن ها و بایاس را بهروز کند و به حالت ایدهآل نزدیک شود. به ازای هر بهروزرسانی فاصله از پاسخ صحیح کم و زیاد میشود و این فرایند تا زمانی که به حد خطای مورد نظر برسیم ادامه دارد.
همانطور که قبلاً اشاره کردیم مهمترین قسمت سازنده یک نورون، تابع فعالساز آن است. تابع فعالساز یک تابع ریاضیاتی است. گاهی این توابع را توابع انگیزشی نیز مینامند.
توابع فعالساز معمولاً مقداری بین 0 و 1 تولید میکنند. این موضوع میتواند نسبت به خود تابع متفاوت باشد. برای مثال در تابع ReLU مقادیر خروجی میتوانند بیش از 1 باشند. معمولاً تابع فعالساز یک تابع غیر خطی است. برخی از توابع فعالساز عبارتند از:
قانون یادگیری روشی بر پایه ریاضیات است که به شبکه عصبی کمک میکند که از اشتباهات خود درس گرفته و عملکرد خود را بهبود بخشد. بدیهی است که این پروسه یک پروسه تکرار شونده است؛ زیرا تا زمانی که اشتباه نکنیم، نمیتوانیم درس بگیریم و زمانی که درس گرفتیم مجدداً تلاش میکنیم. این پروسه تا زمانی که اشتباهات ما به کمترین حد برسد ادامه دارد. میتوان اینطور در نظر گرفت که قوانین یادگیری روشهایی برای بهروزرسانی وزنها و بایاس هستند.
برخی از روش های یادگیری عبارتند از:
شبکه های عصبی در انواع متفاوتی وجود دارند که هر کدام برای اهداف خاصی میتوانند مورد استفاده قرار بگیرند. با این حال یک شبکه عصبی میتواند در بسیاری از زمینهها مورد استفاده قرار بگیرد. برخی از شبکه های عصبی عبارتند از:
شبکه عصبی در علوم مختلف کاربردهای فراوانی دارد. میتوان از شبکه عصبی در آنتیویروسها، دادهکاوی، مدلسازی پدیدههای پیچیده فیزیک، پردازش تصویر، پیشبینی قیمت سهام و… استفاده کرد.
برخی از کاربردهای شبکه عصبی عبارتند از:
· طبقهبندی اطلاعات
· پیشبینی وضعیت آب و هوا
· پردازش تصاویر
· تشخیص گفتار
· پردازش زبان طبیعی
· پیشبینی قیمت سهام
· ساخت دارو
· شبیه سازی پدیدههای پیچیده فیزیکی
شبکه های عصبی مصنوعی مهمترین بخش از یادگیری عمیق محسوب میشوند. این شبکهها الهامگرفته از مغز انسان و نورونهای آن هستند. معمولاً شبکه های عصبی شامل سه لایه ورودی، پنهان و خروجی هستند. لایههای ورودی و خروجی جزئی از شبکه عصبی محسوب نمیشوند.
مهمترین بخش یک شبکه عصبی مصنوعی، لایه پنهان آن است و اگر شامل بیش از یک زیرلایه باشد، آن شبکه را یک شبکه عصبی عمیق مینامند. مهمترین عنصر در یادگیری یک شبکه عصبی وزن اتصالات آنها است. قوانین یادگیری روشهایی برای به روز رسانی وزن ها و بایاسها هستند. بایاسها یک عدد کمکی در محاسبات هستند. توابع فعال ساز، مهمترین قسمت یک نورون هستند؛ این توابع یک فرمول ریاضیاتی هستند.
پیاده سازی شبکه های عصبی و درک کردن آنها ساده نیست و قطعاً نیاز به زمان و تمرین فراوان دارد، اما ما در بیگ پرو وان تلاش کرده ایم که افراد محققی که نیاز به تحلیل دادههای خود دارند بدون نیاز به دانشی در زمینه هوش مصنوعی، بتوانند با چند کلیک ساده به اهداف خود برسند.
منبع: https://b2n.ir/z95042
Quick support