پس‌انتشار کیست؟ توضیح بده.
پس‌انتشار () یا انتشار معکوس، روشی در یادگیری عمیق برای آموزش شبکه‌های عصبی پیشخور است (روش‌های مشابهی برای آموزش سایر شبکه‌های عصبی مصنوعی به وجود آمده‌است). در این روش با استفاده از قاعده زنجیره‌ای، گرادیان تابع هزینه برای تک‌تک وزن‌ها محاسبه می‌شود. برای این کار برای محاسبه گرادیان هر لایه نسبت به تابع هزینه، از مشتق جزئی تابع هزینه نسبت به لایه بعدی استفاده می‌شود. در واقع از آخرین لایه (نزدیک‌ترین لایه به خروجی) محاسبه مشتق‌ها شروع می‌شود و تا ابتدای شبکه (نزدیک‌ترین لایه به ورودی‌ها) ادامه پیدا می‌کند.روش معمول محاسبه گرادیان (محاسبه اثر هر وزن در خروجی هر نمونه) برای شبکه‌های عصبی پیشخور و به خصوص شبکه‌های عمیق بسیار زمان‌بر و در عمل غیرممکن است. با استفاده از روش پس‌انتشار و با کمک قاعده زنجیره‌ای و مشتق جزئی، در محاسبه گرادیان هر لایه از مشتقات لایه‌های جلوتر استفاده می‌شود و زمان اجرا تا حد زیادی کاهش پیدا می‌کند. استفاده از روش پس‌انتشار در کنار روش گرادیان کاهشی تصادفی، امکان اضافه کردن لایه‌های بیش‌تر به مدل به دلیل صرفه‌جویی زمانی به وجود می‌آید. این افزایش تعداد لایه‌ها از سوی دیگر باعث امکان یادگیری الگوهای پیچیده‌تر می‌شود.ساختار ریاضی الگوریتم.برای سلول عصبی formula_1 ورودیی که از سلول عصبی formula_2 به این سلول وارد می‌شود را با formula_3 نشان می‌دهیم. وزن این ورودی formula_4 است و مجموع ضرب ورودی‌ها با وزنهایشان را با formula_5 نمایش می‌دهیم، یعنی formula_6. حال باید بر روی formula_5 یک تابع غیر خطی اعمال کنیم، این تابع را formula_8 می‌نامیم و خروجی آن را با formula_9 نمایش می‌دهیم به این معنی که formula_10. به همین شکل خروجی‌هایی که از سلول عصبی formula_1 خارج شده و به سلول formula_12 وارد می‌شوند را با formula_13 نمایش می‌دهیم و وزن آن را با formula_14 . اگر تمام وزنهای این شبکه عصبی را در مجموعه‌ای به اسم formula_15 بگنجانیم، هدف در واقع یادگیری این وزنهاست. اگر ورودی ما formula_16 باشد و خروجی formula_17 و خروجی شبکه عصبی ما formula_18، هدف ما پیدا کردن formula_15 است به قسمی که برای همه داده‌ها formula_17 و formula_18 به هم خیلی نزدیک شوند. به عبارت دیگر هدف کوچک کردن یک تابع ضرر بر روی تمام داده هاست، اگر داده‌ها را با formula_22 و تابع ضرر را با formula_23 نشان دهیم هدف کمینه کردن تابع پایین بر حسب formula_15 است:formula_25به عنوان مثال اگر مسئله رگرسیون است برای formula_23 می‌توانیم خطای مربعات را در نظر بگیریم و اگر مسئله دسته‌بندی است برای formula_23 می‌شود منفی لگاریتم بازنمایی را استفاده کرد.برای به‌دست آوردن کمینه formula_28 می‌توان از روش گرادیان کاهشی استفاده کرد، به این معنی که گرادیان تابع را در حساب کرد و کمی در خلاف جهت آن حرکت کرد و این کار را آنقدر ادامه داد تا تابع ضرر خیلی کوچک شود. روش بازگشت به عقب در واقع روشی برای پیدا کردن گرادیان تابع است.حال فرض کنیم می‌خواهیم گرادیان تابع formula_28 را نسبت به وزن formula_4 به‌دست بیاوریم. برای این کار نیاز به قاعده زنجیری در مشتق‌گیری داریم. قاعده زنجیری به این شکل کار می‌کند: اگر تابعی داشته باشیم به اسم formula_31 که وابسته به سه ورودی formula_32، formula_33 و formula_34 باشد و هرکدام از این سه ورودی به نوبه خود وابسته به formula_35 باشند، مشتق formula_31 به formula_35 به این شکل محاسبه می‌شود:formula_38با استفاده از این قاعده زنجیری روش بازگشت به عقب را به این شکل دنبال می‌کنیم:formula_39formula_40formula_41formula_42formula_43همان‌طور که در خط پیشین دیدیم برای به‌دست آوردن گرادیان نسبت به formula_44 به دو مقدار نیاز داریم ورودی به سلول عصبی formula_45 از سلول عصبی formula_46 که همان formula_47 است و راحت به‌دست می‌آید و formula_48 که از روش بازگشتی به‌دست می‌آید و بستگی به آن formula_49‌هایی لابه بعد دارد که سلول formula_45به آن‌ها وصل است، به‌طور دقیقتر formula_51.روش بازگشتی برای به‌دست آوردن formula_49‌ها به این شکل کار می‌کند که ابتدا formula_49 را برای سلول‌های لایه خروجی حساب می‌کنیم، و بعد لایه‌ها را به نوبت پایین می‌روم و برای هر سلول formula_49 آن را با ترکیت formula_49‌های لایه‌های بالایی آن طبق فرمول حساب می‌کنیم. محاسبه کردن formula_49 برای لایه خروجی آسان است و مستقیماً با مشتق گرفتن از formula_57 به‌دست می‌آید.شهود.می‌دانیم هدف هر یادگیری با نظارت پیدا کردن تابعی است که از ورودی‌های مشاهده شده به خروجی‌های واقعی برسد. استفاده از ایده کاهش گرادیان در شبکه‌های عصبی منجر به تلاش برای پیدا کردن پارامترها در لایه‌های پنهان مدل به کمک پس‌انتشار می‌شود.پیدا کردن مشتق وزن‌ها نسبت به تابع هزینه.= \frac{\partial E}{\partial o_j} \frac{\partial o_j}{\partial\text{net}_j} \frac{\partial \text{net}_j}{\partial w_{ij}}&lt;/math&gt;|}}حال سعی می‌کنیم آخرین کسر سمت راست را ساده کنیم (در formula_59 فقط همان ترکیب خطی خروجی نورون فعلی به formula_58 وابسته است) : = \frac{\partial}{\partial w_{ij}} \left(\sum_{k=1}^n w_{kj} o_k\right) = \frac{\partial}{\partial w_{ij}} w_{ij} o_i= o_i.&lt;/math&gt;|}}می‌دانیم مشتق خروجی نورون formula_61 نسبت به ورودی‌های آن همان مشتق جزئی نسبت به تابع فعال‌سازی است. در واقع دلیل اصلی این‌که تابع فعال‌سازی باید مشتق‌پذیر باشد، محاسبه همین مشتق است:برای مثال در حالتی که تابع فعال سازی، تابع لجستیک باشد:formula_62حال طبق معادله ۱ یکی یکی بخش‌های مختلف را محاسبه می‌کنیم. کسر اول (مانند آنچه در زیر آمده‌است) با مشخص بودن خروجی و تابع هزینه به راحتی قابل محاسبه است.برای مثال اگر تابع هزینه همان مربعات خطاها باشد،formula_63با فرض اینکه formula_64 تابعی از همه نورون‌هایی است که از نورون formula_61 ام به آن‌ها یال دارد (formula_66):formula_67حال با گرفتن مشتق نسبت به formula_68 فرم بازگشتی زیر به‌دست می‌آید که همان شکل کلی پس‌انتشار است.با استفاده از معادله ۱ تا ۵ و حذف بخش‌های مشترک، می‌توانیم مشتق formula_64 را نسبت به وزن دلخواه formula_58 محاسبه کنیم.که در آن تابع دلتا به صورت زیر است:formula_73برای مثال اگر formula_74 تابع لجستیک باشد:formula_75 در نهایت فرم تغییرات وزن به صورت زیر است:formula_76