Belajar Ragam Strategi Deep Learning dengan CIFAR10 Dataset

Semester lalu di salah satu tugas kuliah Computer Vision, kita diminta untuk membuat model CNN dengan dataset CIFAR10. Awalnya ngira ini kayak MNIST dataset yang satset train nggak sampai 10 epoch dapet akurasi >90%. Ternyata dataset ini lebih kompleks. Menariknya, dari satu tugas sederhana ini, Pak Dosen mengenalkan para mahasiswa tentang beragam strategi di deep learning.

Di tutorial ini kita akan coba membuat model machine learning untuk dataset CIFAR10. Kita akan buat modelnya dari scratch menggunakan PyTorch dan tidak menggunakan pre-trained model agar kita bisa lebih dalam memahami apa yang terjadi. Kita juga akan menarget (sebagai tantangan) untuk mendapatkan akurasi >85% dalam 40 epoch.

Source code tutorial ini tersedia dalam bentuk Google Colab di sini (akan terus dilengkapi komentar dan catatan pada notebook tersebut)

Catatan: Artikel ini tidak membahas dasar-dasar deep learning menggunakan PyTorch. Bagi yang ingin tahu dasar deep learning atau dasar PyTorch bisa mengunjungi artikel terkait di blog ini:

CIFAR10 Dataset

Dataset CIFAR10 adalah dataset citra berukuran 32×32 pixel berwarna. Sesuai namanya, CIFAR10 terdiri dari 10 kelas (kucing, burung, …, kapal). Jelas dataset ini berbeda dari MNIST yang hanya hitam putih. Selain itu jika dilihat di paper-paper, rata-rata akurasi yang diperoleh untuk CIFAR10 adalah sekitar 92% (dibanding MNIST yang bisa sampai >98%). Meskipun begitu, dataset ini masih tergolong mudah dan cocok untuk buat latihan klasifikasi citra. Dataset CIFAR10 bisa didownload langsung menggunakan perintah dari PyTorch.

Sebastian Raschka, machine learning researcher yang bukunya cukup populer, juga berpendapat CIFAR10 termasuk salah satu dataset yang cocok untuk latihan.
Continue reading

HuggingFace: Ekosistem Open Source untuk Machine Learning

Apa itu HuggingFace 🤗

Bagi teman-teman yang aktif ngikutin perkembangan Machine Learning, khususnya Natural Language Processing, pasti pernah dengar HuggingFace. HuggingFace (HF) ini adalah perusahaan yang awalnya berfokus pada pengembangan aplikasi-aplikasi NLP, tapi sekarang sudah menjelma menjadi suatu “Ekosistem” machine learning yang sangat besar. Saya sebut ekosistem karena HF bukan seperti perusahaan yang hanya menyediakan jasa, atau produk komersil, tapi lebih dari itu!

HF telah berkontribusi banyak dalam perkembangan Machine Learning saat ini, tidak hanya NLP tapi Machine Learning secara umum. Dengan menyediakan Course; platform untuk saling berbagi model, dataset, atau demo; menyediakan library untuk NLP; membangun komunitas yang aktif; yang semua itu gratis!! (HF juga menulis buku tentang NLP di sini, tapi kalau ini berbayar 😁)

Beberapa waktu lalu ikut kegiatan HF yang mau buat platform untuk edukasi di kelas-kelas

Di artikel ini saya akan coba cerita sedikit gambaran umum tentang layanan-layanan HF yang teman-teman bisa gunakan.

HuggingFace Model Hub

Saya ingat beberapa tahun lalu pernah ada yang tanya, baik langsung ke saya atau via online, apakah ada layanan di mana orang-orang bisa upload model machine learning untuk digunakan orang lain, jadi orang lain tidak perlu melakukan train, test, dan sebagainya. HuggingFace Model menjawab itu! Di sini orang-orang bisa mengupload model hasil pelatihan mereka, lalu orang lain bisa tinggal download dan pakai model tersebut.

HuggingFace Model sangat terorganisir, kalian bisa sort berdasarkan task kebutuhan kalian, library yang digunakan, pembuatnya, atau bahasa (untuk NLP). Model-model tersebut nantinya bisa digunakan sebagai pre-trained model yang lalu ditrain ulang (finetuning) atau digunakan apa adanya. Beberapa waktu lalu istri saya pernah menulis tutorial membuat chatbot menggunakan salah satu model yang ada di HF ini.

