پس‌انتشار

از testwiki
نسخهٔ تاریخ ۲۹ نوامبر ۲۰۲۳، ساعت ۱۲:۰۶ توسط imported>Mohammad nazem (growthexperiments-addlink-summary-summary:2|0|0)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

پس‌انتشار[۱] (الگو:Lang-en) یا انتشار معکوس، روشی در یادگیری عمیق برای آموزش شبکه‌های عصبی پیشخور است (روش‌های مشابهی برای آموزش سایر شبکه‌های عصبی مصنوعی به وجود آمده‌است). در این روش با استفاده از قاعده زنجیره‌ای، گرادیان تابع هزینه برای تک‌تک وزن‌ها محاسبه می‌شود. برای این کار برای محاسبه گرادیان هر لایه نسبت به تابع هزینه، از مشتق جزئی تابع هزینه نسبت به لایه بعدی استفاده می‌شود. در واقع از آخرین لایه (نزدیک‌ترین لایه به خروجی) محاسبه مشتق‌ها شروع می‌شود و تا ابتدای شبکه (نزدیک‌ترین لایه به ورودی‌ها) ادامه پیدا می‌کند.

روش معمول محاسبه گرادیان (محاسبه اثر هر وزن در خروجی هر نمونه) برای شبکه‌های عصبی پیشخور و به خصوص شبکه‌های عمیق بسیار زمان‌بر و در عمل غیرممکن است. با استفاده از روش پس‌انتشار و با کمک قاعده زنجیره‌ای و مشتق جزئی، در محاسبه گرادیان هر لایه از مشتقات لایه‌های جلوتر استفاده می‌شود و زمان اجرا تا حد زیادی کاهش پیدا می‌کند.[۲] استفاده از روش پس‌انتشار در کنار روش گرادیان کاهشی تصادفی، امکان اضافه کردن لایه‌های بیش‌تر به مدل به دلیل صرفه‌جویی زمانی به وجود می‌آید. این افزایش تعداد لایه‌ها از سوی دیگر باعث امکان یادگیری الگوهای پیچیده‌تر می‌شود.

ساختار ریاضی الگوریتم

محاسبه گرادیان تابع هزینه برای سلول c

برای سلول عصبی c ورودیی که از سلول عصبی p به این سلول وارد می‌شود را با bpc نشان می‌دهیم. وزن این ورودی wpc است و مجموع ضرب ورودی‌ها با وزنهایشان را با ac نمایش می‌دهیم، یعنی ac=wpc×bpc. حال باید بر روی ac یک تابع غیر خطی اعمال کنیم، این تابع را θc می‌نامیم و خروجی آن را با bc نمایش می‌دهیم به این معنی که bc=θc(ac). به همین شکل خروجی‌هایی که از سلول عصبی c خارج شده و به سلول n وارد می‌شوند را با bcn نمایش می‌دهیم و وزن آن را با wcn . اگر تمام وزنهای این شبکه عصبی را در مجموعه‌ای به اسم W بگنجانیم، هدف در واقع یادگیری این وزنهاست.[۳] اگر ورودی ما x باشد و خروجی y و خروجی شبکه عصبی ما hW(x)، هدف ما پیدا کردن W است به قسمی که برای همه داده‌ها y و hW(x) به هم خیلی نزدیک شوند. به عبارت دیگر هدف کوچک کردن یک تابع ضرر بر روی تمام داده هاست، اگر داده‌ها را با (x1,y1),,(xn,yn) و تابع ضرر را با l نشان دهیم هدف کمینه کردن تابع پایین بر حسب W است:[۴] الگو:وسط‌چین Q(W)=i=1nl(hW(xi),yi) الگو:پایان وسط‌چین به عنوان مثال اگر مسئله رگرسیون است برای l می‌توانیم خطای مربعات را در نظر بگیریم و اگر مسئله دسته‌بندی است برای l می‌شود منفی لگاریتم بازنمایی را استفاده کرد.

برای به‌دست آوردن کمینه Q(W) می‌توان از روش گرادیان کاهشی استفاده کرد، به این معنی که گرادیان تابع را در حساب کرد و کمی در خلاف جهت آن حرکت کرد و این کار را آنقدر ادامه داد تا تابع ضرر خیلی کوچک شود. روش بازگشت به عقب در واقع روشی برای پیدا کردن گرادیان تابع است.

