آمورش شبکه عصبی پروژه محور

آمورش شبکه عصبی پروژه محور

آمورش شبکه عصبی پروژه محور

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

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

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

شبکه عصبی الهام از مغز

پیشنهاد ویژه:

« اولین و کاملترین دوره آموزشی نرم افزار اودئون ODEON برای طراحی آکوستیک »

ثبت نام دوره آموزشی نرم افزار اودئون ODEON


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

آمورش شبکه عصبی پروژه محور
آمورش شبکه عصبی پروژه محور


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

آمورش شبکه عصبی پروژه محور
آمورش شبکه عصبی پروژه محور


اولین نورون‌های مغز آن محرک را دریافت می‌کنند، سپس هر نورون ممکن است بر اساس میزان محرکی که دریافت کرده، “شلیک” را انتخاب کند یا خیر. “شلیک”، در این مورد، تصمیم نورون ها برای ارسال سیگنال به نورون هایی است که به آنها متصل است.

آمورش شبکه عصبی پروژه محور
آمورش شبکه عصبی پروژه محور

سپس نورون هایی که آن نورون ها به آنها متصل هستند ممکن است انتخاب کنند که شلیک کنند یا نکنند.

آمورش شبکه عصبی پروژه محور
آمورش شبکه عصبی پروژه محور

بنابراین، یک «فکر» را می‌توان به‌عنوان تعداد زیادی از نورون‌ها در نظر گرفت که بر اساس محرکی از نورون‌های دیگر شلیک می‌کنند یا نمی‌کنند. هنگامی که یک نفر در سراسر جهان پیمایش می کند، ممکن است افکار خاصی بیشتر از دیگران داشته باشد. به عنوان مثال، یک نوازنده ویولن سل ممکن است از برخی نورون ها بیشتر از یک ریاضیدان استفاده کند.

آمورش شبکه عصبی پروژه محور
آمورش شبکه عصبی پروژه محور

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

آمورش شبکه عصبی پروژه محور
آمورش شبکه عصبی پروژه محور

این یک توصیف بسیار ساده از مغز است. با این حال، برای درک ایده اساسی یک شبکه عصبی کافی است.

پیشنهاد ویژه:

دوره آموزش ماژول آکوستیک ساختمانی نرم افزار کامسول

ثبت نام دوره آموزشی نرم افزار کامسول

شهود شبکه های عصبی


شبکه‌های عصبی اساساً نسخه‌ای راحت و ساده‌شده از نورون‌های درون مغز هستند. یک شبکه عصبی از عناصری به نام “پرسپترون” تشکیل شده است که مستقیماً از نورون ها الهام گرفته شده است.

آمورش شبکه عصبی پروژه محور

پرسپترون ها مانند یک نورون داده ها را می گیرند،

آمورش شبکه عصبی پروژه محور

آن داده ها را مانند یک نورون جمع آوری کنید

سپس سیگنالی را بر اساس ورودی، مانند نورون، خروجی می دهد.

یک شبکه عصبی را می توان به عنوان یک شبکه بزرگ از این پرسپترون ها تصور کرد، درست مانند مغز که یک شبکه بزرگ از نورون ها است.

آمورش شبکه عصبی پروژه محور

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

آمورش شبکه عصبی پروژه محور

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

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

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

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

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

بنابراین، محاسبه خروجی یک شبکه عصبی فقط انجام یک دسته جمع و ضرب برای محاسبه مقدار همه پرسپترون ها است.

گاهی اوقات دانشمندان داده از این عملیات کلی به عنوان یک “طرح خطی” یاد می کنند، زیرا ما یک ورودی را از طریق عملیات خطی (جمع و ضرب) به یک خروجی نگاشت می کنیم.

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

این یک مشکل جدی است زیرا همه روابط بین ورودی و خروجی خطی نیستند. برای دور زدن این موضوع، دانشمندان داده از چیزی به نام “عملکرد فعال سازی” استفاده می کنند. اینها توابع غیر خطی هستند که می توانند در سراسر مدل تزریق شوند تا اساساً مقداری غیرخطی بپاشند.

آمورش شبکه عصبی پروژه محور

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

در هوش مصنوعی بسیاری از عملکردهای فعال سازی محبوب وجود دارد، اما صنعت تا حد زیادی بر روی سه مورد محبوب همگرا شده است: ReLU، Sigmoid، و Softmax، که در انواع برنامه های مختلف استفاده می شوند.

از بین همه آنها، ReLU به دلیل سادگی و توانایی تعمیم آن برای تقلید تقریباً هر عملکرد دیگری رایج ترین است.

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

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

پس انتشار Back Propagation


یکی از ایده های اساسی هوش مصنوعی این است که می توانید یک مدل را “آموزش دهید”. این کار با درخواست از یک شبکه عصبی (که زندگی خود را به عنوان یک توده بزرگ از داده های تصادفی شروع می کند) انجام می شود تا برخی کارها را انجام دهد. سپس، شما به نوعی مدل را بر اساس نحوه مقایسه خروجی مدل با یک پاسخ خوب شناخته شده به روز می کنید.

برای این بخش، بیایید یک شبکه عصبی با یک لایه ورودی، یک لایه پنهان و یک لایه خروجی را تصور کنیم.