Menggunakan model-model tersebut kerasa lebih mudah ketimbang harus cari-cari model di internet, karena sudah terintegrasi dengan library HF. Selain itu penjelasan pemakaian juga biasanya didokumentasikan dengan baik pada Model Card (“Readme” nya model di HF).

Oh ya, Jika tidak mau bersentuhan dengan modelnya sama sekali, kita juga bisa menggunakan HF inference API (berbayar) yang memungkinkan kita untuk memanfaatkan model-model secara langsung melalui API. Jadi kita bahkan bisa memanfaatkan model-model machine learning tanpa perlu paham Python!

Continue reading
Carcassonne

Reinforcement Learning, Belajar dari Interaksi

Beberapa minggu ke depan saya lagi coba memperdalam lagi topik Reinforcement Learning (RL) melalui course yang sedang diadakan Hugging Face. Materi minggu pertamanya sudah rilis, dan pembawaannya sangat menarik, mudah dipahami, dan mencakup dengan baik sisi teori sampai teknis implementasi menggunakan package-package terkini. Sangat recommended untuk temen-temen yang mau belajar RL, silakan saja daftar coursenya di http://eepurl.com/h1pElX.

Artikel ini akan jadi pengantar, kombinasi rangkuman course pertama Hugging Face dan materi-materi RL yang selama ini saya pahami sebelum ikut course ini.

Apa itu Reinforcement Learning?

Kita mulai dari Machine Learning: Area ilmu yang mempelajari bagaimana mesin (komputer) bisa belajar dan melakukan aksi seperti manusia menggunakan sekumpulan data (learning). Area ilmu ini cukup luas, ada banyak sub-area di dalamnya dan itupun masih ada ratusan algoritma untuk tiap sub-area itu.

Sub-area yang cukup populer adalah Supervised Learning: komputer belajar dari sekumpulan data yang sudah benar (ground truth), lalu komputer akan menebak output dari data sejenis yang belum pernah dilihat. Misalnya, diberikan sekumpulan contoh foto apel dan nanas, setelah belajar, harapannya di masa depan jika dia melihat foto suatu buah, komputer bisa tahu mana yang apel dan mana yang nanas. Algoritma yang bisa digunakan di sub-area ini: KNN, SVM, Neural Network, dll. (Tutorial klasifikasi citra)

Supervised Learning Illustration

Reinforcement Learning (RL) juga sub-area di machine learning. Pada Reinforcement Learning, komputer belajar untuk mencapai tujuan tertentu dengan cara berinteraksi dengan lingkungannya. Contohnya, kita ingin membuat komputer yang mampu memenangkan game catur, maka kita akan latih komputer dengan cara membuat dia bermain (berinteraksi) dengan game catur berkali-kali hingga dia tahu cara untuk memenangkan suatu permainan. Algoritma yang bisa digunakan di sub-area ini: DQN, PPO, A2C, dll.

RL belajar dari interaksi / percobaan di lingkungannya

Kata kunci yang membedakan RL dengan area machine learning lain adalah: Interaksi dan Tujuan. Dalam permainan catur, tidak bisa kita tentukan satu contoh langkah yang benar (Ground truth) pada suatu kondisi seperti pada Supervised Learning. Semua kembali ke tujuan akhir, apapun caranya yang penting kita bisa menang.

Contoh lain RL adalah self-driving car atau mobil yang bisa mengantar kita sampai ke lokasi secara otomatis. Tujuan dari RL di sini adalah untuk menggerakkan mobil mencapai lokasi tertentu. Ketika dilatih, model RL akan mencoba berinteraksi (mencoba-coba gas, rem, setir) di simulator (bukan pakai mobil beneran karena bisa bahaya). Dan sama seperti contoh catur, tidak ada solusi “benar” dalam berkendara, apapun caranya yang penting bisa sampai di tujuan (tentunya dengan beberapa batasan seperti waktu, bahan bakar, keselamatan penumpang, dll)

Saya lupa dari mana sumbernya, definisi lain yang menarik tentang RL: Reinforcement Learning adalah “delayed” Supervised laerning. Kalau di Supervised learning, ketika model dikasih data, maka jawaban model bisa dinilai benar salah secara langsung. Tapi di mayoritas kasus RL, ketika model dikasih data maka jawaban (aksi yang diberikan) model tidak bisa langsung dinilai benar salah. Penilaian benar atau salah serangkaian aksinya baru bisa dilakukan di akhir interaksi (misal dalam catur berakhir menang atau kalah)

Continue reading

Catat Eksperimen Machine Learning dengan Weights and Biases

Setelah banyak eksperimen di bidang machine learning, saya masih merasa mencatat keluaran eksperimen itu bagian yang tidak mudah. Rasanya hampir semua eksperimen machine learning yang saya lakukan, saya catat dengan cara dan gaya yang berubah-ubah. Ada yang saya input manual ke excel, atau log ke csv, atau sekadar di notepad. Belum lagi ketika prosesnya, eksperimen kadang harus berubah, gagal, tidak sesuai harpaan… (>,<) dan akhirnya bikin mood mencatat rapi itu makin hilang di tengah-tengah.

Alhamdulillah akhir 2021 lalu nemu tools menarik untuk mencatat hasil eksperimen dengan rapi dan lengkap dan mudah, yakni dengan Weights and Biases.

Weights and Biases logo

Weights and Biases (atau kadang ditulis W&B atau kadang juga wandb) adalah suatu tools yang memudahkan pencatatan eksperimen machine learning. Yang menarik dari weights and biases, sesuai dengan taglinenya “Log (Almost) Anything”, dia mampu mencatat hampir semua hal yang terjadi pada saat eksperimen dengan mudah. Beberapa data yang saya ingat bisa dicatat saat setiap run adalah:

  • Nilai loss atau akurasi atau nilai-nilai lain yang berubah-ubah saat training
  • Pemakaian CPU/GPU
  • Media-media yang dihasilkan selama eksperimen (audio/citra/video)
  • Perubahan bobot dan bias pada model
  • Spesifikasi hardware, software, serta versi package python yang terinstall
  • Parameter-parameter model, seperti learning rate, batch size, dsb.

Semua data itu dicatat secara rapi di server saat setiap kali melakukan “run” eksperimen. Jadi ketika kita melakukan beberapa run kita juga bisa membandingkan grafik-grafik data-data tersebut, dan hal ini akan sangat bermanfaat untuk mengukur performa model atau debugging seiring berjalannya waktu.

Weights and Biases Tutorial

Weights and Biases sendiri sebenarnya bisa berjalan hampir di semua framework machine learning seperi Tensorflow, Pytorch, Scikit-learn, dll. Pada tutorial ini kita akan menggunakan kode yang kita gunakan untuk klasifikasi citra menggunakan CNN dan Pytorch.

Secara umum, ada lima langkah utama untuk melakukan pencatatan menggunakan weights and biases:

  1. wandb.login(): Untuk menghubungkan projek kita dengan akun W&B yang kita miliki. Secara default W&B membutuhkan koneksi internet untuk menyimpan hasil eksperimen ke server.
  2. wandb.init(): Digunakan untuk mendefinisikan projek apa yang sedang kita jalankan. Pada bagian ini kita juga mendefinisikan parameter apa yang akan dicatat dalam sebuah config.
  3. wandb.watch(): Digunakan untuk memperhatikan (mencatat) kondisi model dari waktu ke waktu
  4. wandb.log(): Digunakan untuk mencatat variabel-variabel lain yang dibutuhkan untuk di catat.
  5. wandb.finish(): Menandai akhir proses pencatatan, jika kita ingin memulai proses pencatatan yang lain.

Kode lengkap berupa Notebook disertai penjelasan (Bahasa Inggris) bisa diakses di sini: Pytorch Image Classification + Weights and Biases.

Pada kode tersebut tampak lima poin di atas bisa dilakukan hanya dalam 5 baris saja (masing-masing perintah satu baris). Menggunakan notebook di atas, saya coba bereksperimen dengan mengubah-ubah nilai learning rate dan banyaknya batch saat training. Hasilnya, tampilan ringkasan pencatatan di dashboard Weights and Biases untuk tutorial di atas seperti berikut:

Saya melakukan empat kali run. dengan mengubah-ubah parameter learning rate dan batch size

Nama-nama seperti “autumn-cloud-5” dan sebagainya, adalah nama yang secara otomatis diberikan W&B untuk membedakan setiap run eksperimen yang kita lakukan. Kita bisa mengubah-ubahnya semau kita jika itu dirasa memudahkan. Untuk detail setiap run bisa dilihat dengan klik setiap namanya, atau mengubah tampilan dalam bentuk tabel seperti di bawah ini:

Tersedia juga catatan dalam bentuk tabel untuk membandingkan pengaturan parameternya

W&B Sweeps

