udfoldet RNN

En teknik hvor en tilbagevendende neuralt netværk (RNN) rulles ud over tidstrin, så det cykliske graf bliver til et feedforward-netværk, hvilket muliggør backpropagation gennem tiden (BPTT).

Kort fortalt

Du folder RNN'ens cykliske struktur ud, så den bliver til et feedforward-netværk med gentagne lag, så du kan træne det med almindelig backpropagation.

Kategori
teknik
Niveau
øvet

Betydninger

1
  1. 1

    Metode til at repræsentere et RNN som et feedforward-netværk ved at kopiere netværket for hvert tidstrin i en sekvens, så backpropagation kan anvendes direkte.

    • Ved at bruge en udfoldet RNN kan vi træne netværket på sætninger af varierende længde ved at begrænse udfoldningen til maksimalt 10 tidstrin.Lærebog i deep learning, 2023
    • Udfoldet RNN er essentiel for at anvende gradient descent på sekvensmodeller, da den gør cykliske afhængigheder lineære.

Hvornår bruges det

Bruges under træning af RNN'er på sekvensdata, hvor gradienterne skal flyde korrekt gennem tid. Udfoldningen kan foretages manuelt eller automatisk af deep learning-biblioteker som PyTorch eller TensorFlow, der håndterer BPTT implicit.

Kodeeksempel

def unrolled_rnn(x_t, h_prev, W_xh, W_hh, W_hy, b_h, b_y):
    # x_t: input at time t, shape (batch, input_dim)
    # h_prev: previous hidden state, shape (batch, hidden_dim)
    h_t = np.tanh(np.dot(x_t, W_xh) + np.dot(h_prev, W_hh) + b_h)
    y_t = np.dot(h_t, W_hy) + b_y
    return h_t, y_t

# Unrolling for T steps
h = np.zeros((batch_size, hidden_dim))
for t in range(T):
    x = data[:, t, :]
    h, y = unrolled_rnn(x, h, W_xh, W_hh, W_hy, b_h, b_y)
    outputs.append(y)

Simpel implementering af en udfoldet RNN: for hvert tidstrin beregnes skjult tilstand og output, og gradienter kan backpropageres gennem løkken.

Oprindelse

Udtrykket kommer af 'udfolde' (svarende til engelsk 'unfold'), da netværkets tidsmæssige afhængigheder foldes ud i et feedforward-lignende netværk.

Kilder

2