Sebuah classifier dapat bekerja baik saat evaluasi lalu melemah setelah deployment karena input berubah. Foto produk mungkin berasal dari kamera baru, pesan dukungan dapat memakai kosakata berbeda, atau pembacaan sensor datang dari hardware lain. Mengumpulkan label untuk lingkungan baru bisa mahal meskipun contoh tanpa label mudah diperoleh.
Domain-adversarial training menangani salah satu bentuk masalah ini. Metode ini meminta feature extractor mendukung tugas prediksi sekaligus membuat domain source dan target sulit dibedakan. Sebuah gradient reversal layer membuat kedua tujuan yang berlawanan itu dapat dilatih dengan backpropagation biasa dengan membalik gradient dari domain classifier sebelum mencapai feature extractor.
Artikel ini membangun mekanisme tersebut dari contoh kecil, menjelaskan apa yang sebenarnya dioptimalkan oleh gradient yang dibalik, serta membahas asumsi dan failure mode yang penting sebelum menggunakannya dalam sistem nyata.
Mulai dari kesenjangan source-target
Misalkan sebuah model mengklasifikasikan foto produk sebagai damaged atau intact.
Dataset training berlabel berasal dari gudang dengan meja inspeksi putih:
source image -> feature extractor -> damage classifier -> labelGudang kedua menggunakan meja gelap dan kamera berbeda. Anda memiliki banyak gambar dari gudang tersebut, tetapi belum memiliki label kerusakan. Gambar-gambar ini membentuk target domain.
Feature extractor yang hanya dilatih pada data source dapat mengodekan bukti yang berguna sekaligus shortcut khusus source:
useful: cracks, dents, torn packaging
source-only: table color, camera response, lighting patternJika downstream classifier bergantung pada kelompok kedua, akurasi source dapat tinggi sementara akurasi target turun.
Tujuan adaptasi bukan membuat gambar source dan target identik. Tujuannya adalah mempelajari representasi yang mempertahankan informasi yang dibutuhkan untuk klasifikasi kerusakan sambil mengurangi informasi yang sekadar mengidentifikasi gudang mana yang menghasilkan gambar tersebut.
Tambahkan classifier untuk domain
Misalkan network memiliki tiga komponen:
- feature extractor
Fdengan parametertheta_f; - task classifier
Cdengan parametertheta_y; - domain classifier
Ddengan parametertheta_d.
Untuk contoh source x_s dengan task label y_s, jalur tugas normal adalah:
z_s = F(x_s)
y_hat = C(z_s)
L_task = classification_loss(y_hat, y_s)Sekarang berikan domain label pada contoh source maupun target. Label ini gratis karena Anda tahu dataset asal setiap contoh:
source -> domain 0
target -> domain 1Domain classifier menerima fitur dari kedua domain:
z = F(x)
d_hat = D(z)
L_domain = classification_loss(d_hat, domain_label)Jika D dapat dengan mudah memisahkan source dari target, berarti F mengekspos informasi spesifik domain. Bagian yang tidak biasa adalah langkah berikutnya: domain classifier harus menjadi lebih baik dalam mendeteksi informasi tersebut, sedangkan feature extractor harus belajar menyembunyikannya.
Gradient reversal menciptakan objective yang berlawanan
Gradient reversal layer berperilaku berbeda pada forward dan backward pass.
Saat forward pass, ia adalah identity function:
R(z) = zKarena itu, domain classifier melihat feature vector yang sama seperti jika layer tersebut tidak ada.
Namun, saat backpropagation, layer mengalikan gradient yang mengalir menuju feature extractor dengan -lambda, dengan lambda >= 0 mengendalikan kekuatan sinyal adversarial:
dR/dz acts like -lambdaHal ini menghasilkan dua arah optimisasi berbeda dari domain loss yang sama:
domain classifier: minimize L_domain
feature extractor: maximize L_domain, scaled by lambdaSementara itu, task loss tetap meminta feature extractor meminimalkan L_task. Secara konseptual, parameter fitur didorong untuk:
minimize with respect to theta_f:
L_task - lambda * L_domainsedangkan parameter domain classifier meminimalkan L_domain seperti biasa.
Tanda minus adalah kuncinya. Tanpa tanda itu, kedua network akan bekerja sama untuk membuat domain semakin mudah dibedakan. Dengan reversal, domain classifier mencari bukti domain dan feature extractor dilatih untuk melawan tekanan tersebut.
Telusuri satu fitur
Pertimbangkan representasi yang sengaja disederhanakan menjadi dua nilai:
z = [damage_signal, background_brightness]Anggap tampilan kerusakan cukup konsisten antar-gudang, tetapi kecerahan background sangat kuat mengungkap gudang asal.
Task classifier pada awalnya mungkin menggunakan kedua koordinat. Domain classifier segera menemukan bahwa background_brightness memprediksi source versus target. Loss-nya kemudian mengirim gradient yang secara normal akan memperkuat kegunaan koordinat itu untuk prediksi domain.
Gradient reversal membalik sinyal tersebut sebelum mencapai feature extractor. Extractor kemudian didorong menuju representasi di mana kecerahan background kurang informatif tentang domain.
Pada saat yang sama, task loss tetap memberi reward pada fitur yang membedakan produk rusak dari utuh. Training menjadi sebuah negosiasi:
task loss -> keep features useful for damage prediction
domain loss -> remove features useful for warehouse predictionContoh ini sengaja sederhana. Representasi neural nyata mendistribusikan informasi ke banyak dimensi, sehingga adaptasi biasanya tidak sama dengan menghapus satu fitur yang jelas.
Data apa yang berkontribusi pada setiap loss
Perbedaan antara data berlabel dan tanpa label sangat penting.
Untuk skenario unsupervised domain adaptation yang umum:
source examples:
contribute to L_task
contribute to L_domain
target examples:
do not contribute to L_task because task labels are unavailable
contribute to L_domainInilah alasan data target tanpa label dapat memengaruhi representasi. Data tersebut memberi tahu model seperti apa input target, meskipun tidak memberi tahu prediksi tugas target mana yang benar.
Satu langkah training secara skematis adalah:
source_features = F(source_batch)
target_features = F(target_batch)
task_loss = task_loss(C(source_features), source_labels)
domain_features = concatenate(source_features, target_features)
domain_labels = [source, ..., source, target, ..., target]
domain_loss = domain_loss(D(R(domain_features)), domain_labels)
backpropagate(task_loss + domain_loss)Di sini R adalah operasi gradient reversal. Menulis outer objective sebagai penjumlahan memudahkan karena perubahan tanda diimplementasikan di dalam R; feature extractor tetap menerima domain gradient yang telah dibalik.
Dalam production code, periksa juga bagaimana framework melakukan reduction pada loss. Mean atas 32 contoh source dan mean atas 64 contoh domain tidak setara dengan menjumlahkan seluruh individual loss. Komposisi batch, aturan reduction, dan lambda bersama-sama menentukan kekuatan relatif gradient.
Domain confusion bukan metrik akhir
Mengevaluasi adaptasi hanya dari akurasi domain classifier memang menggoda, tetapi tidak cukup.
Jika batch source dan target seimbang, domain classifier yang mendekati chance dapat menunjukkan bahwa representasi yang dipelajari tidak mengekspos perbedaan domain yang mudah dideteksi. Namun, ada penjelasan lain: domain classifier mungkin terlalu lemah, optimisasi mungkin gagal, atau feature extractor mungkin menghapus informasi yang berguna untuk domain recognition sekaligus tugas utama.
Objective sebenarnya adalah performa tugas pada target. Ketika labeled target validation data tersedia, gunakan data tersebut untuk model selection dan evaluasi. Pisahkan dari contoh target tanpa label yang dipakai untuk adaptasi jika Anda ingin estimasi generalization yang jujur.
Diagnostic yang berguna mencakup:
- performa tugas source, untuk mendeteksi kerusakan pada tugas awal;
- performa tugas target pada labeled holdout, ketika label tersedia;
- perilaku domain classifier, sebagai diagnostic representasi dan bukan kriteria keberhasilan akhir;
- hasil per kelas pada target, karena aggregate accuracy dapat menyembunyikan regresi spesifik kelas.
Jika target label benar-benar tidak tersedia selama development, adaptasi tetap dapat dilatih, tetapi pemilihan hyperparameter menjadi lebih sulit. Skor domain confusion yang meyakinkan tidak dapat menggantikan task label selamanya.
Metode ini bergantung pada representasi yang dapat ditransfer
Domain-adversarial training paling masuk akal ketika domain source dan target berbeda pada nuisance factor tetapi berbagi struktur yang relevan bagi tugas.
Dalam contoh gudang, artinya retakan dan penyok memiliki makna serupa di kedua lokasi, sementara karakteristik kamera dan background berbeda. Feature extractor kemudian dapat memperoleh manfaat dari menekan bukti yang spesifik untuk gudang.
Asumsi ini dapat gagal ketika identitas domain terjalin dengan tugas. Bayangkan satu kamera hanya digunakan untuk produk rapuh dan produk rapuh memiliki distribusi kerusakan berbeda. Memaksa representasi menghapus setiap petunjuk domain dapat sekaligus menghapus informasi yang secara sah membantu memprediksi kerusakan.
Kasus sulit lain muncul ketika hubungan antara fitur dan label berubah antar-domain. Jika sebuah pola input berarti damaged di source tetapi intact di target, sekadar menyelaraskan marginal feature distribution tidak dapat menyelesaikan label yang bertentangan.
Ini adalah batas umum unsupervised adaptation: contoh target tanpa label mengungkap perbedaan distribusi input, bukan aturan pelabelan target yang benar.
Hindari menyelaraskan kelompok yang salah
Global domain confusion dapat menyembunyikan ketidakcocokan di tingkat kelas.
Misalkan data source sebagian besar berisi produk utuh, sedangkan data target sebagian besar berisi produk rusak. Domain classifier dapat membedakan kedua dataset sebagian karena proporsi kelasnya berbeda. Jika feature extractor dipaksa menghilangkan perbedaan tersebut, ia dapat menggeser representasi rusak dan utuh agar lebih dekat meskipun perbedaannya relevan bagi tugas.
Sebelum adaptasi, periksa apa yang berubah:
input appearance changed? potentially suitable
class proportions changed? treat with care
label definitions changed? fix the labeling mismatch first
new target-only classes? ordinary closed-set adaptation is a poor fitDomain-adversarial training tidak mengidentifikasi kasus-kasus ini secara otomatis. Domain label hanya mengatakan dari mana sebuah contoh berasal.
Atur kekuatan adversarial sebagai trade-off
Koefisien lambda menentukan seberapa kuat domain confusion bersaing dengan task learning.
Jika terlalu kecil, sinyal domain mungkin hampir tidak berpengaruh. Jika terlalu besar, extractor dapat memprioritaskan membingungkan domain classifier dengan mengorbankan fitur yang berguna bagi tugas. Skala yang sesuai juga bergantung pada loss reduction, arsitektur, perilaku optimizer, dan tingkat kesulitan relatif kedua classifier.
Beberapa implementasi mengubah kekuatan adversarial selama training alih-alih langsung menerapkan tekanan penuh. Hal ini dapat berguna ketika fitur awal belum stabil, tetapi merupakan pilihan training, bukan jaminan adaptasi yang lebih baik.
Perlakukan lambda sebagai parameter model selection. Bandingkan dengan baseline tanpa adaptasi dan evaluasi pada data tugas target kapan pun validation set yang sah tersedia.
Kesalahan umum
Hanya menggunakan contoh source untuk domain loss. Domain classifier membutuhkan contoh dari kedua domain. Jika tidak, ia tidak memiliki masalah source-versus-target yang bermakna untuk dipelajari.
Membalik task gradient juga. Perubahan tanda adversarial hanya berada pada jalur dari domain loss menuju feature extractor. Task classifier dan feature extractor harus tetap bekerja sama pada objective prediksi utama.
Mencoba membuat domain classifier buruk secara langsung. Domain classifier sendiri harus meminimalkan classification loss. Ia harus tetap menjadi adversary yang mampu; feature extractor-lah yang menerima gradient terbalik.
Menganggap chance domain accuracy sebagai bukti keberhasilan. Domain classifier yang lemah atau kurang terlatih juga dapat memiliki performa setara chance. Periksa performa tugas dan perilaku optimisasi.
Menganggap semua distribution shift cocok. Domain adaptation bukan perbaikan untuk perubahan semantik label, kelas target yang hilang, label shift berat, atau concept drift sembarang.
Menggunakan target test set untuk tuning berulang. Input target tanpa label dapat menjadi bagian dari protokol adaptasi, tetapi target label yang berulang kali dipakai untuk keputusan hyperparameter tidak lagi menyediakan evaluasi akhir yang belum tersentuh.
Kapan gradient reversal merupakan pilihan yang masuk akal
Pertimbangkan domain-adversarial training ketika Anda memiliki data source berlabel, banyak data target tanpa label, tugas prediksi yang sama, dan bukti bahwa karakteristik input spesifik domain mengganggu transfer. Metode ini terutama menarik ketika Anda ingin objective adaptasi dilatih bersama neural feature extractor alih-alih membangun tahap penyelarasan representasi yang terpisah.
Gunakan pendekatan yang lebih sederhana ketika kesenjangan target kecil atau sejumlah kecil labeled target set dapat diperoleh dengan biaya wajar. Fine-tuning pada target label yang representatif dapat memberi sinyal pembelajaran lebih langsung karena mengoptimalkan tugas yang benar-benar Anda pedulikan. Data normalization atau augmentation juga mungkin cukup ketika shift memiliki penyebab mekanis yang diketahui.
Jika proporsi kelas atau semantik label berubah, diagnosis perubahan tersebut secara eksplisit sebelum menambahkan adversarial objective. Membuat domain sulit dibedakan hanya berguna ketika informasi yang dihapus benar-benar merupakan nuisance information.
Kesimpulan
Gradient reversal layer itu sederhana: ia membiarkan fitur tidak berubah pada forward pass dan mengalikan backward domain gradient dengan faktor negatif. Efeknya lebih menarik. Domain classifier belajar mengekspos perbedaan source-target sementara feature extractor mempelajari representasi yang menolak diskriminasi tersebut dan tetap mendukung tugas utama.
Pertanyaan praktisnya bukan apakah kedua domain dapat dibuat bingung. Pertanyaannya adalah apakah menghapus informasi spesifik domain mempertahankan hubungan yang dibutuhkan untuk prediksi. Pastikan asumsi itu berlaku, pisahkan task gradient dan domain gradient secara konseptual, bandingkan dengan baseline tanpa adaptasi, dan nilai keberhasilan dari performa tugas target, bukan domain confusion semata.