Parameter Tuning Model Secara Otomatis dengan Optuna

Apa itu Tuning Parameter

Ketika kita membuat model machine learning, kita tidak akan terlepas dengan yang namanya parameter tuning, yakni proses menentukan nilai parameter-parameter model ktia. Hampir semua model machine learning punya beberapa parameter (atau variabel) yang harus kita definisikan terlebih dahulu nilainya sebelum proses training. Nilai yang kita berikan pada parameter-parameter tersebut nantinya akan menentukan proses pelatihan model kita.

Sebagai contoh di neural network, kita harus menentukan parameter-parameter arsitektur kita, yang bisa meliputi: banyak hidden layer, banyak neuron di setiap layer, jenis fungsi aktivasi dan lain-lain. Penentuan angka-angka tersebut akan menentukan kualitas model kita. Misalkan, untuk tiga parameter yang disebutkan tadi kita menggunakan neural network dengan 2 layer, masing-masingnya 100 neuron, dan menggunakan fungsi aktivasi sigmoid. Itu berarti kita telah memilih nilai untuk tiga parameter yang disebutkan di atas dari banyak kemungkinan nilai. kenapa kok tidak 1 layer? atau 3 layer? kenapa tidak 50 neuron? atau 10 neuron? kenapa tidak pakai fungsi aktivasi lain? dan sebagainya.

Tentu pemilihan parameter harusnya memiliki suatu “dasar”. Biasanya parameter-parameter tersebut dipilih setelah melalui beberapa eksperimen dan merupakan parameter yang menghasilkan model terbaik untuk kasus yang digunakan.

Parameter Tuning model Neural Network

Pada contoh ini kita akan coba membuat model neural network sekaligus melakukan parameter tuning untuk kasus binary classification menggunakan data Sonar. Data tersebut berisikan ~200 pola sinyal sonar yang mendeteksi antara batu (kode “R”) atau besi (kode “M”). Dataset yang telah di-split dapat didownload di sini, contoh code dapat dilihat di Google Colab di sini

Langkah pertama, kita perlu load package dan dataset lalu ubah kode kelas “R”/”M” menjadi 1 dan 0.

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 Sederhana Menggunakan Tensorflow 2.x

Ini adalah artikel “versi lain” dari tulisan sebelumnya di sini. Sebagian besar artikel akan sama, namun pada artikel ini kita akan coba membuat jaringan saraf tiruan sederhana menggunakan Tensorflow 2.x. Tensorflow 2.x atau tensorflow versi 2, merupakan tensorflow versi terbaru yang membawa konsep yang berbeda dengan Tensorflow versi sebelumnya. Bagi yang masih bingung tentang JST dan mau memahami bagaimana JST bekerja bisa buka artikel berikut.

Dataset

Kita akan menggunakan dataset Iris yang sudah cukup populer. Dataset ini berisi data dari 150 Bunga Iris yang berasa dari 3 spesies berbeda. Diberikan 4 buah fitur / ciri, yakni panjang kelopak (sepal length), lebar kelopak (sepal width), panjang mahkota (petal length), dan lebar mahkota (petal width), lalu kita akan mencoba untuk mengklasifikasikan bunga tersebut adalah spesies apa.

iris set

Saya telah memisahkan dataset aslinya menjadi dua file, satu untuk training, dan satu untuk testing. File csv dataset tersebut dapat di download di sini: training set dan test set.

Implementasi Jaringan Saraf Tiruan

Arsitektur

Melihat dataset yang ada, dapat kita simpulkan untuk arsitektur jaringan saraf tiruan kita membutuhkan 4 buah neuron input (fitur) dan 3 buah neuron output (spesies). Kita akan coba menggunakan sebuah hidden layer dengan jumlah neuron hidden layer sebanyak 3. Ilustrasinya tampak sebagai berikut:

Continue reading

Implementasi Jaringan Saraf Tiruan menggunakan PyTorch

Pada artikel ini kita akan coba melakukan implementasi Jaringan Saraf Tiruan / JST / Artificial Neural Network untuk kasus klasifikasi menggunakan PyTorch. Bagi yang belum tahu PyTorch bisa membaca artikel sebelumnya di sini atau bagi yang mau memahami bagaimana JST bekerja bisa buka artikel berikut.

Dataset

Kita akan menggunakan dataset Iris yang sudah cukup populer. Dataset ini berisi data dari 150 Bunga Iris yang berasa dari 3 spesies berbeda. Diberikan 4 buah fitur / ciri, yakni panjang kelopak (sepal length), lebar kelopak (sepal width), panjang mahkota (petal length), dan lebar mahkota (petal width), lalu kita akan mencoba untuk mengklasifikasikan bunga tersebut adalah spesies apa.

iris set

Saya telah memisahkan dataset aslinya menjadi dua file, satu untuk training, dan satu untuk testing. File csv dataset tersebut dapat di download di sini: training set dan test set.

Implementasi Jaringan Saraf Tiruan

Arsitektur

Melihat dataset yang ada, dapat kita simpulkan untuk arsitektur jaringan saraf tiruan kita membutuhkan 4 buah neuron input (fitur) dan 3 buah neuron output (spesies). Kita akan coba menggunakan sebuah hidden layer dengan jumlah neuron hidden layer sebanyak 3. Ilustrasinya tampak sebagai berikut:

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