Batch normalization

Batch normalization er en teknik, der normaliserer outputtet fra et lag i et neuralt netværk ved at trække batch-middelværdien og dividere med batch-standardafvigelsen for at reducere intern kovariateskift.

Kort fortalt

Det gør træning af neurale netværk hurtigere og mere stabil ved at holde input til hvert lag konsistent skaleret.

Kategori
teknik
Niveau
øvet
Udtale
bætʃ nɔːməlaɪˈzeɪʃən

Betydninger

1
  1. 1

    En normaliseringsteknik, der opererer på et mini-batch af data og standardiserer aktiveringerne, efterfulgt af en skalerings- og forskydningstransformation med læreparametre.

    • Ved at anvende batch normalization efter et konvolutionelt lag blev træningstiden reduceret med 40%.fiktivt eksempel
    • Batch normalization muliggjorde træning af et 50-lags netværk uden at lide under forsvindende gradienter.fiktivt eksempel

Hvornår bruges det

Batch normalization anvendes typisk efter konvolutionelle eller tætte lag i dybe netværk. Det tilføjes som et lag, der først normaliserer og derefter skalerer og forskubber med læreparametre. Det bruges ofte i arkitekturer som CNN'er og MLP'er for at tillade højere læringsrater og mindske afhængigheden af initialisering.

Formel

x_hat = (x - μ_B) / sqrt(σ_B^2 + ε); y = γ * x_hat + β

Kodeeksempel

import torch.nn as nn

class MyNetwork(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv = nn.Conv2d(3, 16, 3)
        self.bn = nn.BatchNorm2d(16)  # batch norm after conv
        self.relu = nn.ReLU()

    def forward(self, x):
        x = self.conv(x)
        x = self.bn(x)
        x = self.relu(x)
        return x

Et simpelt PyTorch-eksempel, hvor batch normalization anvendes efter et konvolutionelt lag.

Oprindelse

Begrebet blev introduceret af Sergey Ioffe og Christian Szegedy i 2015 i artiklen 'Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift'.

Kilder

1