b belajar.myudak

MLP dari nol: forward berlapis

layers adalah list pasangan [W, b]. Hitung output MLP: setiap layer melakukan h @ W + b, diikuti ReLU, kecuali layer terakhir yang mengeluarkan nilai mentah (logits).

X = [[1, -1]], layers = [[I, [0, 0]], [[[1], [1]], [0.5]]]
→ layer 1: relu([1, -1]) = [1, 0]  →  layer 2: 1 + 0 + 0.5 = [[1.5]]
Playground jaringan saraf (2 → 6 → 1)
epoch 0 · loss — · akurasi 60.0%

Coba XOR dengan 1 neuron: tidak bisa, karena satu neuron hanya bisa membuat garis lurus. Dengan 3–4 neuron, garis-garis itu digabung jadi batas yang melengkung.

Kenapa butuh nonlinearitas

Tanpa ReLU, dua layer linear tetap linear: (XW1)W2=X(W1W2)(XW_1)W_2 = X(W_1W_2). Sedalam apa pun tumpukannya, hasilnya hanya satu matriks. Nonlinearitas di antara layer membuat jaringan bisa membentuk batas keputusan yang melengkung. Coba dataset XOR di atas dengan 1 neuron, lalu dengan 4.

Kenapa layer terakhir tanpa aktivasi

Output terakhir dimasukkan ke loss: softmax + cross-entropy untuk klasifikasi, atau langsung ke MSE untuk regresi. ReLU di akhir akan membuang semua nilai negatif, sehingga model tidak bisa menyatakan “sangat tidak mungkin” untuk suatu kelas.

Universal approximation

MLP dengan satu hidden layer yang cukup lebar bisa mendekati fungsi kontinu apa pun. Dalam praktik, jaringan yang lebih dalam biasanya butuh parameter jauh lebih sedikit daripada jaringan yang sangat lebar.

Penjelasan

Yang diminta. Jalankan X melewati tumpukan layer [W, b]: setiap layer h @ W + b, dengan ReLU di antara layer tetapi tidak setelah layer terakhir.

Langkah di kode:

  1. h = X.
  2. Untuk setiap (W, b): h = h @ np.array(W) + np.array(b). layers berisi list Python biasa, jadi diubah ke array dulu. Bentuknya (N, in) @ (in, out) + (out,) → (N, out).
  3. if i < len(layers) - 1: h = np.maximum(h, 0): ReLU, kecuali di layer terakhir.

Kenapa layer terakhir tanpa ReLU. Output terakhir adalah logits, skor mentah yang nanti dimasukkan ke softmax/cross-entropy (klasifikasi) atau langsung ke MSE (regresi). Skor itu harus bisa negatif. Coba case terakhir: satu layer saja dengan output −2-2. Dengan ReLU, hasilnya akan menjadi 0.

Cek case 2. Layer 1 adalah identitas: relu([1, -1]) = [1, 0]. Layer 2: 1·1 + 0·1 + 0.5 = 1.5.

Yang dikembalikan: array (N, out_terakhir).

Kesalahan umum: np.maximum(h, 0) vs np.max(h, 0). Yang kedua adalah reduksi (maksimum di sepanjang axis 0), bukan ReLU.

Topik
mlpnumpylayer
Petunjuk 1

Setiap layer: h = h @ W + b. Ubah W dan b ke np.array dulu.

Petunjuk 2

Terapkan np.maximum(h, 0) setelah setiap layer kecuali yang terakhir.

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.