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}} $$

Contoh

Misalnya diketahui kita punya 2 data sederhana dengan nilai $X$ dan target $T$ sebagai berikut:

Nilai Input $X$Nilai Target $T$
Data #110
Data #2-11

Kita akan gunakan sebuah neuron seperti ilustrasi sebelumnya. Karena nilai $W$ dan $b$ awalnya bernilai random, kita misalkan saja awalnya nilai $W$ adalah 2 dan nilai $b$ adalah 0 dan kita akan menggunakan fungsi aktivasi sigmoid di atas. Maka hasil prediksi awal kita menggunakan sebuah neuron seperti di atas adalah:

Nilai Input $X$Nilai Target $T$$ Y = \sigma ( X . W+ b) $
Data #110$Y = \sigma(1.2 + 0) = 0.88$
Data #2-11$Y = \sigma(-1.2 + 0) = 0.11$

Dapat dilihat nilai $Y$ yang dihasilkan masih tidak sesuai dengan nilai $T$. Pada Data #1 nilai yang diharapkan (nilai $T$) adalah 0 tetapi nilai yang dihasilkan JST (nilai $Y$) adalah 0.88. Ada selisih yang cukup besar dikedua nilai itu, selisih ini disebut Error. Nantinya, dengan menggunakan suatu algoritma, nilai W dan b akan diubah dengan harapan meminimalkan Error ini.

Contohnya seperti berikut, nilai $Y_1$ menunjukkan hasil setelah dilakukan perbaikan sebanyak 1x, $Y_2$ berarti diperbaiki sebanyak 2x, dan seterusnya. Tampak hasil nilai $Y$ semakin mendekati nilai $T$. Inilah yang disebut proses pembelajaran.

$X$$T$$Y_0$
W=2
b=0
$Y_1$
W=1
b=0.5
$Y_2$
W=0.1
b=0.8
$Y_3$
W=-0.7
b=0.2
Data #1100.880.810.590.37
Data #2010.110.370.540.71

Backpropagation
Backpropagation atau tepatnya Gradient Descent adalah nama metode yang digunakan untuk memperbaiki nilai bobot $W$ dan bias $b$ pada JST agar menghasikan nilai yang lebih baik pada setiap iterasinya. Saya tidak membahas detail bagaimana cara kerjanya di sini, bagi yang penasaran bisa mengunjungi artikel tentang backpropagation.

Arsitektur yang lebih kompleks

Arsitektur di atas sangatlah sederhana, hanya sebuah neuron. Bagaimana caranya kita memberi input ke model JST ketika ada lebih dari satu nilai, misalnya banyak kamar, luas rumah, luas taman, jarak rumah ke pusat kota, dsb? Di kasus nyata kita akan menggunakan arsitektur yang lebih kompleks seperti ini misalnya:

Pada gambar di atas, jaringan saraf tiruan ditampilkan dalam bentuk 2 layer atau lapisan, yakni layer input (warna hijau) dan layer output (warna biru). Layer input walau bentuknya sama-sama bulet, tapi bukan sebuah neuron seperti yang dijelaskan sebelumnya (yang di dalamnya ada proses perhitungan). Layer input hanyalah lapisan yang berisikan nilai input. Sedangkan layer output merupakan lapisan yang berisikan neuron.

Apa yang beda antara arsitektur ini dengan neuron sebelumnya? Pada arsitektur ini, input terdiri dari empat buat nilai berbeda $x_1$ sampai $x_4$. Yang berarti rumusnya pun sedikit berubah.

Jika dimisalkan menggunakan data (menyesuikan tabel sebelumnya), gambaran nilai $X$ dan $T$ pada arsitektur di atas akan tampak seperti tabel di bawah. Setiap data harus menginputkan 4 nilai (pada contoh keempat nilai ditampilkan dalam kurung siku dan dipisahkan dengan koma), hal ini beda dengan sebelumnya yang setiap data hanya menginputkan 1 nilai.

Nilai Input $X$Nilai Target $T$
Data #1[1, 0, 0.4, 2][1]
Data #2[0, 0.5, 1, 1][0]

Setiap neuron $y$ menerima input dari seluruh neuron dibelakangnya, yakni neuron-neuron $x$. Sehingga rumusnya akan sedikit berbeda, untuk mendapatkan nilai $y$ dihitung menggunakan rumus berikut:

$$
y = \sigma \left ( w_{1}x_{1} + w_{2}x_{2} + w_{3}x_{3} + w_{4}x_{4} + b \right)
$$

atau rumus di atas bisa juga ditulis dengan menggunakan $\sum$ menjadi:

$$
y = \sigma \left ( \sum_{i=1}^4 (w_{i}x_{i}) + b \right)
$$

