Lompat ke konten utama
←

Jaringan Saraf Tiruan Dasar dengan Python

Pelajaran 17 dari 22

MLP scikit-learn, inisialisasi, dan regularisasi

Dropout dan batch normalization

Setelah pelajaran ini kamu bisa menulis dropout dengan masker acak ber-seed dan batch normalization per fitur dengan numpy, serta menjelaskan perilaku keduanya saat latihan dan saat prediksi.

±14 menitDiperiksa 28 Sep 2026

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.]

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 2 dari 3

Satu fitur di minibatch empat sampel bernilai [2, 4, 6, 8]. Batch normalization memakai γ = 2, β = 1, dan ε = 0 (varians dibagi 4). Berapa keluaran untuk sampel bernilai 8? Tulis dengan dua desimal.

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke