Lensa ML

Cara Kerja Transfer Learning

Langkah 1 dari 6: Training dari Nol Itu Mahal

Jutaan gambar, berhari-hari komputasi

Model kosong1.2MgambarGPU7 haritrainingSudah dilatih0% · Hari 0 dari 7Transfer learning melewati tahap ini

Melatih deep network dari weight acak butuh jutaan gambar berlabel, berhari-hari komputasi GPU, dan penyetelan yang teliti. Transfer learning melewati semua itu dengan memulai dari model yang sudah dilatih orang lain.

Lihat progress bar merayap melewati tujuh hari simulasi training. Angka-angka ini cocok dengan era yang menjadikan transfer learning standar: AlexNet (2012) dilatih selama lima sampai enam hari di dua GPU dengan 1,2 juta gambar ImageNet. Sebagian besar proyek sungguhan hanya punya beberapa ratus sampai beberapa ribu contoh berlabel, jauh terlalu sedikit untuk melatih deep network dari weight acak tanpa overfitting parah. Transfer learning membawa apa yang dipelajari network pada source task yang besar, sehingga target task hanya perlu mempelajari bagian yang berbeda.

Langkah 2 dari 6: Model Pretrained

Berdiri di atas pundak raksasa

Model pretrained ImageNetFeature umumFeature khusus tugastepiteksturbentukbagianobjekkelasFeature ini berlaku umum di banyak tugas visual

Model yang dilatih di ImageNet (1,2 juta gambar, 1000 kelas) mempelajari hierarki feature, dari tepi dan tekstur di layer awal sampai objek utuh di dekat output.

Arahkan kursor ke setiap layer, dari tepi sampai kelas, untuk membaca apa yang dideteksinya. Zeiler dan Fergus (2013) pertama kali menunjukkan hierarki ini pada CNN yang sudah dilatih, dengan memproyeksikan aktivasi terkuat tiap layer kembali ke ruang pixel. Layer terakhir adalah satu-satunya bagian yang selalu diganti untuk tugas baru, karena 1.000 output-nya terikat pada kelas ImageNet. Backbone pretrained yang umum antara lain ResNet-50, EfficientNet, dan Vision Transformer, dan library seperti torchvision dan timm menyediakannya beserta weight yang siap diunduh.

Langkah 3 dari 6: Memakai Ulang Feature

Layer awal mempelajari pola yang universal

Detektor TepiDangkalDiagonalHorizontalVertikalKedalaman: 1/3Detektor TeksturTengahKisiTitikGarisKedalaman: 2/3Detektor BagianDalamLingkaranPersegiLengkungKedalaman: 3/3

Layer 1 mendeteksi tepi sederhana. Layer 2 menggabungkan tepi menjadi tekstur. Layer 3 merakit tekstur menjadi bagian objek. Layer awal hampir universal, sedangkan layer yang lebih dalam makin spesifik pada kelas aslinya.

Klik Layer 1, 2, dan 3, atau biarkan tampilannya berputar, lalu bandingkan detektor di setiap kedalaman. Yosinski et al. (2014) mengukur kemampuan transfer dengan menyalin n layer pertama dari satu network ke network yang dilatih pada separuh kelas ImageNet yang lain. Layer pertama bisa ditransfer hampir sempurna, sedangkan layer yang lebih dalam makin buruk karena sudah terspesialisasi pada kelas sumber. Salinan layer tengah yang di-freeze juga kehilangan akurasi, tetapi fine-tuning memulihkannya. Network hasil transfer yang di-fine-tune bahkan melakukan generalisasi sedikit lebih baik daripada network yang dilatih dari nol.

Langkah 4 dari 6: Freeze dan Fine-Tune

Pertahankan bagian dasar, latih ulang bagian atas

Freeze layer:
4
Conv1tetapConv2tetapConv3tetapConv4tetapFC1belajarOutputbelajarFrozen: weight tidak berubahTrainable: menyesuaikan dengan datamuTransfer standar: freeze bagian dasar, latih bagian atas
Frozen layer
4 / 6
Trainable layer
2 / 6
Layer diperbarui
33%

