پس انتشار (Backpropagation) در فریم ورک های یادگیری عمیق مانند TensorFlow،Torch،Theano و غیره با استفاده از گرافهای محاسباتی پیادهسازی میشود. بهطور قابل توجهی، درک پس انتشار در گراف های محاسباتی ترکیبی از چندین الگوریتم مختلف و تغییرات آنها مانند پس انتشار از طریق زمان (Backprop through time) و پس انتشار با وزنهای مشترک (Backprop with shared weights) است. وقتی همه چیز به گراف محاسباتی تبدیل شد، آنها همان الگوریتم هستند — فقط پس انتشار در گراف های محاسباتی.
گراف محاسباتی چیست؟
گراف محاسباتی بهعنوان یک گراف جهتدار تعریف میشود که گرهها به عملیات ریاضی مربوط میشوند. گرافهای محاسباتی روشی برای بیان و ارزیابی یک عبارت ریاضی هستند.
برای مثال، اینجا یک معادله ریاضی ساده داریم:
p = x + y
ما میتوانیم گراف محاسباتی این معادله را به شکل زیر رسم کنیم:
گراف محاسباتی فوق یک گره جمع (با علامت “+”) دارد که دو متغیر ورودی x و y و یک خروجی q دارد.
حالا یک مثال دیگر که کمی پیچیدهتر است:
g = (x + y) * z
معادله بالا با گراف محاسباتی زیر نمایش داده میشود:
پیشنهاد ویژه : آموزش طراحی سایت با پایتون
گراف های محاسباتی و پس انتشار
گراف های محاسباتی و پس انتشار هر دو مفاهیم اصلی و مهم در یادگیری عمیق برای آموزش شبکههای عصبی هستند.
مرحله پیشروی (Forward Pass)
مرحله پیشروی، فرایند ارزیابی مقدار عبارت ریاضی است که توسط گراف های محاسباتی نمایش داده میشود. انجام مرحله پیشروی به این معنی است که مقدارها از متغیرها به صورت مستقیم از چپ (ورودی) به راست که خروجی قرار دارد، منتقل میشود.
برای مثال، فرض کنید مقادیر زیر را به ورودیها اختصاص دادهایم:
x = 1, y = 3, z = 3
با اختصاص این مقادیر به ورودیها، میتوانیم مرحله پیشروی را انجام دهیم و مقادیر خروجیها را در هر گره به دست آوریم.
ابتدا از مقدار x = 1 و y = 3 استفاده میکنیم تا مقدار p = 4 به دست آید.
سپس از p = 4 و z = -3 استفاده میکنیم تا مقدار g = -12 به دست آید. ما از چپ به راست، به جلو حرکت میکنیم.
اهداف مرحله بازگشتی (Backward Pass)
در مرحله بازگشتی، هدف ما محاسبه گرادیانها برای هر ورودی نسبت به خروجی نهایی است. این گرادیانها برای آموزش شبکه عصبی با استفاده از روش نزول گرادیان (Gradient Descent) ضروری هستند.
برای مثال، ما میخواهیم گرادیانهای زیر را به دست آوریم:
گرادیانهای مورد نظر
مرحله بازگشتی (پس انتشار)
ما مرحله بازگشتی را با یافتن مشتق خروجی نهایی نسبت به خود خروجی نهایی شروع میکنیم. بنابراین، این نتیجه در مشتقگیری واحد خواهد بود و مقدار آن برابر با یک است.
گراف محاسباتی ما اکنون به شکل زیر است:
سپس، مرحله بازگشتی را از طریق عملیات ضرب (*) انجام خواهیم داد. در اینجا، ما گرادیانها را برای p و z محاسبه خواهیم کرد. از آنجایی که g = p*z، میدانیم که:
ما مقادیر z و p را از مرحله پیشروی میدانیم. بنابراین:
اکنون میخواهیم گرادیانها را برای x و y محاسبه کنیم:
با این حال، ما میخواهیم این کار را بهطور کارآمد انجام دهیم (اگرچه x و g فقط دو گام از هم فاصله دارند، فرض کنید که فاصله آنها بسیار زیاد است). برای محاسبه این مقادیر بهطور کارآمد، از قاعده زنجیرهای مشتقگیری استفاده خواهیم کرد. طبق قاعده زنجیرهای داریم:
اما ما از قبل میدانیم که dg/dp = -3، dp/dx، dp/dy ساده هستند چون p بهطور مستقیم به x و y وابسته است. بنابراین داریم:
در نتیجه:
همچنین برای ورودی y:
دلیل اصلی انجام این مرحله بازگشتی این است که زمانی که ما مجبور بودیم گرادیان x را محاسبه کنیم، فقط از مقادیر قبلاً محاسبه شده استفاده کردیم و از dq/dx (مشتق خروجی گره نسبت به ورودی همان گره) بهره بردیم. ما از اطلاعات محلی برای محاسبه یک مقدار جهانی استفاده کردیم.
مراحل آموزش یک شبکه عصبی
برای آموزش یک شبکه عصبی، مراحل زیر را دنبال کنید:
-
برای هر نقطه داده x در مجموعه داده، مرحله پیشروی را با x بهعنوان ورودی انجام دهید و هزینه c را بهعنوان خروجی محاسبه کنید.
-
مرحله بازگشتی را از c شروع کرده و گرادیانها را برای تمام گرهها در گراف محاسبه کنید. این شامل گرههایی است که وزنهای شبکه عصبی را نمایش میدهند.
-
سپس وزنها را با استفاده از فرمول W = W – learning rate * gradients بهروزرسانی کنید.
-
این فرایند را تکرار کنید تا زمانی که معیار توقف برآورده شود.
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۳ شهریور ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس