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]]
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). 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:
h = X.- Untuk setiap
(W, b):h = h @ np.array(W) + np.array(b).layersberisi list Python biasa, jadi diubah ke array dulu. Bentuknya(N, in) @ (in, out) + (out,) → (N, out). 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. 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
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.
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.