Dropout

Keacakan saat pelatihan sebagai bentuk regularisasi.

Daftar isi

Dropout adalah regularisasi yang mematikan sebagian unit secara acak pada setiap langkah pelatihan, sehingga jaringan tidak boleh bergantung pada neuron tertentu untuk menyimpan satu pola. Topik ini menjelaskan mekanikanya beserta penskalaan yang membuat mode evaluasi tetap konsisten, menunjukkan beda perilaku train dan eval dengan kode, dan menutup dengan kaidah pemilihan rasionya. Setelah selesai, satu baris nn.Dropout pada resep pelatihan terbaca lengkap dengan alasan di baliknya.

Keacakan sebagai pencegah ketergantungan#

Overfitting sering berupa jaringan yang menempatkan beban pada klaster kecil neuron tertentu, dan klaster itu rapuh karena saling menyesuaikan kekeliruan satu sama lain. Dropout mengacaukan ketergantungan ini dengan mematikan setiap unit secara independen dengan peluang p pada setiap langkah maju. Neuron yang mati pada langkah itu tidak berkontribusi pada keluaran dan tidak menerima gradien, sehingga setiap pembaruan dilatih oleh sub-jaringan yang berbeda, dan tidak ada satu neuron pun yang dapat diandalkan seorang diri.

Efek sekundernya sama pentingnya. Karena setiap langkah memakai sub-jaringan berbeda, pelatihan secara efektif membagikan parameter di antara banyak model yang berbeda komposisi, dan mode evaluasi yang memakai seluruh unit berperilaku seperti rata-rata dari ansambel itu. Analogi ansambel ini bukan hanya metafora, karena sifat penggabungan sub-model itulah yang dihitung persis oleh penskalaan di bawah.

Mekanika dan penskalaan invers#

Dalam mode pelatihan, setiap aktivasi dipertahankan dengan peluang 1−p 1-p dan dikalikan faktor 11−p \frac{1}{1-p} agar ekspektasi totalnya tetap sama:

dropout(xi)=mi⋅xi1−p,mi∼Bernoulli(1−p) \text{dropout}(x_i) = \frac{m_i \cdot x_i}{1 - p}, \qquad m_i \sim \text{Bernoulli}(1-p)

Skala ini disebut penskalaan invers, dan fungsinya menjaga jumlah aktivasi yang diterima layer berikutnya tidak berubah ketika sebagian unit dimatikan. Tanpa penskalaan, masukan mode evaluasi yang memakai seluruh unit akan jauh lebih besar daripada yang pernah dilihat selama pelatihan, dan prediksinya bias. Dengan penskalaan, mode evaluasi cukup memakai seluruh unit tanpa perhitungan tambahan, dan itulah desain yang dipakai PyTorch.

Kode berikut memeriksa kedua mode pada tensor yang sama, sehingga ekspektasi yang terjaga dan penonaktifan pada eval terlihat pada angka.

python Contoh: mode train dan eval pada tensor yang sama
import torch
import torch.nn as nn

torch.manual_seed(0)
x = torch.ones(1, 1000)
dp = nn.Dropout(p=0.3)
y = dp(x)
print("unit dipertahankan :", int((y != 0).sum()))
print("rata-rata keluaran :", round(float(y.mean()), 3))
dp.eval()
print("rata-rata mode eval :", float(dp(x).mean()))
text Keluaran
unit dipertahankan : 706
rata-rata keluaran : 1.009
rata-rata mode eval : 1.0

Dengan p 0,3, sekitar 700 dari 1000 unit dipertahankan dan setiap unit yang hidup bernilai 1/(1−0,3)≈1,429 1/(1-0{,}3) \approx 1{,}429 , sehingga rata-rata keluarannya tetap di sekitar satu sesuai ekspektasi masukannya. Pada mode evaluasi, seluruh unit aktif tanpa penyamaran maupun penskalaan, dan rata-rata keluarannya kembali tepat satu. Kontras dua mode ini adalah alasan yang sama dengan batch normalization mengapa model.eval() wajib dipanggil sebelum evaluasi.

Menempatkan dropout pada arsitektur#

Penempatan yang lazim adalah pada keluaran layer tersembunyi yang lebar, khususnya layer penuh sebelum layer keluaran, dan pada transformer dropout juga menghiasi attention beserta jaringan umpan-majunya. Rasio yang dipakai berkisar antara 0,1 untuk transformer besar hingga 0,5 untuk layer penuh jaringan kecil, dan nilai yang lebih tinggi berarti regularisasi yang lebih kuat. Dropout tidak dipasang pada layer keluaran, karena prediksi akhir harus deterministik.

Kode berikut membangun blok MLP dengan dropout di antara layer tersembunyi dan menunjukkan bahwa jumlah parameternya tidak berubah, karena dropout adalah perilaku, bukan parameter.

python Contoh: dropout pada blok MLP
import torch.nn as nn

mlp = nn.Sequential(
    nn.Linear(128, 64), nn.ReLU(), nn.Dropout(0.5),
    nn.Linear(64, 64), nn.ReLU(), nn.Dropout(0.5),
    nn.Linear(64, 10),
)
n_param = sum(p.numel() for p in mlp.parameters())
n_dropout_layer = mlp[2].p
print("parameter MLP      :", n_param)
print("rasio dropout      :", n_dropout_layer)
text Keluaran
parameter MLP      : 13066
rasio dropout      : 0.5

Angka parameternya semata-mata milik tiga layer linier, karena nn.Dropout tidak menyimpan bobot sama sekali. Pemisahan peran ini menjelaskan mengapa dropout dapat ditambah atau diperketat tanpa menyangkut ukuran model, dan mengapa perbandingan dua rasio dropout pada arsitektur yang sama adalah eksperimen yang bersih.

Menala rasio dan batasnya#

Rasio dropout adalah hyperparameter yang ditala pada data validasi, dan tanda penggunaannya terbaca dari kurva pembelajaran. Kesenjangan train-validasi yang lebar dengan train yang terlalu baik menunjukkan regularisasi yang boleh diperkuat, sedangkan train yang ikut tinggi menunjukkan dropout yang sudah membatasi kapasitas berlebihan dan rasionya perlu diturunkan. Augmentasi data pada sisi lain tetap menjadi perbaikan pertama bila tersedia, karena menambah informasi sungguhan alih-alih memaksa model berbagi yang sudah ada.

Dua batas praktis menutup topik ini. Pertama, dropout menghilangkan keuntungan penggabungan bobot sebelum inference bila dibiarkan aktif, sehingga ekspor model selalu menormalkannya ke mode eval. Kedua, dropout dan batch normalization yang berdekatan dapat saling mengganggu karena keacakan satu mengotori statistik yang lain, dan urutan yang lazim menempatkan dropout setelah blok yang dinormalisasi, bukan sebelumnya.

Ringkasan#

  • Dropout mematikan unit dengan peluang p per langkah pelatihan, sehingga tidak ada neuron yang dapat dipercaya seorang diri dan pelatihan menjadi ansambel sub-jaringan.
  • Penskalaan invers 1/(1−p) 1/(1-p) menjaga ekspektasi aktivasi, sehingga mode evaluasi memakai seluruh unit tanpa bias.
  • Dropout tidak menambah parameter dan lazim ditempatkan pada layer tersembunyi lebar dengan rasio 0,1 sampai 0,5.
  • Rasionya ditala pada validasi lewat kesenjangan train-validasi, dan mode eval wajib sebelum inference maupun ekspor.

Referensi#