Backpropagation gennem tid

forkortelse for BPTT

Backpropagation gennem tid (BPTT) er en algoritme til at beregne gradienter i tilbagevendende neurale netværk ved at udrulle netværket over tid og anvende den almindelige backpropagation på det udrullede netværk.

Kort fortalt

En metode til at træne neurale netværk med hukommelse, hvor man 'folder' netværket ud over tid og derefter bruger almindelig backpropagation til at lære af tidligere input.

Kategori
teknik
Niveau
øvet

Betydninger

2
  1. 1

    Den standardmetode, hvor gradienten for en RNN beregnes ved at udrulle netværket over alle tidssteps i en sekvens og anvende backpropagation på det resulterende feedforward-netværk.

    • Under træning af en simpel RNN bruges backpropagation gennem tid til at opdatere vægtene baseret på fejlen i hvert tidsstep.
  2. 2

    En variant kaldet trunkeret backpropagation gennem tid (truncated BPTT), hvor gradienten kun beregnes over et fast antal tidssteps for at reducere beregningsomkostningerne.

    • Ved træning af lange sekvenser anvendes ofte trunkeret BPTT for at undgå høje hukommelseskrav.

Hvornår bruges det

BPTT anvendes primært under træning af RNN’er, LSTM’er og GRU’er, især i sekvensmodelleringsopgaver som sprogmodellering, maskinoversættelse og tidsserieanalyse. Algoritmen kræver, at man gemmer hele sekvensen af skjulte tilstande for at beregne gradienter, hvilket kan være hukommelseskrævende ved lange sekvenser.

Formel

For en RNN med parametre θ, tab L over T tidssteps, gradienten beregnes som: ∂L/∂θ = Σ_{t=1}^{T} ∂L_t/∂θ, hvor ∂L_t/∂θ beregnes ved at propagere fejl baglæns gennem de udrullede tidssteps.

Kodeeksempel

def bptt(rnn, sequence, targets, loss_fn):
    # Unroll network over time
    states = []
    h = torch.zeros(rnn.hidden_size)
    for x in sequence:
        h = rnn(x, h)
        states.append(h)
    # Compute loss and backpropagate
    loss = loss_fn(states[-1], targets)
    loss.backward()
    # Gradients are accumulated by PyTorch autograd

En forenklet implementering af BPTT i PyTorch, hvor netværket udrulles ved at gemme hver skjult tilstand og efterfølgende kalde .backward().

Oprindelse

Termen er en direkte oversættelse af engelsk 'Backpropagation Through Time'. Metoden blev først formaliseret af Rumelhart, Hinton og Williams i 1986.

Kilder

2
  • Learning Internal Representations by Error Propagation (Rumelhart et al., 1986)
  • Deep Learning (Goodfellow, Bengio, Courville, 2016)