Frozen layer mempertahankan weight pretrained-nya dan tidak mendapat update dari gradient. Trainable layer menyesuaikan diri dengan tugas baru. Slider menentukan batasnya: freeze lebih banyak layer untuk dataset kecil, lebih sedikit untuk dataset besar.

Geser Freeze layer dari 0 sampai 5 dan lihat ikon gembok bergerak naik di sepanjang network. Freeze sebuah layer berarti mengatur requires_grad = False di PyTorch atau trainable = False di Keras, sehingga optimizer melewatinya. Layer yang di-freeze juga tidak perlu menyimpan gradient, jadi memori lebih hemat. Resep yang umum melatih head baru lebih dulu, lalu melakukan unfreeze pada lebih banyak layer dengan learning rate yang sering kali sepuluh kali lebih kecil. Batch normalization perlu perhatian: menjaga running statistics-nya tetap selama fine-tuning biasanya lebih baik pada dataset kecil.

Langkah 5 dari 6: Dataset Kecilmu Sudah Cukup

Fine-tuning butuh data jauh lebih sedikit

Data yang dibutuhkan1,000,000Dari nol1,000Fine-tuned1000× lebih sedikitKecepatan konvergensiEpochAkurasi0%50%95%92%Dari nolFine-tunedEpoch: 0/50

Fine-tuning dimulai dari feature yang sudah bagus, jadi konvergensinya jauh lebih cepat. Dengan 1.000 gambar, akurasinya melewati 90% dalam sekitar 15 epoch, sementara model dari nol yang dilatih dengan 1.000.000 gambar masih terus naik.

Lihat kedua kurva berlomba selama 50 epoch. Model fine-tuned mulai di dekat 60% sebelum ada training apa pun pada tugas baru, karena feature-nya sudah bisa memisahkan banyak kelas. Model dari nol naik perlahan dan hanya mencapai sekitar 80% pada epoch 50. Kebutuhan data berbeda-beda menurut tugas, tetapi beberapa ratus gambar berlabel per kelas sering kali cukup kalau gambar barunya mirip dengan data pretraining. Data augmentation, seperti flip dan crop acak, membuat dataset kecil lebih berguna dan cocok dipasangkan dengan fine-tuning.

Langkah 6 dari 6: Kapan Memakai Transfer Learning

Panduan praktis memilih strategi transfer learning

Ukuran dataset →Kemiripan domain →KecilBesarTinggiRendahFine-Tune AtasData sedikit, domain miripFine-Tune SemuaData banyak, domain miripFreeze SemuaData sedikit, domain berbedaLatih dari NolData banyak, domain berbeda
Arahkan kursor ke kuadran untuk melihat strategi yang disarankan

Strategi yang tepat bergantung pada dua faktor: ukuran dataset dan seberapa dekat tugasnya dengan domain pretraining. Kecil + mirip? Fine-tune bagian atas. Besar + berbeda? Weight pretrained paling tidak berpengaruh.

Arahkan kursor ke setiap kuadran pada grafik ukuran dataset dan kemiripan domain untuk membaca strateginya. Kemiripan domain mencakup input dan juga label. Hasil pindaian medis dan citra satelit berbeda dari foto ImageNet dalam warna, tekstur, dan skala, jadi lebih banyak layer yang perlu dilatih ulang. Raghu et al. (2019) menemukan bahwa pretraining ImageNet hanya sedikit menambah akurasi pada tugas pencitraan medis, walaupun tetap mempercepat konvergensi. Untuk teks, grafik yang sama berlaku dengan model bahasa pretrained seperti BERT sebagai pengganti CNN.

Apa itu transfer learning?

