شبکه عصبی باقی‌مانده

بندانگشتی|نمودار تابع هزینه برای زمان تمرین (training) و زمان تست (test)  یک شبکه عصبی مستقیم (بدون لایه پرشی) که نشان‌دهنه این است که هرچه تعداد لایه‌ها افزایش پیدا می‌کند، خطای مدل نیز افزایش پیدا خواهد کرد.
بندانگشتی|218x218پیکسل|در این شکل، یک بلاک از شبکه عصبی باقی‌مانده نشان داده شده است که در آن نیز از تابع فعال ساز یکسو کننده استفاده شده است.
**شبکه عصبی پس‌مانده (ResNet)** یک نوع شبکه عصبی مصنوعی می‌باشد. این شبکه در واقع یک نوع دروازه باز یا بدون دروازه شبکه بزرگراه, که اولین شبکه بسیار عمیق پیشخور با هزاران لایه و بسیار عمیق‌تر از شبکه‌های قبلی است. در این نوع از شبکه عصبی معمولا از لایه های پرشی و میانبر بین لایه‌ها استفاده می‌شود که در پیاده‌سازی، هر لایه پرشی معمولا از دو یا سه لایه به همراه توابع غیرخطی مانند یکسوساز و نرمال کننده دسته‌ای استفاده می‌شود. مدل‌هایی که دارای چندین لایه پرشی موازی هستند، *شبکه‌های متراکم* نام دارند. در زمینه شبکه‌های عصبی باقی‌مانده، معمولا شبکه‌هایی که لایه پرشی ندارند، *شبکه ساده* توصیف می‌شوند.  

همانند حالت شبکه‌های عصبی بازگشتی با حافظه طولانی کوتاه-مدت، دو دلیل اصلی برای اضافه کردن لایه‌‌های پرشی وجود دارد: برای جلوگیری از مشکل ناپدید شدن گرادیان‌ها، بنابراین منجر به بهینه‌سازی شبکه‌های عصبی آسان‌تر می‌شود، جایی که مکانیسم‌های دروازه‌ای جریان اطلاعات را در بسیاری از لایه‌ها تسهیل می‌کنند ("بزرگراه‌های اطلاعات")، یا برای کاهش مشکل تخریب (اشباع دقت). که در آن افزودن لایه های بیشتر به یک مدل عمیق مناسب منجر به خطای آموزشی بالاتر می شود. در طول تمرین (training) شبکه، وزن‌ها برای خنثی کردن لایه بالادستی و تقویت لایه‌ای که قبلاً حذف شده بود، سازگار می‌شوند. در ساده‌ترین حالت، فقط وزن‌های اتصال لایه مجاور تطبیق داده می‌شوند، بدون وزن صریح برای لایه بالادست. زمانی که یک لایه غیرخطی منفرد از آن عبور می‌کند، یا زمانی که لایه‌های میانی همگی خطی هستند، بهترین کار را انجام می‌دهد. اگر نه، پس باید یک ماتریس وزن صریح برای اتصال پرشی آموخته شود (یک شبکه بزرگراه باید استفاده شود).  

پرش به طور مؤثر شبکه را ساده می کند و از لایه های کمتری در مراحل اولیه آموزش استفاده می کند. این امر با کاهش تأثیر گرادیان های در حال از بین رفتن سرعت یادگیری را افزایش می دهد، زیرا لایه های کمتری برای انتشار وجود دارد. سپس شبکه با یادگیری فضای ویژگی، به تدریج لایه های پرش شده را بازیابی می کند. در پایان آموزش، وقتی همه لایه‌ها گسترش می‌یابند، به منیفولد نزدیک‌تر می‌ماند [روشن‌سازی لازم] و بنابراین سریع‌تر یاد می‌گیرد. یک شبکه عصبی بدون قطعات باقیمانده بیشتر فضای ویژگی را بررسی می کند. این باعث آسیب پذیری بیشتر آن در برابر اختلالاتی می شود که باعث خروج آن از منیفولد می شود و نیاز به داده های آموزشی اضافی برای بازیابی دارد.  

یک شبکه عصبی باقیمانده برای برنده شدن در رقابت ImageNet 2015 استفاده شد و به پر استنادترین شبکه عصبی قرن بیست و یکم تبدیل شد.  

## انتشار به سمت جلو در شبکه
اگر ماتریس وزن W^{l-1, l} برای اتصال از لایه l-1 ام به لایه l ام و ماتریس W^{l-2, l} برای اتصال از لایه l-2 ام به لایه  l ام درنظر بگیریم، در این صورت حاصل انتشار رو به جلو از میان تابع فعال‌ساز برابر خواهد بود با:

\begin{align} a^\ell & := \mathbf{g}(W^{\ell-1,\ell} \cdot a^{\ell-1} + b^\ell + W^{\ell-2,\ell} \cdot a^{\ell-2}) \\
& := \mathbf{g}(Z^\ell + W^{\ell-2,\ell} \cdot a^{\ell-2})
\end{align}

که
: a^l خروجی نورون‌های در لایه l ام،
: g تابه فعال‌ساز برای لایه l ام،
: W^{l-1, l} وزن برای اتصال بین لایه‌های l-1 ام و l ام
: و Z^\ell = W^{\ell-1,\ell} \cdot a^{\ell-1} + b^\ell خروجی لایه  l ام هستند.
: اگر تعداد نورون‌های لایه l-2 ام با تعداد نورون‌های لایه l ام باشد و W^{l-2, l} ماتریس همانی باشد، در این صورت حاصل انتشار رو به جلو می‌تواند به صورت a^\ell := \mathbf{g}(Z^\ell + a^{\ell-2}) ساده شود. در این حالت به اتصال بین لایه l-2 ام و لایه l ام *بلوک همانی* گفته می‌شود.
: در قشر مغز چنین پرش های رو به جلو برای چندین لایه انجام می شود. معمولاً همه پرش های به جلو از یک لایه شروع می شوند و به طور متوالی به لایه های بعدی متصل می شوند. در حالت کلی این به صورت (معروف به DenseNets) بیان می شود.

: a^\ell := \mathbf{g} \left( Z^\ell + \sum_{k=2}^K W^{\ell-k,\ell} \cdot a^{\ell-k} \right) 

## انتشار به سمت عقب
در هنگام یادگیری به سمت عقب برای یک مسیر ساده داریم:

 \Delta w^{\ell-1,\ell} := -\eta \frac{\partial E^\ell}{\partial w^{\ell-1,\ell}} = -\eta a^{\ell-1} \cdot \delta^\ell

و برای یک مسیر پرشی داریم:

 \Delta w^{\ell-2,\ell} := -\eta \frac{\partial E^\ell}{\partial w^{\ell-2,\ell}} = -\eta a^{\ell-2} \cdot \delta^\ell

که در هردو حالت:

:\eta نرخ یادگیری است (0\eta)،
:\delta^\ell سیگنال خطا (مشتق تابع هزینه نسبت به مقدار عدد ورودی به نورون) برای نورون‌های لایه l ام،
:a^\ell بردار خروجی نورون‌ها برای لایه  l ام  هستند.
:اگر مسیر پرش وزن‌های ثابتی داشته باشد (مثلاً ماتریس همانی، مانند بالا)، آنها به‌روزرسانی نمی‌شوند. در حالت کلی می‌تواند K ماتریس وزن برای لایه‌های پرشی وجود داشته باشد که:
: \Delta w^{\ell-k,\ell} := -\eta \frac{\partial E^\ell}{\partial w^{\ell-k,\ell}} = -\eta a^{\ell-k} \cdot \delta^\ell
:از آنجایی که قوانین یادگیری مشابه هستند، ماتریس های وزن را می توان با هم ادغام کرد و در همان مرحله یاد گرفت.

## انواع معماری شبکه عصبی باقی‌مانده
[وسط|بندانگشتی|656x656پیکسل|در این شکل انواع معماری شبکه ResNet که برای طبقه‌بندی داده‌های موجود در مجموعه دادگان [ایمیج‌نت|ImageNet. استفاده شده است. شماره برای نام‌گذاری هر معماری، نشان‌دهنده تعداد لایه و عمق آن شبکه است. به عنوان مثال، ResNet18 دارای 18 لایه است.]]برای شبکه عصبی باقی‌مانده، معماری‌های با تعداد‌ لایه ‌های مختلف وجود دارد که برای زمانی که نیاز داریم تا مدل پیچیدگی بیشتری داشته باشد و بتواند الگوهای سخت‌تری را یاد بگیرد، می‌توانیم از شبکه‌های با عمق بیشتر استفاده کنیم (اما همچنان در این مدل‌ها نیز با افزایش تعداد لایه‌ها و پارامتر‌ها، خطر مشکل ناپدید شدن گرادیان‌ها و بیش برازش وجود دارد).

## پیاده‌سازی‌های موجود
در کتابخانه PyTorch، مدل‌های 18 لایه، 34 لایه، 52 لایه 101 و 152 لایه پیاده‌سازی شده‌اند که میتوان از آنها به صورت آماده استفاده کرد و همچنین در کتابخانه TensorFlow نیز معماری‌های 52 لایه، 101 لایه و 152 لایه موجود هستند.

## منابع

رده:آمار محاسباتی
رده:شبکه‌های عصبی مصنوعی
رده:علوم محاسباتی اعصاب
رده:یادگیری عمیق
رده:معماری شبکه‌های عصبی