Ritual overfit satu batch

Langkah debug pertama yang selalu dijalankan sebelum pelatihan penuh.

Daftar isi

Ritual overfit satu batch adalah langkah debug pertama yang dijalankan pada setiap model baru, yaitu memaksa satu batch kecil dilatih hingga loss mendekati nol sebelum pelatihan penuh dimulai. Topik ini menjelaskan mengapa ritual ini mampu menangkap sebagian besar kekeliruan pelatihan, menuliskan prosedurnya lengkap dengan kode, dan menyediakan tabel membaca gejalanya. Setelah selesai, ritual ini menjadi kebiasaan kerja yang dijalankan tanpa perlu diingatkan.

Mengapa ritual ini menangkap hampir semua masalah#

Model yang arsitekturnya masuk akal hampir selalu mampu menghafal delapan sampai tiga puluh dua contoh dalam ratusan langkah, karena kapasitasnya jauh melampaui kebutuhan batch kecil. Apabila loss satu batch gagal turun mendekati nol, kekeliruannya hampir pasti bukan pada kapasitas, melainkan pada salah satu dari empat tempat, yaitu koneksi antara data dan model, perhitungan loss, arah gradien, atau langkah optimizer. Kekeliruan semacam ini tersembunyi pada pelatihan penuh di balik kurva yang turun perlahan, tetapi telanjang pada ritual satu batch.

Ritual ini juga memisahkan dua pertanyaan yang sering bercampur saat debug. Pertanyaan apakah sistemnya benar dijawab oleh ritual satu batch, sedangkan pertanyaan apakah modelnya cukup untuk masalah penuh dijawab oleh pelatihan sungguhan dengan kurva validasi. Menjalankan pelatihan berjam-jam untuk mengetahui bahwa labelnya salah adalah pemborosan paling umum yang dicegah ritual ini, dan kebiasaannya dipopulerkan oleh tulisan Karpathy tentang resep pelatihan jaringan saraf.

Prosedur lengkap dengan kode#

Prosedurnya empat langkah. Pertama, ambil satu batch tetap dari DataLoader dengan benih, dan jangan dikacaukan lagi di seluruh ritual. Kedua, jalankan siklus pelatihan full-batch pada batch itu dengan optimizer yang akan dipakai sungguhan. Ketiga, pastikan loss turun mendekati nol dan metrik sampel yang diprediksi tepat semuanya. Keempat, periksa bentuk setiap tensor dengan print sebelum loop pertama, karena ketidakcocokan bentuk sering bersembunyi di balik broadcasting yang diam-diam berhasil.

python ritual_satu_batch.py
import torch
import torch.nn as nn

torch.manual_seed(0)
X = torch.randn(16, 2)
t = ((X[:, 0] + X[:, 1]) > 0).long()

model = nn.Sequential(nn.Linear(2, 32), nn.ReLU(), nn.Linear(32, 2))
opt = torch.optim.Adam(model.parameters(), lr=0.01)

print("bentuk X:", tuple(X.shape), "| bentuk t:", tuple(t.shape))
for langkah in range(1, 401):
    opt.zero_grad()
    loss = nn.functional.cross_entropy(model(X), t)
    loss.backward()
    opt.step()
    if langkah % 100 == 0:
        benar = (model(X).argmax(dim=1) == t).float().mean()
        print(f"langkah {langkah:3d}: loss={loss.item():.5f} akurasi={benar.item():.3f}")
text Keluaran
bentuk X: (16, 2) | bentuk t: (16,)
langkah 100: loss=0.00630 akurasi=1.000
langkah 200: loss=0.00131 akurasi=1.000
langkah 300: loss=0.00056 akurasi=1.000
langkah 400: loss=0.00031 akurasi=1.000

Berkas dijalankan dengan python3 ritual_satu_batch.py, dan hasil ritualnya tuntas karena loss menyusut dari sekitar 0,7 menuju mendekati nol dengan akurasi sempurna pada batch itu. Keluaran seperti ini menandakan rantai data, model, loss, dan optimizer sudah tersambung dengan benar, sehingga pelatihan penuh boleh dimulai. Apabila ritual berjalan pada model sederhana namun gagal pada arsitektur baru, kecurigaan berpindah ke kapasitas atau skala masalah, dan itulah temuan yang sah dari ritual ini.

Membaca gejala yang muncul#

Kegagalan ritual bukan akhir, melainkan diagnosis awal yang arahnya jelas. Tabel berikut memetakan gejala ke penyebab utamanya, dan urutan pemeriksanaannya mengikuti baris tabel.

Gejala pada satu batchPenyebab utamaPemeriksaan lanjutan
Loss tidak turun sama sekaliLabel tidak nyambung dengan keluaranCocokkan indeks kelas dan bentuk target
Loss menjadi nanLearning rate terlalu besar atau pembagian nolTurunkan lr, periksa log dan pembagi
Loss turun lalu menetap tinggiAktivasi atau bentuk tensor salahCetak bentuk dan rentang tiap layer
Akurasi sempurna sejak langkah awalKebocoran label ke masukanPeriksa fitur yang mencerminkan target

Gejala terakhir layak digarisbawahi karena terlihat seperti keberhasilan. Akurasi yang sempurna sejak sebelum pelatihan biasanya berarti masukan memuat informasi jawabannya, misalnya kolom yang merupakan transformasi langsung dari label, dan hanya perbandingan dengan intuisi masalah yang menangkapnya. Keempat gejala bermuara pada kebiasaan yang sama, yaitu tidak percaya pada kode pelatihan sebelum ritualnya lolos.

Kapan ritual dijalankan#

Ritual dijalankan setiap kali salah satu dari tiga hal berubah, yaitu arsitektur, sumber data, atau fungsi loss. Perubahan hyperparameter seperti learning rate atau ukuran batch tidak menuntut ritual dari nol, tetapi apabila pelatihan penuh berperilaku aneh, kembali ke satu batch adalah langkah isolasi pertama yang paling murah. Pada modul Pengerjaan proyek, ritual ini masuk ke daftar periksa sebelum kampanye pelatihan resmi, dan hasilnya dicatat sebagai bagian dari eksperimen.

Kebiasaan ini menutup modul Disiplin pelatihan di posisi yang tepat, karena diagnosis kurva, pembagian data, dan inisialisasi seluruhnya melayani satu tujuan, yaitu memastikan pelatihan yang berjalan lama memang layak dijalankan.

Ringkasan#

  • Model yang sehat mampu menghafal satu batch kecil, sehingga kegagalan ritual menunjuk kekeliruan data, loss, gradien, atau optimizer.
  • Prosedurnya empat langkah dengan satu batch tetap, pelatihan full-batch, target loss mendekati nol, dan pemeriksaan bentuk tensor di awal.
  • Tabel gejala memetakan kegagalan ritual ke tersangkanya, termasuk akurasi sempurna dini yang justru menandai kebocoran label.
  • Ritual diulang setiap perubahan arsitektur, data, atau loss, dan hasilnya dicatat bersama eksperimen.

Referensi#