Gradien ReLU
Saat forward, sebuah layer menghitung out = relu(x). Saat backward, kamu menerima grad_out = dL/d(out). Kembalikan dL/dx, dengan konvensi turunan di x = 0 bernilai 0.
x = [1, -1, 2], grad_out = [1, 1, 1] → [1, 0, 1]
| ReLU(1) | = 1.0000 | turunan = 1.0000 | Murah dan tidak jenuh untuk x > 0. Untuk x < 0 gradiennya 0 → risiko "dead ReLU". |
| GELU(1) | = 0.8412 | turunan = 1.0830 | Versi "halus" ReLU yang dipakai GPT dan BERT. Sedikit negatif di sekitar x ≈ −0.75. |
Aturan rantai per elemen
ReLU bekerja per elemen, jadi gradiennya juga per elemen:
∂xi∂L=∂outi∂L⋅1[xi>0]ReLU berfungsi seperti gerbang: gradien lewat utuh di posisi yang aktif, dan diblokir total di posisi yang mati.
Dead ReLU
Kalau sebuah neuron selalu menerima input negatif, gradiennya selalu 0 dan bobotnya tidak pernah berubah lagi. Penyebab umumnya learning rate terlalu besar atau bias awal yang buruk. Varian seperti Leaky ReLU atau GELU memberi sedikit gradien di sisi negatif.
Pola backward
Semua layer di framework punya pola yang sama: backward(grad_out) → grad_in. Setiap layer cukup tahu turunan lokalnya sendiri, lalu aturan rantai menyambung semuanya.
Penjelasan
Yang diminta. Saat backward, sebuah layer menerima grad_out = ∂L/∂out dan harus mengembalikan ∂L/∂x.
Aturan rantai per elemen. outi=max(0,xi), jadi
∂xi∂outi={10xi>0xi≤0⇒∂xi∂L=grad_outi⋅[xi>0]Langkah di kode: satu baris, grad_out * (x > 0). x > 0 menghasilkan array boolean; dikalikan dengan angka, True dianggap 1 dan False dianggap 0. Itulah “gerbang” ReLU.
Kenapa pakai x, bukan output? Kita butuh tahu neuron mana yang aktif saat forward. Menyimpan x (atau mask x > 0) saat forward adalah pola standar: setiap layer menyimpan apa yang nanti dibutuhkan backward-nya.
Di titik 0. ReLU tidak punya turunan tepat di 0. Konvensi yang dipakai PyTorch adalah 0, dan x > 0 sudah memberi 0 di titik itu.
Yang dikembalikan: array berbentuk sama dengan x.
Topik
Petunjuk 1
ReLU(x) = max(0, x). Kemiringannya 1 di kanan nol dan 0 di kiri nol.
Petunjuk 2
Aturan rantai: dL/dx = dL/d(out) · d(out)/dx. Untuk x tepat 0, pakai turunan 0.
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.