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)

Elemen dalam Reinforcement Learning

Ada beberapa kata kunci ketika mempelajari RL, dua kata kunci pertama yang perlu kita tahu adalah Agent dan Environment. Agent adalah Subjek AI yang kita latih untuk bisa berinteraksi pada environment dan mencapai suatu goal/tujuan. Sedangkan environment adalah “dunia” di mana agen bisa “melihat” dan berinteraksi. Agen akan menggunakan environemtn untuk belajar dengan cara melihat apa yang terjadi ketika dia berinteraksi.

Contoh:

  • RL untuk catur -> environmentnya adalah game catur
  • RL untuk self driving car -> environmentnya adalah simulasi kondisi jalanan dan mobil

Dalam implementasinya, ketika kita membuat proyek RL seringnya kita juga harus membuat environmentnya. Untuk kasus umum seperti untuk game, sudah ada banyak environment yang tersedia secara umum, seperti OpenAI Gym dan PettingZoo. Dulu saya dan tim di UII pernah buat Gapoera API untuk board game Indonesia. Tapi untuk kasus yang spesifik, kita harus buat dulu environmentnya, ini yang kadang bikin kesan RL lebih rumit.

S A R S

Semua kasus pada RL bisa dimodelkan sebagai (S,A,R,S’) singkatan dari (State, Action, Reward, State’). Istilah-istilah ini bisa kita perhatikan muncul pada ilustrasi di atas. Penting untuk kita mengurai suatu kasus yang akan dikerjakan dalam bentuk (S,A,R,S’):

  • State: Informasi-informasi yang tersedia di environment pada suatu waktu. Contoh: posisi bidak catur, posisi orang di jalan, kecepatan mobil saat ini, dll. Beberapa orang juga pakai istilah Observation untuk state yang dapat dilihat agent. Contoh: dalam permainan kartu, agent tidak bisa lihat kartu yang dimiliki lawan. State pada permainan kartu adalah sebaran kartu di tangan kita dan lawan, sedangkan obersvation adalah apa yang bisa dilihat agent, yakni hanya kartu di tangannya.
  • Action: Apa yang bisa dilakukan agent terhadap environment. Contoh: menggerakkan pion, menginjak rem sedalam sekian, dll. Suatu Aksi bisa berupa pilihan (diskrit, misal gerakkan suatu pion) bisa juga suatu nilai (kontinyu, misal belokkan mobil 23.5o ke kanan)
  • Reward: Apa yang diperoleh agent dari environment untuk mengukur baik buruknya tindakan. Kadang setiap aksi langsung memberikan efek baik buruknya tapi bisa jadi reward hanya diperoleh di akhir. Contoh: Pada game, reward hanya diperoleh di akhir, menang atau kalah. Sedangkan pada self-driving car, reward bisa diperoleh di tengah proses, misalnya ketika agent terlalu banyak menginjak rem maka waktu perjalanan akan hilang sekian detik yang berarti agent mendapat reward yang buruk.
  • State’: Informasi-informasi yang tersedia di environment setelah suatu aksi dilakukan (disebut juga next state). Ketika agent melakukan suatu aksi, agent akan mengubah beberapa informasi pada environment. Posisi bidak catur akan berubah setiap agent melakukan aksi.
  • Policy: Algoritma yang menentukan aksi apa yang seharusnya dipilih dengan diketahui state saat ini. Ini yang akan menjadi fokus utama yang akan kita pelajari.

Elemen-elemen tadi tidak langsung muncul ketika kita mengurai masalah. Kadang kita perlu mendefinisikan dengan baik dan hati-hati. Sebagai contoh, dalam menentukan reward, kita harus menentukan secara hati-hati. Apakah berjalan lambat pada self-driving car itu buruk? apakah memakan pion lawan dalam catur itu baik?

Dengan mengetahui elemen-elemen tadi, maka bisa kita rumuskan:

Pada Reinforcement Learning kita diminta untuk membuat suatu Policy agar ketika agent diberikan suatu State, agent dapat mengambil Action yang mengantarkan untuk mendapat kumulatif Reward* sebesar-besarnya

*Kumulatif reward = total reward yang diperoleh dari awal hingga akhir.

Algoritma-algoritma Reinforcement Learning

Ada banyak sekali pilihan algoritma pada RL, dan karena keterbatasan panjang artikel, saya belum bisa bahas di sini. Tapi jika teman-teman mau memulai, dua algoritma yang saya sarankan untuk pelajari adalah:

  • Q-Learning / Deep Q-Learning: Pada Q-Learning nanti teman-teman akan belajar bahwa pada kasus RL yang sederhana kita bisa membuat agent cerdas hanya dengan bermodal sebuah tabel. Badanya Q-Learning dengan Deep Q-Learning adalah pada Deep Q-Learning, kita akan menggunakan Neural Network untuk menggantikan tabel yang akan sangat besar.
  • REINFORCE: kalau teman-teman sudah paham Q-Learning dan Deep Q-Learning, saya sarankan untuk menengok algoritma ini. Ini akan sedikit membuka pandangan ada pendekatan yang berbeda untuk membuat agent (dua pandangan ini dikenal policy based vs value based)

Bagaimana Codingnya?

Untuk memahami langkah perlangkah dengan baik, kita bisa menulis kodenya dari awal. Bagi pengguna PyTorch, pytorch punya tutorial resmi yang cukup bagus di sini. Kalau mau menggunakan library bisa coba Stable Baseline 3, walaupun ini library tapi jangan kira cuma klik-klik sedikit, karena library ini nggak se-straight forward itu (mungkin karena RL agak kompleks). InsyaAllah saya akan coba buatkan tutorial untuk menggunakan Stable Baseline ini.

Sekian dulu untuk pengantarnya reinforcement learningnya, semoga bermanfaat!. Niatnya nulis ini selesai di minggu pertama Huggingface Course, ternyata sekarang udah jalan 3 minggu tulisannya baru bisa rilis 🙂 bagi yang mau belajar RL dari course Hugging Face, masih jalan di https://github.com/huggingface/deep-rl-class

About the author

Rian Adam

Student at University of Central Florida; Lecturer at Universitas Islam Indonesia; Machine Learning Enthusiast;

View all posts

Leave a Reply