برنامه نویسی

شبکه های عصبی را بیاموزید: یک دروازه Xor را از ابتدا با پایتون قدم به قدم بسازید

به منظور این وبلاگ ما با استفاده از پایتون یک شبکه عصبی را از ابتدا می سازیم.
هدف این خواهد بود که شبکه عصبی دروازه Xor را یاد بگیرد.

شرح تصویر

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

شرح تصویر

شرح تصویر

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

1) توابع فعال سازی (ما از Sigmoid استفاده خواهیم کرد)
2) جبر خطی (صادقانه اگر این را نمی دانید شاید باید خواندن را متوقف کنید؟!)

عملکرد فعال سازی سیگموئید:

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

در حین عبور از جلو ، خروجی های هر نورون محاسبه می شود.

الگوریتم عبور به جلو

الگوریتم مستقیم به جلو است

  • مبلغ وزنی ورودی های ورودی * و وزنه ها را بگیرید
  • تعصب نورون فعلی را به مبلغ وزنی اضافه کنید
  • عملکرد فعال سازی و ویولا را اعمال کنید! شما خروجی یک نورون را دارید.

بیایید این کار را برای یک نورون با هم انجام دهیم

شرح تصویر

1) مبلغ وزنی = 0.46 * 1 + 0.03 * 1 = 0.49
2) اضافه کردن تعصب به مبلغ وزنی = 0.49 + 0.12 = 0.61
3) با استفاده از عملکرد فعال سازی (سیگموئید) = سیگموئید (0.61) = 0.6479 = 0.65 ~
(من به سادگی x را با 0.61 در (1/1 + e^-x) جایگزین کردم)

اگر می خواهید یک شبکه بزرگ یا در صورت 4 بار بیشتر ، فقط به این 7B بار بیشتر نیاز داشته باشید.

پاس رو به جلو

شرح تصویر

2 بخشی از backpropagation وجود دارد
1) خطا را محاسبه کرده و میزان هر نورون در آن خطا را مرتبط کنید
2) به روزرسانی وزنه ها برای کاهش خطا

خطای محاسبه

شرح تصویر

برای آخرین لایه (لایه خروجی) ، اگر به طور شهودی در مورد آن فکر می کنید.
برای بهبود ما به دو چیز نیاز داریم
1) با چه میزان تفاوت داریم
2) در صورت افزایش یا کاهش مقدار خروجی ما برای مطابقت با خروجی مورد انتظار

دستیابی به قسمت اول ساده است ، می توانیم محاسبه کنیم
(خروجی خروجی- پیش بینی شده).

برای بخش دوم ، شما به دانش کمی در مورد حساب (یعنی مشتقات) نیاز دارید.

نترسید ، اگر نمی دانید بیمار به شما کمک می کند درک کنید ..

یک مشتق را می توان به این ترتیب تعریف کرد:

شیب مماس به یک منحنی در این مرحله به عنوان مشتق عملکرد با توجه به x شناخته می شود

شرح تصویر

هدف این است که خطا را به حداقل برساند (یا در این مورد شیب).
اگر شیب مثبت باشد ، باید ارزش خود را کاهش دهیم و برعکس برای یک شیب منفی.

محاسبه خطا لایه نهایی

= (خروجی- مورد انتظار_output) * مشتق (خروجی)

مشتق مقدار خروجی را می توان به راحتی با قرار دادن مقدار خروجی به جای x در این فرمول یافت
(خروجی) * (1 – خروجی) (شکل 2 -> سیگموئید و مشتق آن را ببینید)

بیایید آن را برای اولین نورون در آخرین لایه حل کنیم

شرح تصویر

= (0.77 – 1) * مشتق (0.77)
= -0.23 * مشتق (0.77)
= -0.23 * [(0.77) * (1-0.77)]= – 0.040733
= ~ -0.04

بعد از انجام این کار برای هر دو نورون در لایه خروجی ، شبکه چیزی شبیه به این خواهد بود

شرح تصویر

برای سلولهای عصبی در لایه های پنهان

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

هر نورون ممکن است در این خطا نقش داشته باشد ، شما می خواهید وزن نورون متناسب با تأثیر آن در لایه بعدی تغییر دهید.

بنابراین خطا می تواند توسط محاسبه شود

مبلغ وزنی محصول
(وزنهای خروجی از خطای نورون * از نورون لایه بعدی مربوطه) * OFC اجازه می دهد تا مشتق را فراموش نکنید

بیایید نورون را با خروجی 0.65 (اولین نورون از بالا در لایه پنهان) بگیریم.

(مجبور شدم دقت را بالا ببرم ، زیرا خطای Deltas خیلی کوچک است)
= (0.37 * -0.040) + (0.13 * 0.146)
= -0.0148+ 0.01898
= 0.00418

برای به دست آوردن خطا برای این نورون
= مبلغ وزنی * مشتق (خروجی)
= 0.00418* [(0.65) * (1-0.65)]= 0.00095
= 0.001 پوند

بازگردانی کامل

شرح تصویر

مرحله 10000 شاید؟ : در آخر آخرین مرحله به روز کردن وزنها

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

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

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

بیایید نرخ یادگیری 0.1 را فرض کنیم.
reming_rate = 0.1

تنظیم وزن و تعصب

وزن = وزن – (خطا * redhem_rate * ورودی)
تعصب = تعصب – (خطا * یادگیری_RATE)

به روزرسانی وزن 1 و تعصب برای اولین نورون در لایه پنهان

شرح تصویر

وزن = 0.46 – (0.001 * 0.1 * 1)
وزن = 0.4599 = 0.46 ~

تعصب = 0.12 – (0.001 * 0.1)
تعصب = 0.1199 = 0.12 ~

(توجه: از آنجا که ما در حال دور کردن اعداد هستیم ، به نظر می رسد وزن به روز نمی شود ، اما هر تنظیم میکرو می تواند تغییر بزرگی در شبکه ایجاد کند)

وزن و تعصب به روز شده است.

شرح تصویر

اگرچه ما مقادیر را دور کرده بودیم و برخی از وزن ها و تعصبات تغییر کردند (به عنوان سبز مشخص شده اند).

فت !! ما بالاخره با یک پاس تمام شدیم

همین فرآیند بسته به تعداد دوره ها ، اندازه دسته ها و مجموعه داده های ورودی 100 ثانیه طول می کشد
اما برای ما خوش شانس است ، ما رایانه هایی داریم که این کار را برای ما انجام دهیم.

در اینجا اجرای من از یک شبکه عصبی از ابتدا است.
https://github.com/haydencordeiro/nnfromscratch
اگرچه ممکن است یک ماکت 100 ٪ نباشد ، اما به اندازه کافی خوب است.

در اینجا ویدئویی از آموزش این شبکه (همان مثال) آورده شده است
https://www.youtube.com/watch؟v=pkkake0_xca

اکنون به شما تبریک می گویم.

سلب مسئولیت:

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

در حالی که MSE از نظر ریاضی کار با آن آسان تر است و به توضیح فرایند backpropagation کمک می کند ، برای مشکلات طبقه بندی مانند Xor ایده آل نیست. در سناریوهای دنیای واقعی ، به ویژه برای طبقه بندی باینری ، از دست دادن متقابل آنتروپی به طور کلی ترجیح داده می شود زیرا در هنگام نزدیک شدن به خروجی ها به 0 یا 1 بهتر است.

نوشته های مشابه

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

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

دکمه بازگشت به بالا