ResNet

forkortelse for Residual Network

ResNet er et konvolutionelt neuralt netværk, der anvender residualforbindelser (springforbindelser) til at muliggøre træning af meget dybe netværk med hundredvis eller tusindvis af lag.

Kort fortalt

ResNet er et dybt neuralt netværk, der springer nogle lag over for at undgå forsvindende gradienter og dermed gør det muligt at træne ekstremt dybe modeller.

Kategori
arkitektur
Niveau
øvet
Udtale
/ˈrɛzˌnɛt/

Betydninger

2
  1. 1

    Den oprindelige ResNet-arkitektur introduceret af He et al. i 2015, som anvender residualblokke med springforbindelser for at løse problemet med forsvindende gradienter i meget dybe neurale netværk.

    • ResNet-50 er en variant af ResNet med 50 lag, der ofte bruges som rygrad i billedklassifikationsopgaver.He et al., 2015
    • Ved at indføre springforbindelser kunne ResNet træne netværk med op til 152 lag uden at lide under forsvindende gradienter.He et al., 2015
  2. 2

    En hvilken som helst neural netværksarkitektur, der anvender residualblokke eller springforbindelser, ofte i forbindelse med dybe convolutional neural networks.

    • Mange moderne arkitekturer som ResNeXt og Wide ResNet bygger videre på ResNet-princippet med residuale forbindelser.

Hvornår bruges det

ResNet bruges som rygrad i mange computer Vision-opgaver som billedklassifikation, objektdetektion og segmentering. Det er især kendt for at muliggøre træning af netværk med over 100 lag, hvilket før var svært på grund af forsvindende gradienter.

Kodeeksempel

import torch
import torch.nn as nn

class ResidualBlock(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1):
        super().__init__()
        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1)
        self.bn1 = nn.BatchNorm2d(out_channels)
        self.relu = nn.ReLU(inplace=True)
        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1)
        self.bn2 = nn.BatchNorm2d(out_channels)
        self.shortcut = nn.Sequential()
        if stride != 1 or in_channels != out_channels:
            self.shortcut = nn.Sequential(
                nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride),
                nn.BatchNorm2d(out_channels)
            )

    def forward(self, x):
        out = self.relu(self.bn1(self.conv1(x)))
        out = self.bn2(self.conv2(out))
        out += self.shortcut(x)
        out = self.relu(out)
        return out

En simpel residualblok i PyTorch. Springforbindelsen (shortcut) justeres med et 1x1 convolutionslag, hvis dimensionerne ændres.

Oprindelse

Navnet er en sammentrækning af 'Residual Network' (residualnetværk), der henviser til brugen af residualblokke med springforbindelser.

Afledte ord

7

Kilder

1