حال فرض کنیم می‌خواهیم گرادیان تابع Q(W) را نسبت به وزن wpc به‌دست بیاوریم. برای این کار نیاز به قاعده زنجیری در مشتق‌گیری داریم. قاعده زنجیری به این شکل کار می‌کند: اگر تابعی داشته باشیم به اسم f که وابسته به سه ورودی u، v و w باشد و هرکدام از این سه ورودی به نوبه خود وابسته به t باشند، مشتق f به t به این شکل محاسبه می‌شود: الگو:وسط‌چین f(u(t),v(t),w(t))t=fuut+fvvt+fwwt الگو:پایان وسط‌چین با استفاده از این قاعده زنجیری روش بازگشت به عقب را به این شکل دنبال می‌کنیم: الگو:وسط‌چین δc=Qac الگو:پایان وسط‌چین الگو:وسط‌چین ac=pwpc×bpc الگو:پایان وسط‌چین الگو:وسط‌چین bc=θc(ac) الگو:پایان وسط‌چین الگو:وسط‌چین δc=Qac=Qbcbcac=Qbc×θ´c(ac)=(nQananbc)×θ´c(ac)=(nwcnδn)×θ´c(ac) الگو:پایان وسط‌چین الگو:وسط‌چین Qwpc=Qacacwpc=δcbp الگو:پایان وسط‌چین همان‌طور که در خط پیشین دیدیم برای به‌دست آوردن گرادیان نسبت به wpc به دو مقدار نیاز داریم ورودی به سلول عصبی c از سلول عصبی p که همان bp است و راحت به‌دست می‌آید و δc که از روش بازگشتی به‌دست می‌آید و بستگی به آن δ‌هایی لابه بعد دارد که سلول cبه آن‌ها وصل است، به‌طور دقیقتر δc=(nwcnδn)×θ´c(ac).

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

شهود

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

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

[نمایشی از یک نورون در شبکه عصبی مصنوعی]
نمایشی از یک نورون در شبکه عصبی مصنوعی

به کمک قاعده زنجیره‌ای می‌توانیم مشتق تابع هزینه را نسبت به هر یک از وزن‌های شبکه عصبی (wij) به‌دست بیاوریم:الگو:NumBlkحال سعی می‌کنیم آخرین کسر سمت راست را ساده کنیم (در netj فقط همان ترکیب خطی خروجی نورون فعلی به wij وابسته است) :الگو:NumBlkمی‌دانیم مشتق خروجی نورون j نسبت به ورودی‌های آن همان مشتق جزئی نسبت به تابع فعال‌سازی است. در واقع دلیل اصلی این‌که تابع فعال‌سازی باید مشتق‌پذیر باشد، محاسبه همین مشتق است:الگو:NumBlkبرای مثال در حالتی که تابع فعال سازی، تابع لجستیک باشد:

ojnetj=netjφ(netj)=φ(netj)(1φ(netj))=oj(1oj)

حال طبق معادله ۱ یکی یکی بخش‌های مختلف را محاسبه می‌کنیم. کسر اول (مانند آنچه در زیر آمده‌است) با مشخص بودن خروجی و تابع هزینه به راحتی قابل محاسبه است.الگو:NumBlkبرای مثال اگر تابع هزینه همان مربعات خطاها باشد،

Eoj=Ey=y12(ty)2=yt

با فرض اینکه E تابعی از همه نورون‌هایی است که از نورون j ام به آن‌ها یال دارد (L={u,v,,w}):

E(oj)oj=E(netu,netv,,netw)oj

حال با گرفتن مشتق نسبت به oj فرم بازگشتی زیر به‌دست می‌آید که همان شکل کلی پس‌انتشار است.الگو:NumBlk با استفاده از معادله ۱ تا ۵ و حذف بخش‌های مشترک، می‌توانیم مشتق E را نسبت به وزن دلخواه wij محاسبه کنیم.

Ewij=Eojojnetjnetjwij=Eojojnetjoi
Ewij=oiδj

که در آن تابع دلتا به صورت زیر است:

δj=Eojojnetj={L(oj,t)ojdφ(netj)dnetjif j is an output neuron,(Lwjδ)dφ(netj)dnetjif j is an inner neuron.

برای مثال اگر φ تابع لجستیک باشد:

δj=Eojojnetj={(ojtj)oj(1oj)if j is an output neuron,(Lwjδ)oj(1oj)if j is an inner neuron. در نهایت فرم تغییرات وزن به صورت زیر است:

Δwij=ηEwij=ηoiδj

جستارهای وابسته

منابع

الگو:پانویس