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

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

در ساختار بالا، x1 و x2 همون ورودی های ما هستند که بهشون ضریب داده میشه . بایاس هم یه مقداری هست که میتونه به طور ثابت به کل شبکه اضافه بشه. مثلا فرض کنید میخوایم تابع خطی زیر رو در شبکه های عصبی به عنوان ورودی داشته باشیم :

در تابع خطی بالا، 4 – و 1- ضرایب و وزن های ورودیمون هستند و عدد 12 به عنوان مقدار بایاس هست که به کل شبکه وارد میشه. این تابع خطی رو به صورت شبکه ای نمایش میدیم. خواهیم داشت:

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

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

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

خب شبکمون تقریبا طراحی شده و تفکیک مورد نظرمون انجام شده. اما میخوایم کمی دقیق تر به این تفکیک بپردازیم و مدل سازیمون رو طوری انجام بدیم که قابلیت تبدیل به زبان ماشین رو داشته باشه. همونطور که میدونید، ماشین جز زبان اعداد اعداد منطقی (یا همون صفر و یک) و یک سری عملگرهای ساده، چیزی نمیفهمه. به همین دلیل باید مدل سازی هامون رو طوری انجام بدیم که به زبان اعداد نزدیک تر بشه.
خب فرض کنید برای مقدار وردیمون یا همون (x1,x2)، نقطه (2,2) رو در نظر بگیریم. میخوایم بدونیم که آیا این نقطه بر طبق دسته بندی که که در شبکهمون تنظیم کردیم، در نورون های سبز قرار میگیره یا نه. به همین دلیل میایم احتمال اینکه این نقطه در قسمت مورد نظرمون قرار بگیره رو محاسبه میکنم و بدین ترتیب، برای هر تابع ورودی، یک مقدار احتمالی بدست میاریم. برای مثال ، فرض کنید این احتمال برای تابع خطی اول، 0.88 و برای تابع دوم، مقدار 0.64 محاسبه بشه. این اعداد، به نوعی نماینده ای از توابع خطی ورودیمون هستند.

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

پس همونطور که میبیند، دو مقدار ورودی یا همون نقطه (2,2) وارد توابع خطیمون شدند و در نهایت ترکیب این توابع با ضرایب و مقادیر بایاس، احتمال حضور این نقطه در قسمت سبز به دست اومده . این میزان احتمالی، معیاری برای تفکیک و دسته بندی هستش. برای مثال اگه این احتمال از یک میزان خاص کمتر باشه، میتونیم بگیم که به احتمال زیاد این نقطه در دسته بندی مورد نظر ما وجود نداره . یا مثلا میتونیم از ماشین بخوایم تا کلیه نقاطی که به احتمال بالای 90 درصد ویژگی مورد نظر ما رو داره رو بهمون بده. شبکه های عصبی از طریق همین احتمالات و دسته بندی ها میتونه تشخیص بده که برای مثال یک عکس متعلق به چه چیزی هست ( فناوری بینایی کامپیوتر) و یا ده ها کاربرد دیگه ای در شبکه های عصبی وجود داره، از طریق همین محاسبات تفکیک سازی انجام میشه.
خب یه قدم پایانی مونده تا شبکه ای که طراحی کردیم، دقیق تر از قبل به نظر بیاد. اونم اینه که میتونیم به جای اینکه نقطه (2,2) رو جدا جدا به هر کدوم از توابع خطی بدیم، به صورت یکجا اینکار رو انجام بدیم . با این کار، شبکمون ساده تر از قبل میشه. در این ساختار و لایه های شبکه عصبی هم به سادگی قابل تفکیک هست و میتونیم هر سه لایه ورودی، پنهان و خروجی رو در شبکه مشاهده کنیم.

خب با مثالی که مورد بررسی قرار دادیم، تونستیم یک شبکه عصبی غیر خطی رو طراحی کنیم و همچنین با جزئیات این شبکه ها بیشتر آشنا بشیم. در ادامه نیز، کم کم به بحث های عملی بیشتر برای طراحی این شبکه ها خواهیم پرداخت . پس مثل همچنان با ما همراه باشید..
منابع
https://www.javatpoint.com/pytorch-architecture-of-deep-neural-network
https://www.upgrad.com/blog/neural-network-architecture-components-algorithms/
کلیدواژه ها
دوستان عزیزم؛ برای ارتباط با برترها و رزرو پشتیبان ویژه پیج کانون برترها را دنبال کنید.
همچنین میتوانید با شماره 0218451 داخلی 3123 تماس بگیرید.