Transfer learning adalah teknik yang memakai model hasil training pada satu tugas sebagai titik awal untuk tugas lain yang berbeda tetapi masih berkaitan. Alih-alih mulai dari weight acak, model baru mulai dari weight yang sudah menyimpan feature yang berguna, seperti tepi dan bentuk untuk gambar, atau tata bahasa dan makna kata untuk teks. Setelah itu, sebagian network, atau seluruhnya dengan learning rate kecil, dilatih pada data baru.

Transfer learning adalah cara baku membangun model visi dan bahasa ketika data berlabel terbatas. Classifier untuk lesi kulit, penyakit tanaman, atau cacat pabrik biasanya dimulai dari network yang di-pretrain di ImageNet. Classifier teks, chatbot, dan asisten kode dimulai dari model bahasa pretrained seperti BERT atau GPT. Teknik ini memangkas kebutuhan data dari jutaan contoh menjadi ribuan atau kurang, dan waktu training dari hitungan hari menjadi hitungan jam.

Ide utama

  • Transfer learning memulai tugas baru dari model yang sudah dilatih pada dataset besar yang berkaitan.
  • Layer awal CNN mempelajari feature umum seperti tepi dan tekstur, sedangkan layer berikutnya menjadi khusus untuk tugasnya.
  • Freezing menjaga weight sebuah layer tetap, sedangkan fine-tuning memperbaruinya dengan learning rate kecil.
  • Dataset yang lebih kecil butuh lebih banyak layer yang di-freeze, sedangkan dataset yang lebih besar memungkinkan fine-tuning pada lebih banyak bagian network.
  • Fine-tuning mencapai akurasi yang baik dengan data berlabel dan komputasi yang jauh lebih sedikit daripada training dari nol.
  • Model bahasa pretrained seperti BERT dan GPT menerapkan ide yang sama pada teks.

Ulasan singkat tentang topik ini

Pertanyaan umum

Apa bedanya transfer learning dan fine-tuning?

Transfer learning adalah ide umum memakai ulang model yang dilatih pada satu tugas untuk tugas lain. Fine-tuning adalah salah satu caranya: melanjutkan training sebagian atau seluruh weight pretrained pada data baru. Cara umum lainnya adalah feature extraction, yaitu network pretrained tetap di-freeze dan hanya classifier baru di atasnya yang dilatih.

Apakah transfer learning bisa dipakai untuk NLP?

Bisa, dan sekarang inilah pendekatan standarnya. ULMFiT (2018) menunjukkan bahwa fine-tuning model bahasa pretrained mengalahkan model khusus tugas pada klasifikasi teks, lalu BERT dan GPT membuat pola ini berlaku luas. Hampir semua sistem NLP modern dimulai dari Transformer pretrained.

Apa itu negative transfer?

Negative transfer terjadi ketika memulai dari weight pretrained memberi hasil yang lebih buruk daripada training dari nol. Ini bisa terjadi kalau domain sumber dan target sangat berbeda, atau kalau learning rate yang terlalu agresif merusak feature pretrained di awal fine-tuning. Cara mendeteksinya adalah membandingkan dengan baseline dari nol pada validation set.

Apa itu domain adaptation?

Domain adaptation adalah bentuk transfer learning yang tugasnya tetap sama tetapi distribusi input-nya berubah, misalnya model sentimen yang dilatih pada ulasan film lalu diterapkan pada ulasan produk. Metodenya beragam, dari fine-tuning pada sampel kecil berlabel dari domain baru sampai training pada data target tanpa label agar feature dari kedua domain terlihat serupa.

Penjelasan terkait

Referensi

  1. Yosinski et al. (2014), "How transferable are features in deep neural networks?"
  2. Zeiler & Fergus (2013), "Visualizing and Understanding Convolutional Networks"
  3. Howard & Ruder (2018), "Universal Language Model Fine-tuning for Text Classification" (ULMFiT)
  4. Raghu et al. (2019), "Transfusion: Understanding Transfer Learning for Medical Imaging"
  5. Stanford CS231n, "Transfer Learning" course notes

Terakhir diperbarui