Lompat ke konten utama
←

Jaringan Saraf Tiruan Dasar dengan Python

Pelajaran 21 dari 22

CNN, RNN, dan embedding dengan numpy

RNN sederhana: status tersembunyi, unrolling, dan gradien yang lenyap

Setelah pelajaran ini kamu bisa menghitung satu langkah waktu RNN, menjalankan RNN sepanjang deret dengan perulangan, dan menjelaskan kenapa gradien lenyap di deret panjang.

±14 menitDiperiksa 28 Sep 2026

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

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Satu neuron RNN menerima x_t = 1 dengan status sebelumnya h_(t−1) = 0,5. Bobotnya w_x = 0,8, w_h = −0,4, dan bias 0,1. Berapa h_t = tanh(w_x·x_t + w_h·h_(t−1) + b)? Tulis dengan dua desimal.

Latihan 3 dari 3

Dalam sebuah RNN, gradien yang dirambatkan mundur dikalikan faktor sekitar 0,5 di setiap langkah waktu. Kata pertama sebuah kalimat berjarak 30 langkah dari keluaran. Apa akibatnya bagi pelatihan?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke