Transfer Learning: Solusi Deep Learning dengan Data Sedikit

Salah satu permasalahan yang sering dialami ketika menggunakan deep learning adalah jumlah data yang sedikit. Di luar sana, sebenernya ada banyak solusi yang ditawarkan untuk mengatasi masalah ini. Nah, di sini kita akan bahas salah satunya, yakni Transfer Learning. Artikel ini akan berfokus pada teori di baliknya, sedangkan untuk implementasi akan ada di artikel selanjutnya.

Model Deep Learning

Sebelum masuk lebih dalam ke transfer learning, saya ingin mengingatkan sedikit tentang bagaimana konsep deep learning (secara umum machine learning) bekerja.

Suatu agen cerdas yang menggunakan deep learning bekerja menggunakan data. Kita berikan data yang banyak untuk dipelajari, kita lakukan proses training/belajar, lalu kita akan mendapat model/agen yang cerdas.

Lalu muncul pertanyaan..

Apakah harus seperti itu? Proses pencarian data itu rumit, proses training itu makan waktu. kenapa kita tidak bisa download saja model cerdas yang ada di internet lalu kita gunakan untuk masalah kita? tidak perlu train, dan tidak perlu ada data, beres kan?

Transfer Learning

Apa itu transfer learning? Ide utama dari transfer learning ini kira-kira seperti ini,

Kita gunakan model yang sudah dicerdaskan orang lain untuk permasalahan kita yang bahkan bisa jadi berbeda

Sebagai contoh, kita mau membuat sistem untuk menghitung kendaraan beserta jenisnya menggunakan kamera CCTV dan deep learning. Jika jenis kendaraannya yang ingin dideteksi cukup umum, semisal “mobil” atau “truk”, pertanyaan sebelumnya akan valid. Kita bisa jadi cukup browsing-browsing, dan kita akan menemukan orang yang sudah membuat model deep learningnya, kita tinggal download, pakai, dan beres! Kita telah memiliki model cerdas deep learning yang mampu mendeteksi mobil atau motor.

Tapi kenyataannya bisa jadi permasalahan yang kita miliki sedikit berbeda. Sedikit saja perbedaan, maka kita sudah tidak bisa lagi pakai model orang lain ini. Contohnya, kita tidak hanya ingin mendeteksi “mobil” dan “truk” tapi juga “becak”. Permasalahannya, “becak” itu bukan kendaraan yang di mana-mana ada. Bisa jadi model yang kita download tadi belum bisa mendeteksi becak karena si pembuatnya bahkan tidak tahu apa itu “becak” .-.

Di sinilah, kita butuh transfer learning. Kembali ke ide utama di atas, dengan transfer learning, kita bisa memanfaatkan model orang lain yang sudah dilatih, untuk permasalahan kita yang berbeda.

Jadi ada 3 poin yang kita bahas di sini:

  • Model yang sudah dicerdaskan
  • Cara menggunakan model tersebut
  • Permasalahan yang (bisa jadi) berbeda

Oh ya, sebelum masuk lebih dalam, konsep Transfer Learning ini berlaku tidak hanya untuk arsitektur CNN saja. Tapi pada tutorial ini saya akan banyak mencontohkan menggunakan CNN karena lebih mudah dibayangkan.

Model yang sudah cerdas

Pada transfer learning, kita membutuhkan model yang sudah terlatih, entah itu dilatih oleh orang lain, atau kita melatihnya terlebih dahulu. Model yang sudah terlatih ini disebut dengan Pre-Trained Model. Pre-trained model biasanya sudah dilatih pada dataset yang besar dan merupakan dataset benchmark, sehingga kualitas pre-trained model sudah sangat baik.

Saat ini sudah banyak pre-trained model yang disediakan untuk beragam kebutuhan. Misalnya pada halaman ini PyTorch menunjukkan pre-trained model yang tersedia secara resmi untuk image classification. Pre-trained model tersebut telah dilatih menggunakan dataset ImageNet. Pada halaman ini Tensorflow juga menunjukkan model-model yang tersedia untuk object detection. Kumpulan model-model ini juga biasa disebut dengan Model Zoo.

Alternatif lain selain menggunakan model resmi dari framework, kita juga bisa browsing-browsing dan pakai pre-trained model yang disediakan peneliti-peneliti lain, misalnya model SiameseFC ini. Atau kita juga bisa saja membuat pre-trained model sendiri. Ini kasus biasanya kalau kita mau membuat feature extractor (yang akan dijelaskan setelah ini) untuk suatu classifier lain.

Cara menggunakan

Diambil dari paper How transferable are features in deep neural networks? di baris keempat tampak model yang sudah dilatih sebagian dengan data A (Hijau) digunakan untuk menyelesaikan permasalahan pada data B (Ungu)

Secara umum ada dua cara menggunakan model pre-trained untuk transfer learning. Kedua cara ini pada ilustrasi diatas ditunjukkan dengan simbol gembok terbuka atau tertutup:

Fixed Feature Extractor

Pada metode ini kita menggunakan pre-trained model yang telah dilatih tanpa melatih ulang model tersebut, atau istilahnya kita membekukan (freeze) bobot pre-trained model ini. Cara pemakaian yang umum untuk freezed model adalah sebagai feature extractor.

Sebagai contoh, kita download pre-trained model resnet18 yang sudah dilatih ke data ImageNet. Arsitektur Resnet18 sama seperti arsitektur CNN pada umumnya memiliki bagian “konvolusi” dan memiliki bagian “klasifikasi”. Karena arsitektur Resnet ini sudah dilatih maka semua bobot-bobotnya sudah memiliki nilai yang sesuai untuk klasifikasi citra ImageNet. Jika kita buang layer terakhirnya, ketika kita inputkan citra, maka model ini akan mengoutputkan suatu vektor nilai dari proses konvolusi. Vektor nilai ini kita anggap sebagai fitur citra yang diekstrak menggunakan “pengetahuan” dari citra ImageNet (transfer).

Fitur vektor yang dihasilkan ini bisa dimanfaatkan untuk beragam kebutuhan. Misal karena vektor itu dianggap fitur, jadinya bisa masuk ke classifier lain, lalu classifier tersebut di train (tanpa melatih pre-trained modelnya ya, kan sedang di freeze). Bisa juga digunakan untuk cek similarity atau retrieval.

Fine Tuning

Pada metode ini kita menggunakan pre-trained model yang telah dilatih namun tidak kita freeze. Jadi meskipun model sudah dilatih, nantinya pre-trained model ini akan dilatih lagi untuk kebutuhan yang baru.

Sebagai contoh, kita ingin melatih model untuk mendeteksi jenis-jenis kendaraan di Indonesia, “motor”, “andong”, dan “becak”. Anggap kita memiliki pre-trained model yang sudah bisa membedakan “truk” dan “mobil”. Kita bisa melatih ulang model ini menggunakan data citra “motor”, “andong”, dan “becak” dengan bobot pre-trained model tadi sebagai bobot awal pelatihan. Proses melatih model dengan nilai awal bobot adalah berasal dari pre-trained model disebut dengan Fine Tuning.

Loh kok bisa model yang awalnya digunakan untuk mendeteksi “mobil” dan “truk” digunakan untuk mendeteksi “motor”, “andong”, dan “becak”? Bisa loh :D, karena pre-trained model yang mampu mendeteksi “mobil” dan “truk”, setidaknya memiliki beberapa “pengetahuan” yang bisa dimanfaatkan untuk mendeteksi objek lain. Misalnya, model tersebut sudah paham mana yang objek mana yang latar belakang; mana yang pohon mana yang bukan; dsb. Kita melakukan transfer pengetahuan tersebut untuk kebutuhan baru. Karenanya kita masih perlu melatih lagi (walau kebanyakan proses pelatihan jauh lebih cepat karena model sudah cerdas).

Selain dua metode di atas, ada juga yang pertengahan yang seakan mengkombinasikan keduanya. Alias, sebagian layer di-freeze, sebagian layer tidak di-freeze. Biasanya layer yang di-freeze adalah beberapa layer yang di depan (yang dekat dengan input layer dan menyimpan informasi yang low-level) sedangkan layer yang di belakang, yang menyimpan informasi yang lebih high-level, tidak di-freeze untuk di-fine tune. Ini biasanya digunakan ketika data yang digunakan untuk melatih pre-trained model dirasa sedikit berbeda dengan data yang baru. Selain itu ini juga kadang dilakukan untuk menghindari fine tuning semua layer. Karena melakukan fine tuning secara tidak hati-hati di semua layer dapat “membodohkan” model yang sudah cerdas.

Permasalahan seperti apa

Berdasarkan kondisi dataset yang akan digunakan dan pre-trained model yang kita miliki, ada sedikit “aturan” yang bisa kita ikuti, kapan dan teknik seperti apa yang bisa digunakan untuk transfer learning. Saya tidak akan menjelaskan detailnya, bisa dibaca di bagian “When and how to fine-tune?” dari https://cs231n.github.io/.

Sekian untuk artikel ini, semoga bermanfaat! InsyaAllah implementasinya menyusul 🙂

About the author

Rian Adam

Lecturer at Universitas Islam Indonesia; Machine Learning Enthusiast

View all posts

1 Comment

Leave a Reply