Sama dengan rumus sebelumnya nilai $w$ dan $b$ semuanya akan bernilai awal random dan akan diperbarui nilainya dengan proses backpropagation untuk meningkatkan kualitas model.

Arsitektur yang lebih kompleks lagi

Arsitektur di atas hanya memberikan satu output. Arsitektur jenis ini biasanya digunakan untuk permasalahan regresi (memprediksi harga rumah) atau klasifikasi biner (true / false). Bagaimana jika ingin melakukan klasifikasi dengan beberapa kelas?

Contoh:

Diketahui beberapa data ikan yang terdiri dari panjang (dalam cm) dan berat (dalam kg). Masing-masing ikan adalah salah satu dari 3 jenis ikan (jenis 1, jenis 2, atau jenis 3). Tabelnya sebagai berikut:

PanjangBeratJenis
Ikan #167.53.21
Ikan #244.21.52
Ikan #36531
Ikan #4572.53

Pada kasus klasifikasi di atas, kita akan mengklasifikasikan keempat ikan tersebut menggunakan jaringan saraf tiruan. Setiap ikan memiliki 2 ciri (bisa disebut fitur) yang menjadi input $X$, yakni panjang dan berat. Dan setiap ikan termasuk dari salah satu dari tiga jenis (atau disebut kelas $T$), yakni jenis 1, 2, atau 3. Karena input terdiri dari dua jenis dan terdapat satu nilai output, maka arsitektur JST yang dapat kita gunakan adalah sebagai berikut:

jaringan saraf tiruan 2-1

Tapi sebenarnya, kasus di atas bisa juga direpresentasikan dalam bentuk lain, yakni dengan menjadikan output model menjadi 3. Setiap output akan mewakili kelas. Nantinya, ikan akan diklasifikasikan ke kelas yang memiliki nilai tertinggi. Ilustrasi:

jaringan saraf tiruan 2-3

Dengan bentuk tersebut kita perlu juga mengubah nilai $T$ yang awalnya hanya satu nilai tiap data (antara 1, 2, atau 3), kini harus memiliki 3 nilai tiap data. Jadi kita ubah seperit ini

Nilai $T$ sebelumNilai $T$ sesudah
1[1, 0, 0]
2[0, 1, 0]
3[0, 0, 1]

Mengubah bentuk kelas yang awalnya sebuah nilai integer menjadi sebuah array bernilai 1 atau 0 (disebut one-hot-encoding). Ini yang membuat kenapa ikan diklasifikasikan ke kelas dengan nilai tertinggi, karena target $T$ untuk kelas yang benar seharusnya bernilai 1, sedangkan yang salah harusnya bernilai 0.

Sehingga tabel contoh di atas berubah seperti di bawah:

PanjangBeratJenis
Ikan #167.53.2[1, 0, 0]
Ikan #244.21.5[0, 1, 0]
Ikan #3653[1, 0, 0]
Ikan #4572.5[0, 0, 1]

Bagaimana rumusnya hitungan arsitektur di atas? Jika diperhatikan antara nilai $y$ tidak saling terhubung atau mempengaruhi, sehingga rumusnya seperti berikut ini:

$$ \begin{eqnarray}
y_1 &= \sigma \left ( w_{11}x_{1} + w_{21}x_{2} + b_1 \right) \nonumber \\
y_2 &= \sigma \left ( w_{12}x_{1} + w_{22}x_{2} + b_2 \right) \nonumber \\
y_3 &= \sigma \left ( w_{13}x_{1} + w_{23}x_{2} + b_3 \right) \nonumber \\
\end{eqnarray} $$

Multi Layer Perceptron

Multi layer perceptron (MLP) adalah jenis jaringan saraf tiruan yang memiliki satu atau lebih hidden layer. Hidden layer adalah sebuah layer yang berisikan neuron-neuron yang berada di antara layer input dan layer output, seperti ilustrasi di bawah:

multi layer jaringan saraf tiruan

Secara perhitungan sebenarnya tidak berbeda banyak, hanya saja kini input dari neuron-neuron $y$ bukanlah $x$ melainkan output dari neuron-neuron $z$.

Deep Learning

Secara sederhana deep learning adalah istilah yang digunakan untuk cabang ilmu yang mempelajarai Deep Neural Network, yakni jaringan saraf tiruan yang memiliki banyak hidden layer, seperti diilustrasikan di bawah.

Ketika sebuah jaringan saraf tiruan memilki banyak hidden layer, sebenarnya akan muncul banyak “plus minus” dalam proses pelatihannya. Nah, Deep Learning berfokus pada studi dalam menangani “plus minus” tersebut.

Semoga bermanfaat!

About the author

Rian Adam

Lecturer at Universitas Islam Indonesia; Machine Learning Enthusiast

View all posts

5 Comments

Leave a Reply