Materi
MLP memperlakukan setiap sampel secara terpisah, padahal banyak data berbentuk deret: kata dalam kalimat, bacaan sensor per jam. Jaringan saraf berulang (RNN) menyimpan status tersembunyi yang diperbarui di setiap langkah waktu. Dive into Deep Learning §9.4 menulis status baru dari masukan saat ini dan status sebelumnya: H_t = φ(X_t·W_xh + H_(t−1)·W_hh + b_h). Dengan tanh sebagai φ, untuk satu deret: h_t = tanh(x_t·W_xh + h_(t−1)·W_hh + b_h). Deep Learning bab 10.2 menulis persamaan yang sama dengan nama lain: a = b + W·h + U·x lalu h = tanh(a), dengan W untuk bobot berulang dan U untuk bobot masukan.
Unrolling berarti menjalankan langkah yang sama untuk t = 1, 2, …, T dalam satu perulangan, mulai dari h₀ yang umumnya berisi nol. d2l menekankan bahwa parameter yang sama dipakai di setiap langkah waktu, sehingga banyak parameternya tidak bertambah seiring panjang deret: W_xh berukuran (d, h), W_hh berukuran (h, h), dan b_h berisi h angka.
Masalahnya muncul saat pelatihan. Backpropagation through time mengalikan gradien dengan W_hhᵀ dan turunan tanh, yang paling besar 1, sekali untuk setiap langkah. d2l §9.7 menunjukkan bahwa gradiennya memuat pangkat besar W_hhᵀ: nilai eigen di bawah 1 membuatnya lenyap, di atas 1 membuatnya meledak. Deep Learning bab 10.7 mencatat bahwa gradien yang dirambatkan melewati banyak langkah umumnya lenyap dan kadang meledak, sehingga ketergantungan jangka panjang sulit dipelajari. Pemotongan BPTT, gradient clipping, serta arsitektur LSTM dan GRU dirancang untuk masalah ini; ketiganya di luar cakupan kelas ini.
import numpy as np
# RNN satu neuron: w_x 0.6, w_h 0.9, tanpa bias; hanya langkah pertama bermasukan
w_x, w_h = 0.6, 0.9
h = 0.0
for x in [1.0, 0.0, 0.0]:
h = np.tanh(w_x * x + w_h * h)
print(round(float(h), 3)) # 0.537, 0.449, 0.383