Backprop jaringan dua layer
Jaringan dengan satu hidden layer ReLU dan output skalar:
Z=XW1+b1,H=ReLU(Z),y^=HW2+b2,L=N1i∑(y^i−yi)2Kembalikan [dW1, db1, dW2, db2] untuk seluruh batch. Gunakan konvensi turunan ReLU di 0 adalah 0.
Backprop dalam bentuk matriks
Prinsipnya sama dengan satu neuron, hanya saja sekarang matriks. Dua aturan yang perlu dihafal:
- Jika Y=XW, maka ∂W∂L=X⊤∂Y∂L dan ∂X∂L=∂Y∂LW⊤.
- Bias di-broadcast ke setiap baris saat forward, jadi gradiennya dijumlahkan di sepanjang batch saat backward.
Kenapa transpose? Cukup cocokkan bentuknya. dW1 harus (d, h), sementara yang tersedia X: (N, d) dan dZ: (N, h). Satu-satunya perkalian yang menghasilkan (d, h) adalah X.T @ dZ.
Gerbang ReLU
dZ = dH * (Z > 0): neuron yang tidak aktif untuk satu contoh tidak meneruskan gradien dari contoh itu.
Soal berikutnya (gradient check) memberimu cara memverifikasi gradien seperti ini tanpa harus memercayai rumusmu sendiri.
Penjelasan
Yang diminta. Gradien keempat parameter jaringan X → Linear → ReLU → Linear → MSE untuk seluruh batch.
Forward (simpan semua nilai antara): Z = X @ W1 + b1 → H = max(Z, 0) → out = H @ W2 + b2 → L = mean((out - y)²). Z dan H disimpan karena backward membutuhkannya.
Backward, layer demi layer dari belakang:
- Loss → out.
dout = 2 * (out - y) / Nberbentuk(N,)(soal “MSE dan gradiennya”). - Layer 2.
out = H @ W2 + b2:dW2 = H.T @ dout:(h, N) @ (N,) → (h,). Setiap bobot menerima aktivasi yang dikalikannya, dikali gradien yang datang.db2 = dout.sum(): bias ditambahkan ke setiap contoh, jadi gradiennya dijumlah di sepanjang batch.dH = np.outer(dout, W2):(N, h). Gradien mengalir kembali keHlewat bobot yang sama.
- ReLU.
dZ = dH * (Z > 0): hanya neuron yang aktif meneruskan gradien. - Layer 1.
dW1 = X.T @ dZberbentuk(d, h), dandb1 = dZ.sum(axis=0)berbentuk(h,).
Trik mengingat transpose. Jangan menghafal, cocokkan bentuk. dW1 harus (d, h), dan yang tersedia hanya X: (N, d) dan dZ: (N, h). Satu-satunya perkalian yang menghasilkan (d, h) adalah X.T @ dZ.
Yang dikembalikan: [dW1 (d,h), db1 (h,), dW2 (h,), db2 float]. Setiap gradien berbentuk sama dengan parameternya.
Case “sempurna”. Pada case dengan out == y, dout = 0, sehingga semua gradien 0: tidak ada yang perlu diperbaiki. Pada case dengan Z < 0 di semua neuron, hanya db2 yang bukan nol karena semua ReLU mati.
Topik
Petunjuk 1
Simpan nilai antara saat forward (Z, H, out) karena backward membutuhkannya.
Petunjuk 2
Mundur satu layer per langkah: dout = 2(out − y)/N → dW2 = Hᵀ dout, dH = dout ⊗ W2 → dZ = dH · [Z > 0] → dW1 = Xᵀ dZ.
Petunjuk 3
Cek bentuk: setiap gradien harus berbentuk sama dengan parameternya.
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.