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
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 xEt 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'.