Sobes.tech
Middle

Kas ir reziduālais bloks?

sobes.tech AI

Atbilde no AI

Rezidējo bloks ir neironu tīklu arhitektūras elements, kas ieviests ResNet, un palīdz cīnīties ar gradientu zudīšanas problēmu ļoti dziļās tīklos apmācības laikā.

Rezidējo bloka ideja ir tāda, ka vietā, lai mācītos tiešu ( H(x) ) karti, bloks mācās labojumu ( F(x) = H(x) - x ), tas ir, rezidūlu. Galu galā, bloka izeja tiek aprēķināta kā:

[ \text{izeja} = F(x) + x ]

kur:

  • ( x ) ir ievads blokam,
  • ( F(x) ) ir rezultāts no vairākiem slāņiem (piemēram, konvolūcija, aktivācijas).

Tas ļauj gradientam vieglāk plūst caur slāņiem, uzlabojot dziļo modeļu apmācību.

Vienkāršs rezidūla bloka piemērs (pseudo-kods):

import torch
import torch.nn as nn

class ResidualBlock(nn.Module):
    def __init__(self, channels):
        super().__init__()
        self.conv1 = nn.Conv2d(channels, channels, kernel_size=3, padding=1)
        self.bn1 = nn.BatchNorm2d(channels)
        self.relu = nn.ReLU()
        self.conv2 = nn.Conv2d(channels, channels, kernel_size=3, padding=1)
        self.bn2 = nn.BatchNorm2d(channels)

    def forward(self, x):
        residual = x
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)
        out += residual  # pievienojam ievadu (izlaišanas saiti)
        out = self.relu(out)
        return out

Šādi rezidūla bloki ļauj būvēt ļoti dziļas neironu tīklus bez apmācības kvalitātes pasliktināšanās.