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