Halo readers! Kali ini saya ingin sekali membahas tentang main pokok tugas akhir saya : Jaringan Syaraf Tiruan (JST). Sebelumnya saya minta maaf ya kalau ada kesalahan dalam artikel ini. Mungkin untuk kebenaran mutlaknya bisa dicek di perpustakaan terdekat. π JST yang saya gunakan dalam penyusunan tugas akhir adalah JST Backpropagation. Jadi yang saya jelaskan di sini JST BP.
Intinya JST ini semacam algoritma untuk mengklasifikasikan input. Semua pemrograman yang membutuhkan klasifikasi terkadang (kebanyakan) menggunakan JST untuk algoritmanya. Contohnya: Pemrograman Pengenalan Wajah. Mengapa pengenalan butuh klasifikasi? Jadi mudahnya begini, kalau kita melihat wajah seseorang, sebagai contoh wajah keluarga kita. Nah, semenjak kecil, untuk mengenali wajah keluarga kita, otak kita pasti akan mengklasifikasikan (mengelompokkan) tiap wajah berdasarkan atas suatu ciri tertentu. Misal: Bapak kita alisnya tebal. Ibu kita matanya sipit dan hidungnya mancung. Adik kita punya alis tebal dan mata sipit. Kakak kita punya alis tebal dan hidung mancung. Jadi otomatis, kalau bertemu dengan orang yang mondar – mandir di dalam rumah dengan ciri alis tebal dan hidung mancung, bisa dipastikan kalau dia adalah kakak kita. Nah masalahnya adalah, indra kita cuma bisa menangkap ciri – ciri itu. Lalu yang bisa mengklasifikasikan tadi siapa dong? Ya otak kita. Nah, JST itu ibaratnya adalah cara otak kita biar bisa mengenali ciri – ciri tadi, sehingga kita tidak salah menyapa kakak kita dengan sebutan ibu π
Dalam JST BP, sebelum mengolah suatu informasi input, segala macam input yang diterima harus berupa nilai numerik. Kembali lagi ke contoh. Kalau pengenalan wajah, bagaimana caranya mengubah input yang berupa foto (image) wajah menjadi output yang berupa numerik (angka) berapapun jumlahnya itu? Nah, itulah salah satu tantangannya π Sebelum ke dalam tahap JST BP, ada sebuah tahapan Pre-Processing Input. Kalau foto ya berarti namanya image processing. Tahapan ini yang akan mengubah foto yang membawa informasi berupa nilai – nilai dari pixel untuk diproses sedemikian rupa sehingga ciri – ciri dari tiap gambar diketahui dan ciri ini diubah menjadi ciri numerik sebagai input JST. Nah lho, bingung ya? Saya juga mulai bingung menjelaskannya. Haha π
Sebagai contoh, ada foto bola berwarna putih dan bola berwarna hitam. Nah, kalau dilihat di histogram, perbedaan jumlah pixel antara rentang 0 – 255 ternyata jauh berbeda. Foto bola berwarna putih memiliki rentang dekat nilai 255 yang lebih banyak. Sedangkan foto bola berwarna hitam memiliki rentang dekat nilai 0 yang paling banyak. Perbedaan yang sangat mencolok inilah yang kita jadikan ciri. Ciri bola warna putih, nilai 255nya lebih banyak. Ciri bola warna hitam, nilai 0 nya lebih banyak. Kalau contoh di atas kan menggunakan histogram. Ciri – ciri yang lain juga bisa pakai metode – metode image processing yang lain. Kalau ini, mungkin bisa kita tanyakan ke mbah google ya. Kalau saya jelaskan di sini nantinya artikel ini berlembar2 dan saya juga gak begitu ngerti juga. Hahaha π
image 1 – Contoh Histogram di Tugas Akhir saya
Kalau input berupa histogram tadi, jumlah pixel (nilai numerik) yang berada pada rentang nilai 0 s.d 255 tadi yang akan dijadikan input untuk JST BP. Nah, gambar di bawah ini adalah contoh tahapan image processing yang terdapat pada tugas akhir saya.
image 2 – Contoh Blok diagram image processing
Output pada JST BP, berupa nilai numerik pula. Nah, prakteknya kalau pemrograman menggunakan MATLAB (kayaknya walau pakai bahasa pemrograman apapun, rule-nya sama siy), hasil dari nilai output numerik tadi diberi rentang nilai, misal jika saya punya nilai 0 – 0.5 maka output saya klasifikasikan ke dalam hasil A. Jika output bernilai 0.051 – 1, maka saya klasifikasikan ke dalam hasil B, dst.
Keunggulan dari JST BP ini, tingkat akurasinya dibandingkan JST lainnya yang paling tinggi. Karena dia memiliki metode pengecekan error. Intinya, JST BP ini memang dilahirkan sebagai JST yang perfectionist, π Setiap menemukan nilai error, dia akan selalu memperbaiki nilai error hingga sekecil – kecilnya. Akan tetapi ingat! Bisa jadi pada proyek – proyek tertentu, JST BP ini malah membuat proyek tersebut tidak mengenali dengan baik. Misal pendeteksian sempitnya pembuluh darah lebih cocok pakai LVQ, atau JST yang lainnya. Nah, kalau masalah itu, solusi pemecahan yang terbaik adalah trial and error. π Ya, sama saja seperti manusia, kalau dipasangkan dengan orang yang perfectionist bisa jadi nggak mau. Bisa jadi cocok banget. Nah, kalau itu kan tergantung manusianya kan.
Secara garis besar, kalau dibuat blok diagram, JST BP seperti ini
image 3 – Blok diagram JST BP
Untuk jumlah layer hidden dan output itu terserah. Berapapun. Kalau dalam tugas akhir, biasanya ini yang diuji. Jika jumlah hidden layer 3 biji misal, akurasinya berapa. Atau 2, pokoknya terserah π Jumlah layer yang menghasilkan tingkat akurasi yang paling tinggilah yang nantinya akan dipakai pada sistem secara keseluruhan.
Untuk perhitungan JST BP, mungkin readers bisa lihat langsung ya rumus – rumusnya lewat eyang google atau buku JST. Secara garis besar sinyal yang terdapat pada JST BP bisa dilihat lewat diagram berikut. Maaf tulisan sendiri kalau semisal nggak kelihatan, diklik aja π
image 4 – Diagram Sinyal JST BP
Sama seperti otak, pengelolaan sinyal informasi dilakukan dalam bentuk sinyal elektrik. Sel syaraf yang mengolah berupa neuron – neuron. Pada gambar di atas, terdapat 3 macam neuron: neuron input (X), neuron hidden (Z) dan neuron output (Y). Jumlah neuron pada masing – masing layer itu terserah. Dalam tugas akhir saya, jumlah neuron ini termasuk yang akan diteliti terkait hubungannya terhadap nilai akurasi. Tiap neuron, akan mengirimkan sinyal ke neuron selanjutnya. Saat pengiriman sinyal, terdapat suatu nilai yang bernama bobot: bobot n.input ke n.hidden (V) dan bobot n.hidden ke n.output (W). Bobot akan dikalikan dengan input untuk menghasilkan sinyal output yang terkirim. Tentang bobot (weights) sebenarnya kalau baca buku text book saya juga masih bingung penjelasannya π Intinya sih senangkapnya saya, sejenis gain gitu ya. Nah, untuk penamaannya, bobot dari n.input ke-1 terhadap n.hidden ke-1 bernama V11. Bobot dari n.input ke-1 terhadap n.hidden ke-2 bernama V12. Begitu seterusnya hingga n.input ke-n terhadap n.hidden ke-n bernama Vnn. Begitu pula penamaan bobot WΒ dari n.hidden ke n.output. Tiap layer, kecuali layer output akan mengirimkan sinyal bias. Nah, bias sendiri mungkin bisa dibaca dibuku text book ya penjelasan komplitnya. Kalau kata dosen saya, sederhananya bias itu seperti nilai toleransi, misal ada suatu nilai 50 +/- 0.5. Nilai toleransinya 0.5. Untuk bias ini terserah berapapun nilainya asal dalam rentang 0 dan 1.
Jadi bisa disimpulkan kan, kalau untuk Z1 saja, sinyal yang diterima (lihat panah yang menuju Z1) adalah: (X1).(V11) , (X2).(V21) , (Xn)(Vn1) ,Β dan V01. Jadi total keseluruhan sinyal Z1 adalah V01+(X1).(V11)+(X2).(V21)+(Xn)(Vn1). Nah, sekarang coba lihat rumus yang ada di buku. Sama kan? π –> saya menuliskan penurunan rumus ini karena ternyata banyak teman2 saya tidak mengerti mengapa rumus di buku itu sigma blah blah blah~ruwet. π
Nah, setelah ketemu sinyalnya, harus dimasukkan ke dalam suatu fungsi transfer. Kalau sepenangkapan saya, setelah belajar – belajar, intinya fungsi ini bertugas memetakan nilai output agar nilainya terletak di antara [-1 1]. Ya karena, bisa dibayangkan kan kalau nilai sinyalnya sampai 1 milyar misalnya, tidak disederhanakan, bisa puyeng juga kan. π Fungsi transfer, kalau di Matlab seingat saya ada 4 macam : Tansig (Tangen Sigmoid), LogsigΒ (Log Sigmoid), Linear dan Satlin (Saturating Linear). Nah, tiap – tiap fungsi memiliki rumus sendiri2 (saya nggak hafal, bisa langsung search di Matlab help :P) untuk memetakan nilai input biar sederhana. Sebagai contoh fungsi Satlin di bawah.
image 5 – Grafik Fungsi Transfer Saturation Liner (Satlin)
Jadi semisal sinyal outputnya setelah dihitung2, nilainya 1 milyar. Nah itu masuknya tak hingga. Jadi dibacanya 1. Kalau sinyal outputnya 0.5, maka nilainya 0.5, dst. Sesuai dengan grafik di atas. Absis adalah input dan Ordinat adalah hasil keluaran ketika input dimasukkan ke dalam fungsi. Di sinyal yang paling akhir, nanti akan dibandingkan dengan sinyal target (terserah berapa nilainya). Inilah yang menyebabkan JST BP termasuk supervised learning. Pembelajarannya diawasi atau ada targetnya. Kalau ternyata jauh banget perbedaannya antara sinyal output dan target, akan dihitung errornya, lalu diupdate nilai bobot2nya sehingga menghasilkan hasil output yang hampir mirip dengan sinyal target.
Kalau kita mengenali seseorang, pasti kita perlu latihan dong untuk beberapa kali melihat orang tadi sehingga kita jadi ingat namanya siapa. Nah sama seperti JST BP, dia juga perlu latihan untuk mengklasifikasikan input yang dia terima. Jumlah latihan (training) ini terserah. Mau 100 boleh, 100 boleh. 1000000 pun boleh π Nah karena berapapun boleh, biasanya jumlah training ini akan diuji di Tugas Akhir.
Untuk perhitungan error, bisa menggunakan metode MSE atau MAE (setahu saya) atau mungkin metode perhitungan error lain yang saya belum tahu π Kalau di Matlab, langsung default MSE. Biasanya di buku2 juga menyarankan MSE. Entah mengapa. Setahu saya memang agar error yang bernilai negatif pun bisa terhitung karena ada square-nya itu (MSE). Nah tapi, kalau dipikir, absolute juga membuat nilai negatif jadi positif sehingga bisa dihitung (MAE). β Untuk penentuan bobot awal, karena nilainya terserah kita, kita bisa juga menghitung dengan metode Nguyen-Widrow untuk menentukan nilai bobot yang menghasilkan nilai error paling kecil. Bisa tanya eyang google ya tentang Nguyen-Widrow. Hehe.
Nah, mungkin baru itu yang bisa saya bagi tentang JST BP. Mungkin kalau ada yang mau menambahkan, atau dirasa pernyataan saya salah, silahkan berbagi saja. Semoga bermanfaat ya buat yang sedang belajar JST π