W&B juga menyediakan fitur untuk melakukan hyperparameter optimization. Dengan fitur ini, secara otomatis weights and biases akan mencari nilai-nilai untuk setiap parameter yang memberikan hasil terbaik untuk kasus kita. Hasil akhirnya, kita bisa melihat hubungan nilai parameter dengan loss yang diperoleh.

Saya ambil dari dokumentasi W&B, tutorial menyusul insyaAllah

Komunitas Weights and Biases

Yang menarik lagi tentang W&B ini bukan hanya tools yang disediakan namun juga komunitasnya. Saya bahkan lebih dulu mengikuti kegiatan-kegiatan di komunitas W&B sebelum saya mencoba toolsnya. W&B secara aktif mengadakan mini workshop, paper dan book reading group, seminar, Q&A session, dan masih banyak lagi, di mana kita bisa belajar banyak hal seputar machine learning secara umum tidak hanya seputar W&B.

Kalian bisa cek youtube channelnya untuk melihat beberapa rekaman yang tersedia, atau follow akun twitternya untuk bisa update kegiatan-kegiatan terbarunya.

Sekian, Semoga bermanfaat!

Mencari Alternatif Google Colab

Setelah lebih dari dua tahun tulisan pertama tentang Google Colab, pada artikel ini kami mau sharing pengalaman mencari alternatif google colab beberapa pekan terakhir. Apakah ada yang sebanding?

Setelah browsing artikel sejenis dan juga lihat-lihat akun twitter aktivis machine learning, akhirnya menemukan ada dua platform yang menarik untuk dicoba, Gradient dan Jarvis Labs. Perlu dicatat, kedua platform itu berbayar. Alhamdulillah karena dibantu dana penelitian, proses eksplorasi ini tidak jadi pikiran tambahan tagihan hehe.

Artikel ini akan berfokus pada alternatif berbayar Gradient dan Jarvis Labs, insyaAllah akan ada artikel lain yang akan bercerita alternatif yang juga bisa dibandingkan dalam hal sama-sama gratis.

Kenapa Tidak Google Colab?

Sebenernya, secara fitur, Google Colab sudah memiliki banyak keunggulan: terintegrasi dengan github dan drive, mudah dipakai, dan termasuk yang tadi saya sebut di awal, gratis. Fitur-fitur itu sudah sangat cukup untuk hampir kebanyakan pengguna. Tapi, beberapa pengguna yang cukup intens akan merasakan beberapa kekurangan yang membuat mereka harus mencari alternatif google colab.

Beberapa kekurangan yang mungkin dirasakan:

1. Google Colab tidak bisa menjamin jenis hardware yang kita peroleh. Bahkan ketika kita menggunakan Google Colab Pro+ yang berbayar (sementara ini belum tersedia di Indonesia), kita tidak bisa tahu tepatnya GPU apa yang akan kita peroleh atau berapa kapasitas Memory yang bisa kita gunakan maksimal.

2. Google Colab “tidak menyediakan” persistent storage, atau tempat penyimpanan permanen . Sebenarnya Colab sudah memberi fitur untuk menghubungkan google drive dengan colab, tetapi bagi pengguna yang intens codingnya dan membangun sistem yang terdiri dari banyak source code file dan data, penghubungan ini terasa tidak alami dan bisa jadi mengganggu kinerja. Apalagi kalau sampai lupa/gagal menyimpan model karena masalah ini.

3. Terbatas hanya format notebook. Meskipun ada beberapa trik yang bisa digunakan, google colab secara alami hanya menyediakan format notebook (.ipynb). Bagi yang biasa coding dengan bentuk script file (.py), atau perlu menggunakan terminal, sementara ini belum bisa dilakukan.

4. Waktu runtime yang terbatas. Jika colab kita tidak aktif dalam beberapa menit koneksi bisa diputus. Dan untuk running program dibatasi maksimal 12 jam, setelah itu akan ada jeda (kayak sesi cooling down) beberapa waktu untk kita bisa gunakan Google Colab lagi.

Alternatif Google Colab Berbayar

1. Gradient by Paperspace

Pertama kali dengar Gradient ketika mengikuti course dari Fast.ai. Saat itu mereka merekomendasikan Gradient yang menyediakan GPU dan fitur-fitur yang lebih baik dibanding Colabsecara gratis. Tapi sayangnya, di versi yang sekarang kita perlu membayar (menjadi member) untuk menggunakan Gradient. Gradient menyediakan beragam jenis pilihan CPU/GPU yang bisa digunakan, dari yang standard seperti RTX4000 sampai yang sangat bagus seperti A100.

Continue reading