Overfitting dan underfitting

Kurva pembelajaran dan diagnosis utama kapasitas model terhadap data.

Daftar isi

Overfitting adalah keadaan ketika model menghafal data pelatihan sementara kinerjanya pada data baru justru memburuk, dan underfitting adalah keadaan ketika model terlalu lemah untuk menangkap pola data sampai kinerja pelatihannya pun rendah. Topik ini memperkenalkan kurva pembelajaran sebagai alat diagnosis utama, memeragakan kedua keadaan dengan regresi polinomial, dan menutupnya dengan tindakan yang sesuai untuk tiap diagnosis.

Tiga keadaan model terhadap data#

Hubungan kapasitas model dan ketersediaan data menghasilkan tiga keadaan yang berbeda pola kesalahannya. Model yang underfit menyimpan kesalahan besar pada data pelatihan maupun data validasi, artinya pola belum tertangkap sama sekali. Model yang pas menyimpan kesalahan pelatihan yang menurun dan kesalahan validasi yang mengikutinya sampai titik terbaiknya. Model yang overfit menyimpan kesalahan pelatihan yang terus turun sementara kesalahan validasi berbalik naik, dan inilah tanda hafalan yang paling khas.

Ketiga keadaan tersebut tidak ditebak dari nilai loss pelatihan sendirian. Model dengan loss pelatihan 0,001 bisa jadi hebat atau bisa jadi sedang menghafal, dan satu-satunya pembeda adalah keberadaan data validasi yang diukur dengan cara yang sama. Karena itu, diagnosis overfitting selalu berbentuk perbandingan dua kurva, bukan satu angka, dan disiplin pembagiannya dibahas pada topik Pembagian train/val/test.

Membaca kurva pada regresi polinomial#

Contoh berikut menyetarakan seluruh keadaan dalam satu eksperimen kecil. Data dibangkitkan dari fungsi sinus dengan sedikit bising, lalu tiga model dengan kapasitas berbeda, yaitu polinomial derajat 1, 3, dan 12, dipasangkan pada data yang sama. Kinerjanya diukur MSE pada data pelatihan dan pada data validasi terpisah.

python Contoh: MSE train dan validasi untuk tiga derajat polinomial
import numpy as np

rng = np.random.default_rng(0)
X_train = rng.uniform(-3, 3, size=15)
t_train = np.sin(X_train) + 0.1 * rng.normal(size=15)
X_val = rng.uniform(-3, 3, size=200)
t_val = np.sin(X_val)

for derajat in (1, 3, 12):
    koef = np.polyfit(X_train, t_train, derajat)
    mse_train = float(np.mean((np.polyval(koef, X_train) - t_train) ** 2))
    mse_val = float(np.mean((np.polyval(koef, X_val) - t_val) ** 2))
    print(f"derajat {derajat:2d}: train={mse_train:.4f} val={mse_val:.4f}")
text Keluaran
derajat  1: train=0.1156 val=0.2735
derajat  3: train=0.0064 val=0.0055
derajat 12: train=0.0005 val=9.1906

Pembacaannya runtut. Derajat 1 underfit karena kedua kesalahannya besar, sementara garis lurus memang tidak mampu menelusuri sinus. Derajat 3 berada di titik manis, yaitu kesalahan pelatihan kecil dan kesalahan validasi yang lebih kecil lagi dari keduanya. Derajat 12 overfit dengan pola yang paling mencerahkan, yaitu kesalahan pelatihan yang lebih rendah dari derajat 3, tetapi kesalahan validasi yang melonjak berlipat karena kurvanya mengejar bising pelatihan sambil terbang liar di antara titik data.

Pada jaringan saraf, kurva yang sama muncul sebagai dua garis loss per epoch, yaitu loss pelatihan yang selalu menurun dan loss validasi yang membentuk lembah lalu naik. Lokasi lembah itulah titik pemberhentian terbaik, dan menghentikan pelatihan dekat lokasi tersebut disebut early stopping.

Diagnosis dan tindakannya#

Diagnosisnya mengikuti dua kurva, dan tindakannya mengikuti diagnosis. Model yang underfit ditangani dengan menambah kapasitas, misalnya lebih banyak layer atau unit, menambah fitur yang relevan, melatih lebih lama, atau menurunkan regularisasi yang terlalu ketat. Model yang overfit ditangani dengan arah yang berlawanan, yaitu menambah data atau memperkaya data yang ada lewat augmentasi, mengurangi kapasitas, menaikkan regularisasi seperti dropout dan weight decay, atau menghentikan pelatihan lebih awal.

GejalaDiagnosisTindakan pertama
Train tinggi, val tinggiUnderfittingTambah kapasitas atau durasi pelatihan
Train turun, val naikOverfittingTambah data atau regularisasi
Train kecil, val sedang, keduanya datarTitik manisHentikan di sekitar lembah validasi

Satu nuansa praktis menutup tabel ini. Kedua keadaan dapat terjadi bersamaan pada arsitektur yang salah, misalnya model yang terlalu sempit untuk pola utama tetapi cukup lebar untuk menghafal bising, sehingga perbaikan satu sisi kadang memperparah sisi lain. Karena itu perubahan kapasitas dan regularisasi diterapkan satu per satu, dan kurva pembelajarannya diperiksa ulang setiap perubahan.

Kapasitas, data, dan praktik modern#

Intuisi awal mengatakan parameter yang lebih banyak dari data pasti menghafal, dan intuisi itu perlu diperhalus. Jaringan modern dilatih dalam rezim yang parameternya jauh melebihi jumlah contoh, tetapi tetap menggeneralisasi baik karena regularisasi eksplisit, penurunan gradien yang sendirinya menghimbau solusi sederhana, dan augmentasi data. Kapasitas tetap menentukan batas atas kemampuan, sedangkan disiplin pelatihan menentukan seberapa dekat batas itu dicapai tanpa hafalan.

Peta tindakannya untuk sisa jalur sudah jelas. Data yang lebih banyak dan lebih baik selalu menjadi perbaikan paling berdampak bila tersedia, augmentasi menjadi penggantinya pada citra dan teks, regularisasi pada modul Regularisasi dan penalaan menyediakan tuas yang lebih halus, dan kurva pembelajaran tetap menjadi alat penilaian yang sama di semua kasus.

Ringkasan#

  • Overfitting terlihat sebagai kesalahan pelatihan yang turun sementara kesalahan validasi naik, dan underfitting sebagai kesalahan yang tinggi di keduanya.
  • Regresi polinomial derajat 1, 3, dan 12 memeragakan ketiga keadaan pada data yang sama dengan angka yang dapat dihitung ulang.
  • Tindakan mengikuti diagnosis, yaitu kapasitas dan durasi untuk underfit, data dan regularisasi untuk overfit.
  • Jaringan modern dapat berparameter jauh lebih banyak dari data asalkan disiplin regularisasi dan penghentian dini diterapkan.

Referensi#