b belajar.myudak

Backprop jaringan dua layer

Jaringan dengan satu hidden layer ReLU dan output skalar:

Z=XW1+b1,H=ReLU(Z),y^=HW2+b2,L=1N∑i(y^i−yi)2Z = XW_1 + b_1,\quad H = \text{ReLU}(Z),\quad \hat{y} = HW_2 + b_2,\quad L = \frac{1}{N}\sum_i(\hat{y}_i - y_i)^2

Kembalikan [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=XWY = XW, maka ∂L∂W=X⊤∂L∂Y\dfrac{\partial L}{\partial W} = X^\top \dfrac{\partial L}{\partial Y} dan ∂L∂X=∂L∂YW⊤\dfrac{\partial L}{\partial X} = \dfrac{\partial L}{\partial Y} W^\top.
  • 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:

  1. Loss → out. dout = 2 * (out - y) / N berbentuk (N,) (soal “MSE dan gradiennya”).
  2. 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 ke H lewat bobot yang sama.
  3. ReLU. dZ = dH * (Z > 0): hanya neuron yang aktif meneruskan gradien.
  4. Layer 1. dW1 = X.T @ dZ berbentuk (d, h), dan db1 = 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
backpropmlpmatriks
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.

Python 3.14 · NumPy

Pengaturan editor

Ukuran font
Ukuran huruf di editor.
Ukuran tab
Lebar indentasi. Otomatis: 2 spasi untuk TypeScript, 4 untuk Python.
Key bindings
Ganti ke mode Vim.
Nomor baris relatif
Nomor baris dihitung dari posisi kursor (berguna untuk gerakan Vim).
Word wrap
Baris panjang dilipat agar muat di lebar editor.
IntelliSense
Saran kode otomatis saat mengetik (Ctrl+Spasi tetap bisa dipakai saat mati).

Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.