b belajar.myudak

Layer Linear + ReLU dengan autograd

Implementasikan forward satu layer nn.Linear diikuti ReLU dengan minitorch, lalu hitung gradien terhadap W dan b untuk loss L = out.sum().

out=ReLU(xW⊤+b)\text{out} = \text{ReLU}(xW^\top + b)

W berbentuk (out, in), mengikuti konvensi PyTorch.

x = [[1, 2]], W = [[1, 1]], b = [0]  →  [[[3]], [[1, 2]], [1]]

Konvensi bentuk nn.Linear

PyTorch menyimpan bobot sebagai (out_features, in_features), sehingga forward-nya x @ W.T + b. Di soal NumPy sebelumnya kita memakai x @ W dengan W: (in, out). Keduanya benar. Yang penting adalah konsisten dan selalu mengecek bentuk.

Membaca gradiennya

Dengan L=∑outL = \sum \text{out}, gradien yang datang ke out bernilai 1 semua. ReLU meneruskan 1 hanya di posisi yang aktif, lalu:

  • dL/db[j] = berapa banyak contoh yang membuat neuron j aktif,
  • dL/dW[j] = jumlah input x dari contoh-contoh tersebut.

Bandingkan dengan rumus manual di “Backprop jaringan dua layer”. Hasilnya sama persis, tanpa menulis backward sendiri.

Modul

nn.Linear di minitorch hanyalah kelas yang menyimpan weight dan bias sebagai nn.Parameter (tensor dengan requires_grad=True) dan menjalankan baris forward di atas. model.parameters() mengumpulkan semua Parameter supaya bisa diberikan ke optimizer.

Penjelasan

Yang diminta. Forward relu(x @ W.T + b) dengan minitorch, lalu gradien W dan b untuk L = out.sum().

Langkah di kode:

  1. Bungkus W dan b dengan requires_grad=True karena keduanya parameter. x cukup torch.tensor(x).
  2. out = (x @ W.T + b).relu(). W berbentuk (out, in) seperti nn.Linear di PyTorch, jadi perlu .T agar (N, in) @ (in, out) cocok.
  3. out.sum().backward().
  4. return [out, W.grad, b.grad].

Membaca hasilnya. Dengan L=∑outL = \sum \text{out}, gradien yang datang ke setiap elemen out adalah 1. ReLU meneruskan 1 hanya di posisi yang aktif. Jadi:

  • b.grad[j] = banyaknya contoh yang membuat neuron j aktif.
  • W.grad[j] = jumlah input x dari contoh-contoh itu.

Case 2: neuron ke-0 aktif untuk kedua contoh, jadi b.grad[0] = 2 dan W.grad[0] = [1,-1] + [2,0] = [3,-1]. Neuron ke-2 tidak pernah aktif, jadi gradiennya 0.

Yang dikembalikan: [out (N,out), W.grad (out,in), b.grad (out,)].

Topik
minitorchlinearautograd
Petunjuk 1

Bentuk W mengikuti PyTorch: (out_features, in_features). Karena itu forward-nya x @ W.T.

Petunjuk 2

Panggil .relu() pada hasil linear, lalu out.sum().backward(). Gradien W dan b ada di .grad.

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.