هر یک از این لایه ها در ابتدا با وزنه های کاملا تصادفی به یکدیگر متصل می شوند.

و ما از یک تابع فعال سازی ReLU در لایه مخفی خود استفاده خواهیم کرد.

فرض کنید داده های آموزشی داریم که در آنها خروجی مورد نظر میانگین مقدار ورودی است.

و ما نمونه ای از داده های آموزشی خود را از طریق مدل ارسال می کنیم و یک پیش بینی ایجاد می کنیم.

برای اینکه شبکه عصبی خود را در کار محاسبه میانگین ورودی بهتر کنیم، ابتدا خروجی پیش بینی شده را با خروجی مورد نظر خود مقایسه می کنیم.

اکنون که می دانیم اندازه خروجی باید افزایش یابد، می توانیم از طریق مدل به گذشته نگاه کنیم تا محاسبه کنیم که چگونه وزن ها و سوگیری های ما ممکن است برای ترویج آن تغییر کند. ابتدا، بیایید به وزن هایی که بلافاصله به خروجی منتهی می شوند نگاه کنیم: w₇، w₈، w₉. از آنجایی که خروجی سومین پرسپترون پنهان 0.46- بود، فعال سازی از ReLU 0.00 بود.

در نتیجه، هیچ تغییری در w₉ وجود ندارد که باعث شود ما به خروجی مورد نظر خود نزدیک شویم، زیرا هر مقدار w₉ در این مثال خاص منجر به تغییر صفر می شود. با این حال، دومین نورون پنهان دارای خروجی فعالی است که بزرگتر از صفر است، و بنابراین تنظیم w8 بر خروجی این مثال تأثیر خواهد داشت.

روشی که ما در واقع محاسبه می‌کنیم که چقدر w₈ باید تغییر کند، ضرب کردن مقداری است که خروجی باید تغییر کند، ضربدر ورودی به w₈.

ساده‌ترین توضیح در مورد اینکه چرا این کار را به این صورت انجام می‌دهیم «به دلیل محاسبه حساب» است، اما اگر به نحوه به‌روزرسانی همه وزن‌ها در آخرین لایه نگاه کنیم، می‌توانیم یک شهود سرگرم‌کننده شکل دهیم.

توجه کنید که چگونه دو پرسپترون که “شلیک” دارند (خروجی بیشتر از صفر دارند) با هم به روز می شوند. همچنین، توجه کنید که هر چه خروجی پرسپترون قوی‌تر باشد، وزن متناظر آن بیشتر به‌روز می‌شود. این تا حدودی شبیه این ایده است که “نورون هایی که با هم شلیک می کنند، به هم متصل می شوند” در مغز انسان. محاسبه تغییر بایاس خروجی بسیار آسان است.

در واقع، ما قبلاً آن را انجام داده ایم. از آنجایی که بایاس این است که یک خروجی پرسپترون چقدر باید تغییر کند، تغییر در بایاس فقط تغییر در خروجی مورد نظر است. بنابراین، Δb4=0.3

اکنون که محاسبه کرده‌ایم وزن‌ها و بایاس پرسپترون خروجی چگونه باید تغییر کند، می‌توانیم تغییر دلخواه خود را در خروجی از طریق مدل «بازگشت» کنیم.

بیایید با انتشار برگشتی شروع کنیم تا بتوانیم نحوه به‌روزرسانی w1 را محاسبه کنیم. ابتدا محاسبه می کنیم که خروجی فعال شده اولین نورون پنهان چگونه باید تغییر کند. ما این کار را با ضرب تغییر در خروجی در w₇ انجام می دهیم.

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

به یاد بیاورید که ما نحوه به روز رسانی w₇ را بر اساس ضرب ورودی آن در تغییر در خروجی مورد نظر محاسبه کردیم. ما می توانیم همین کار را برای محاسبه تغییر در w1 انجام دهیم.

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

یک ایده اساسی از انتشار معکوس “نرخ یادگیری” نامیده می شود که به اندازه تغییراتی است که ما در شبکه های عصبی بر اساس دسته خاصی از داده ها ایجاد می کنیم.

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

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

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

پس از اینکه محاسبه کردیم که هر پارامتر چگونه باید تغییر کند، گویی تنها پارامتری است که به‌روزرسانی می‌شود، می‌توانیم قبل از اعمال آن تغییرات در پارامترها، همه آن تغییرات را در یک عدد کوچک مانند 0.001 ضرب کنیم. این عدد کوچک معمولاً به عنوان “نرخ یادگیری” نامیده می شود، و مقدار دقیقی که باید داشته باشد به مدلی که ما در حال آموزش آن هستیم بستگی دارد.

این به طور موثر تنظیمات ما را قبل از اعمال آنها در مدل کاهش می دهد. در این مرحله ما تقریباً همه چیزهایی را که برای پیاده سازی یک شبکه عصبی باید بدانیم، پوشش دادیم.

پیاده سازی شبکه عصبی از ابتدا


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

این مطلب تکمیل خواهد شد و ما در حال تکمیل بخش عملی آن هستیم که بعد از تکمیل شدن در همینجا بارگذاری خواهد شد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --