Istilah penting di Neural Network dan Deep Learning (bagian 2)

Artikel ini adalah kelanjutan dari artikel sebelumnya tentang istilah-istilah di neural network ataupun deep learning bagian kedua. Sama seperti artikel sebelumnya, artikel ini bertujuan untuk menjelaskan istilah-istilah penting di neural network.

Error vs Akurasi

Error dan akurasi adalah 2 metode pengukuran performa model machine learning. Model machine learning pada umumnya akan menggunakan fungsi error (atau sering disebut juga loss/cost function) sebagai acuan untuk memperbaiki modelnya (a.k.a belajar). Hampir kebanyakan model machine learning termasuk deep learning menggunakan algoritma optimasi untuk meminimalkan error yang dihasilkan. Artinya, semakin kecil error yang dihasilkan akan semakin baik.

Pada proses training yang benar, grafik eror akan turun dan grafik akurasi akan naik

Sedangkan akurasi adalah pengukuran yang lebih “mudah” dipahami manusia. Biasanya akurasi tidak digunakan untuk acuan model belajar melainkan hanya untuk membantu manusia memahami sebaik apa model yang telah dihasilkan. Misalnya jika diketahui ada model yang mampu mendeteksi suatu penyakit dengan akurasi 90%, maka kita langsung bisa paham artinya dalam 100 kali percobaan ada kemungkinan sekitar 10 percobaan akan gagal. Hal tersebut lebih mudah dipahami oleh manusia ketimbang kita bliang: suatu model memiliki error 0.002 ._. Dari definisi tersebut, dapat dilihat semakin tinggi nilai akurasi akan semakin baik.

Juga perlu diketahui, ketika kita bilang “akurasi”, sebenarnya kita merujuk ke suatu rumus yang spesifik. Sedangkan istilah “error” adalah istilah yang lebih lebih umum, rumusnya ada banyak, misalnya log-likelihood. Metode pengukuran lain yang mudah dipahami selain akurasi adalah F1-Score yang biasa digunakan untuk mengevaluasi model dengan data yang classnya tidak seimbang (imbalance)

oh ya, saya juga dulu pernah bertanya di AI.SE tentang pemilihan model berdasar akurasi atau error di sini

Continue reading

Istilah-Istilah di Neural Network ataupun Deep Learning (bagian 1)

Semester ini saya dapat kesempatan mengajar kelas Deep Learning di Program Studi S1 Informatika UII. Selama mengajari mahasiswa yang mayoritas masih awam dengan Deep Learning, bahkan Neural Network, saya merasakan ternyata banyak sekali istilah-istilah di Neural Network ataupun Deep Learning yang mungkin sulit untuk dipahami.

Karenanya, artikel ini saya buat dengan harapan dapat membantu teman-teman yang sedang belajar Neural Network ataupun Deep Learning untuk memahami istilah-istilah tersebut. Jika ada istilah-istilah yang belum tersampaikan / kurang jelas / malah salah maknanya silakan tulis di komentar ya 🙂

AI vs Machine Learning vs Neural Network vs Deep Learning

Kalau di kelas, saya menggambarkan diagram venn hubungan keempatnya seperti berikut ini.

John McCarthy, orang pertama yang memunculkan istilah Artificial Intelligence (AI) memberi definisi AI adalah “Science and engineering of making intelligent machines”1 atau saya sering mendefinisikan sendiri sebagai sekumpulan metode yang digunakan agar komputer dapat meniru atau bahkan melampaui kecerdasan manusia2.

Nah, Machine Learning merupakan salah satu teknik di bidang AI untuk membuat mesin mampu belajar dari data tanpa perlu diprogram secara eksplisit oleh programmer.

Suatu program yang memiliki banyak kondisi if-else (disebut rule-based), dapat meniru kecerdasan manusia (AI), namun bukan termasuk machine learning karena program tidak belajar memahami pola dari data, melainkan dengan ditulis secara eksplisit oleh programmer. Contoh program “cerdas” yang tidak belajar dari data adalah pintu yang otomatis bisa buka dan tutup sendiri. Pintu ini diprogram hanya membuka jika sensornya aktif dan menutup dalam waktu tertentu. Kita bisa saja pura-pura mendekati pintu, dan pintu akan terbuka karena dia hanya diberikan aturan sederhana tadi.

Neural Network (NN) adalah salah satu algoritma machine learning. NN mencerdaskan mesin dengan membangun model matematika yang (berusaha) meniru bagaimana sel saraf bekerja. Pada NN bagian-bagian kecil (sel saraf) dirangkai untuk menciptakan arsitektur jaringan saraf yang sesuai untuk suatu masalah.

Continue reading

Object Detection dengan PyTorch Detectron 2 dan Colab

Pada tutorial ini kita akan coba membuat object detection model dengan custom dataset kita sendiri menggunakan PyTorch Detectron 2.

Facebook Detectron 2 adalah salah satu python framework yang dapat digunakan untuk kasus object detection. Detectron dikembangkan oleh Facebook dengan menggunakan basis PyTorch sebagai deep learning frameworknya. Bagi yang belum tahu tentang PyTorch, bisa cek website resminya atau kunjungi tutorial kami sebelumnya di sini.

Framework lain untuk deteksi objek yang cukup populer adalah Tensorflow object-detection API (TFOD) yang dikembangkan oleh Google. Keduanya hampir memiliki fitur utama yang sama, salah satunya mereka menyediakan Model Zoo, di mana kita bisa mulai proses training menggunakan model yang sudah ada (pretrained model).

Artikel telah di update 16 Januari 2020 pada perubahan instalasi Detectron 2 versi 0.3

Detectron 2 Tutorial

Pada tutorial ini kita akan menggunakan Google Colab. Contoh code yang akan dibahas pada artikel ini tersedia di sini.

Detectron 2 Logo
  1. Dataset
  2. Instalasi
  3. Menyiapkan DatasetCatalog
  4. Training Model
  5. Save and Load Model

1. Dataset

Dataset yang akan kita gunakan sama dengan dataset dari tutorial sebelumnya. Kita akan mendeteksi pada suatu citra apakah ada kangguru atau rakun. Penjelasan detail format data dan bagaimana memprosesnya dapat dilihat pada artikel sebelumnya. Tapi, karena artikel sebelumnya digunakan untuk object detection dengan Tensorflow sedangkan kita di sini akan menggunakan PyTorch Detectron, maka kita tidak perlu memproses data sampai membuat file tfrecord, cukup sampai bagian membuat file csv.

Dataset latihan dapat didownload melalui github dengan menuliskan perintah berikut di google colab. Detail dataset dapat dibaca di file Readme:

! git clone https://github.com/rianrajagede/object-detection.git
Continue reading

Pengenalan Autoencoder : neural network untuk kompresi data

Autoencoder

Autoencoder adalah salah satu varian dari jaringan saraf tiruan (JST) yang secara umum digunakan untuk meng-“encode” suatu data. Berbeda dengan arsitektur JST pada umumnya yang dilatih untuk mengklasifikasi atau menghitung nilai regresi dari masukan, autoencoder dilatih untuk dapat menghasilkan output yang sama dengan inputnya. Autoencoder termasuk pada kategori Unsupervised Learning karena dilatih dengan menerima data tanpa label.

Traditional Neural Network vs Autoencoder

Pada ilustrasi tersebut, arsitektur di bagian atas adalah arsiktektur JST yang digunakan untuk mengklasifikasi citra bahan makanan di supermarket. Pada bagian bawah merupakan arsitektur autoencoder.

Lalu apa tujuannya sebuah model dilatih untuk menghasilkan citra yang sama?

Jika diperhatikan pada ilustrasi di atas, bagian yang menarik adalah bagian tengah autoencoder yang berupa sebuah vektor kumpulan neuron (ditandai dengan kotak warna kuning). Bagian tengah ini biasanya memiliki jumlah neuron yang lebih kecil dibanding layer di kanan atau kirinya (termasuk layer input dan outputnya). Sehingga jika model dapat dilatih dengan baik, bisa dikatakan bagian tengah ini merupakan representasi sederhana dari citra yang menjadi input. Apa maksud representasi sederhana? Karena vektor ini diperoleh dari citra input melalui arsitektur jaringan saraf tiruan (Encode), lalu dari vektor yang kecil ini bisa dibuat kembali citra yang serupa dengan inputnya (Decode).

Continue reading

Jaringan Saraf Tiruan dan Deep Learning

Jaringan Saraf Tiruan (JST) adalah sebuah model pada bidang machine learning yang dibuat (dengan asumsi) menyerupai cara kerja otak manusia. Saya tambahkan di sini “dengan asumsi” karena pada nyatanya kita tidak benar-benar paham bagaimana cara kerja otak manusia.

Sebelum masuk ke detail tentang apa yang dilakukan jaringan saraf tiruan, kita flashback dulu tentang machine learning. Jadi, sama dengan algoritma machine learning pada umumnya, secara ringkas pada jaringan saraf tiruan akan terdapat tiga nilai atau variabel utama:

  • Nilai Input $X$: berisi fitur / ciri
  • Nilai Target $T$: nilai yang diharapkan pengguna
  • Nilai Prediksi $Y$: nilai yang dihasilkan JST

Machine learning bekerja dengan membuat mesin yang mampu memprediksi nilai $T$ diketahui $X$. Sebagai contoh, kita kasih $X$ adalah spesifikasi (fitur) dari suatu rumah {banyak kamar, luas, warna, dsb.} dan kita berharap machine learning dapat memprediksi harganya ($T$).

Bagaimana caranya machine learning khususnya JST dapat memprediksi harga rumah dari fitur-fiturnya? dengan belajar 🙂 JST akan melihat pola dari data-data yang dimiliki dan menggunakannya untuk menebak harganya. Sebagai contoh, kalau kita telah melihat banyak daftar spesifikasi rumah yang diketahui harganya, kita akan paham bahwa jumlah kamar dapat mempengaruhi harga, namun warna tidak. Bahkan kita bisa mengira-ngira misalnya kalau kamarnya 4-5 kira-kira harganya Rp 800jt-1M.

Pada saat proses belajar, JST akan menerima banyak nilai $X$ (spesifikasi rumah) lalu akan menebak harganya ($Y$, nilai prediksi). Tentunya awalnya nilai $Y$ ini akan bernilai acak jika dibanding harga aslinya $T$, ini karena model JST kita belum pintar. Dengan proses pembelajaran (mengenali pola), model JST akan terus memperbaiki diri agar dapat menghasilkan nilai prediksi $Y$ yang sedekat (semirip) mungkin dengan nilai target $T$.

Bagaimana JST bisa menebak harga? bagaimana JST bisa belajar?

kita mulai dari …

Neuron

jaringan saraf tiruan neuron

Di atas adalah contoh sebuah neuron (elemen terkecil pada jaringan saraf tiruan) yang menerima input $X$ dan menghasilkan nilai $Y$. Sebuah neuron adalah visualisasi dari perhitungan sederhana berikut:

$$ Y = \sigma ( X . W+ b) $$

Dengan $W$ adalah suatu nilai “bobot” (weight) dan $b$ adalah bias. Bobot dan bias ini adalah koefisien yang tidak diketahui nilainya. Biasanya akan diberi nilai awal random. Nah, yang terjadi ketika model JST belajar adalah model JST akan mengubah-ubah nilai $W$ dan $b$ sehingga menghasilkan nilai Y yang diharapkan.

Notasi $\sigma$ (sigma) menunjukkan suatu fungsi aktivasi atau disebut juga fungsi non-linear. Ada banyak fungsi aktivasi yang dapat dipilih, salah satunya fungsi aktivasi “sigmoid” yang bentuknya seperti ini:

$$ \sigma(x) = \frac{1}{1 + e^{-x}} $$

Continue reading