Sobes.tech
Middle

Cos'è un blocco residuo?

sobes.tech AI

Risposta dell'AI

Il blocco residuo è un elemento architettonico delle reti neurali, introdotto in ResNet, che aiuta a combattere il problema del gradiente che scompare durante l'addestramento di reti molto profonde.

L'idea del blocco residuo è che, invece di imparare una mappatura ( H(x) ) diretta, il blocco impara una correzione ( F(x) = H(x) - x ), cioè il residuo. Alla fine, l'output del blocco viene calcolato come:

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

dove:

  • ( x ) è l'input del blocco,
  • ( F(x) ) è il risultato di diversi strati (ad esempio, convoluzione, attivazioni).

Questo permette al gradiente di passare più facilmente attraverso gli strati, migliorando l'addestramento di modelli profondi.

Esempio di un semplice blocco residuo (pseudo-codice):

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  # aggiungiamo l'ingresso (connessione di salto)
        out = self.relu(out)
        return out

In questo modo, i blocchi residui consentono di costruire reti molto profonde senza deteriorare la qualità dell'addestramento.