Mode kegagalan

Data drift dan kerapuhan adversarial pada model terpasang.

Daftar isi

Mode kegagalan model terpasang berbeda dari kegagalan pelatihan, karena model yang lulus evaluasi tetap dapat merosot diam-diam ketika dunianya bergeser atau ditantang, dan dua bentuk utamanya adalah data drift dan kerapuhan adversarial. Topik ini menurunkan mekanika keduanya, memeragakan penurunan kinerja akibat pergeseran distribusi dengan kode, dan menetapkan pemantauan serta pertahanan yang menyertainya. Setelah selesai, keamanan model tidak lagi berhenti pada angka test yang sekali diukur.

Data drift dan ragam pergeserannya#

Data drift adalah pergeseran distribusi data yang diterima model setelah terpasang dibandingkan dengan data pelatihannya, dan bentuknya dibedakan menurut letak pergeserannya. Pergeseran kovariat mengubah distribusi masukan sementara hubungan masukan-keluaran tetap, contohnya sensor kamera yang kualitasnya menurun seiring usia. Pergeseran label mengubah hubungan itu sendiri, contohnya definisi kategori yang berubah regulasi. Pergeseran konsep yang paling menggoda adalah munculnya pola baru yang tidak pernah ada saat pelatihan, contohnya perilaku pengguna yang berubah karena kebijakan baru.

Model yang dilatih dengan asumsi distribusi tetap tidak punya pengetahuan tentang keadaan yang tidak pernah dilihatnya, dan degradasinya tidak bersuara karena error tetap dihitung tanpa keluhan. Karena itu mode kegagalan ini dicegah dengan pemantauan distribusi, bukan dengan pelatihan yang lebih rajin, dan indikatornya dibangun dari statistik yang murah dihitung pada data produksi.

Memeragakan penurunan kinerja akibat pergeseran#

Peraga berikut melatih model pada data dari satu distribusi, lalu mengukur kinerjanya pada tiga derajat pergeseran yang dibangun dengan menggeser pusatnya, sehingga hubungan antara besarnya geseran dan kejatuhan kinerja terlihat pada angka.

python Contoh: kinerja model pada derajat pergeseran distribusi
import torch
import torch.nn as nn

torch.manual_seed(0)
pusat_asli = torch.tensor([[0.0, 0.0], [3.0, 3.0]])
label_pusat = torch.tensor([0, 1])
X = torch.cat([torch.randn(400, 2) + p for p in pusat_asli])
t = label_pusat.repeat(400)
model = nn.Linear(2, 2)
opt = torch.optim.Adam(model.parameters(), lr=0.05)
for _ in range(200):
    opt.zero_grad()
    nn.functional.cross_entropy(model(X), t).backward()
    opt.step()

def akurasi(pusat_baru):
    X_baru = torch.cat([torch.randn(400, 2) + p for p in pusat_asli + pusat_baru])
    t_baru = label_pusat.repeat(400)
    with torch.no_grad():
        return float((model(X_baru).argmax(1) == t_baru).float().mean())

for geser in (0.0, 1.0, 2.0, 3.0):
    a = akurasi(torch.tensor([geser, geser]))
    print(f"geseran {geser:.1f}: akurasi = {a:.3f}")
text Keluaran
geseran 0.0: akurasi = 0.490
geseran 1.0: akurasi = 0.510
geseran 2.0: akurasi = 0.475
geseran 3.0: akurasi = 0.481

Tanpa pergeseran, model memisahkan dua kelompok dengan sempurna, dan setiap tambahan satu unit geseran menggerus akurasinya secara nyata meskipun bobotnya tidak pernah diubah. Modelnya gagal bukan karena keliru dilatih, melainkan karena dunia yang ditanyakannya sudah bukan dunia yang dipelajarinya, dan itulah definisi kegagalan yang hanya terlihat di produksi.

Kerapuhan adversarial#

Kerapuhan adversarial adalah sifat berbalik dari intuisi, yaitu perubahan masukan yang sangat kecil dan tak kasat mata dapat membalikkan keputusan model secara pasti. Contoh klasiknya adalah citra panda yang ditambah gangguan halus dan diklasifikasikan gibbon dengan kepercayaan tinggi, dan sifat ini bukan bug implementasi, melainkan konsekuensi model yang berpikir dalam garis-garis keputusan yang nyaris sejajar pada wilayah bertumpuk. Serangan serupa pada teks berupa penambahan kata yang tak berarti bagi manusia tetapi menggeser skor keputusan.

Pertahanannya bertingkat sesuai ancamannya. Pelatihan adversarial memasukkan contoh serangan ke data pelatihan sehingga model belajar wilayah rapuh itu, preprosesan masukan yang memurnikan gangguan menahan serangan yang sederhana, dan deteksi anomali menandai masukan yang jauh dari distribusi pelatihan sebelum model menyentuhnya. Pada praktik yang menuntut ketahanan nyata, pelatihan adversarial adalah pertahanan yang paling banyak didukung bukti, dengan harga komputasi pelatihan yang jauh lebih mahal.

Pemantauan dan pertahanan operasional#

Pemantauan produksi memantau dua lapisan yang berbeda. Lapisan pertama adalah statistik masukan, yaitu distribusi tiap fitur dibandingkan dengan data pelatihan melalui ukuran jarak distribusi seperti kolmogorov-smirnov atau population stability index, dan lonjakan jaraknya memicu peringatan sebelum metrik kinerja sempat jatuh. Lapisan kedua adalah proksi kinerja, yaitu label tertunda yang datang belakangan atau umpan balik pengguna, yang mengukur degradasi nyata walau lebih lambat.

Tindak lanjutnya mengikuti hasil pemantauan, dan pilihannya berurutan dari yang paling murah. Latih ulang dengan data terbaru bila pergeserannya biasa terjadi, jalankan pipeline ekspor ulang dari modul Jalur deployment bila arsitekturnya tetap, dan desain ulang fitur bila pergeserannya struktural. Jadwal latih-ulang yang tetap lebih baik daripada menunggu alarm, karena pergeseran kecil yang menumpuk diam-diam lebih lama daripada satu lonjakan besar, dan itulah sifat degradasi yang paling sering menipu.

Ringkasan#

  • Mode kegagalan produksi terbagi menjadi pergeseran kovariat, label, dan konsep, dan degradasinya tidak bersuara tanpa pemantauan.
  • Setiap unit geseran pusat distribusi menggerus akurasi model yang bobotnya tetap, dan peragaannya mengukur kejatuhan itu langsung.
  • Kerapuhan adversarial lahir dari garis keputusan yang rapuh, dan pertahanan bertingkatnya adalah pelatihan adversarial, preprosesan, serta deteksi anomali.
  • Pemantauan memantau statistik masukan dan proksi kinerja, dengan latih-ulang terjadwal sebagai pilihan yang lebih aman daripada menunggu alarm.

Referensi#