Materi
Dropout adalah regularisasi yang mengacak jaringan selama latihan. Dive into Deep Learning §5.6 merumuskannya: dengan peluang dropout p, setiap aktivasi h diganti 0 dengan peluang p, dan diganti h / (1 − p) bila dipertahankan. Pembagian itu membuat nilai harapannya tetap h. Cara menulisnya: ambil satu bilangan seragam di [0, 1) untuk setiap elemen, pertahankan elemen yang bilangannya lebih besar dari p, dan buang sisanya. Deep Learning bab 7.12 menjelaskan dropout sebagai cara murah melatih ensembel banyak subjaringan sekaligus. Saat pengujian dropout dimatikan: semua neuron dipakai tanpa pembagian.
Batch normalization (d2l §8.5) menstandardisasi setiap fitur di dalam satu minibatch. Untuk minibatch B: μ adalah rata-rata, σ² adalah rata-rata kuadrat simpangan (dibagi banyak sampel, sama dengan np.var bawaan yang ddof-nya 0) ditambah konstanta kecil ε supaya tidak membagi nol, x̂ = (x − μ) / σ, dan keluarannya γ ⊙ x̂ + β. Skala γ dan geseran β dipelajari, dengan nilai awal 1 dan 0. Untuk lapisan penuh, statistiknya diambil per fitur atas sampel, yaitu axis=0. Saat prediksi, lapisan ini memakai rata-rata dan varians bergerak dari data latih, bukan statistik minibatch. Deep Learning bab 8.7.1 menyebutnya reparametrisasi adaptif, bukan algoritma optimasi.
MLPClassifier scikit-learn tidak punya parameter dropout maupun batch normalization; regularisasinya lewat alpha dan early stopping. Karena itu keduanya ditulis sendiri di sini.
import numpy as np
rng = np.random.default_rng(5)
u = rng.random(10_000) # bilangan seragam di [0, 1)
print((u > 0.3).mean()) # porsi yang lolos, dekat 0.7
T = np.array([[1.0, 10.0], [3.0, 30.0]])
print(T.mean(axis=0), T.var(axis=0)) # [ 2. 20.] [ 1. 100.]