Author: Anonymous

Sering dan sudah sangat sering kita jumpai banyak jargon tantang Machine Learning diberbagai aspek kehidupan kita. Machine Learning seakan menjadi buzz word (jargon) baru di dalam perkembangan teknologi sekarang ini. Meliputi bagaimana Machine Learning dapat membantu memberikan rekomendasi tentang barang yang tepat untuk dibeli seorang pelanggan, hingga membantu dokter dalam diagnosa penyakit. pict1 Salah satu diantara cabang Machine Learning yang sangat ramai diperbincangkan adalah Deep Learning. Deep Learning mengalami perkembangan pesat dikarenakan sekarang semakin banyak data yang di-generate di Internet, sehingga efektivitasnya akan semakin terasa. Banyak diantara artikel yang menjelaskan bahwa Deep Learning adalah semacam Black Box (Kotak Hitam) yang bisa mengeluarkan hasil keluaran sesuai dengan yang kita mau hanya dengan memberikan contoh kasus yang cukup. Sebenarnya jantung dari Deep Learning ini adalah Neural Network (Jaringan Saraf).pict2

Ruang lingkup

pict3

Ilustrasi deep learning yang seakan dapat memberikan jawaban mengenai jenis gambar, hanya dengan memberikan gambar yang kita maksud.

Dilihat melalui cara yang tepat, kemampuan membuat prediksi jaringan saraf bisa masuk akal. Artikel ini adalah tentang melihat jaring dari kotak hitam mereka dengan memahami apa yang sebenarnya diwakili oleh jaringan saraf tersebut. Pada intinya, setiap jaringan saraf mewakili fungsi matematika tunggal. Ini berarti bahwa ketika kita menggunakan jaringan saraf untuk beberapa tugas, hipotesis ini adalah bahwa ada beberapa fungsi matematika yang akan mendekati perilaku yang diamati dengan cukup baik. Ketika kita melatih jaringan saraf kita mencoba menemukan satu pendekatan yang masuk akal. Karena fungsi-fungsi yang digunakan seringkali rumit, bisa digunakan graph untuk mewakili mereka daripada notasi rumus standar. Graph ini membantu kita mengatur pemikiran tentang fungsi-fungsi yang dibuat untuk menyelesaikan tugas dan ternyata beberapa graph bekerja lebih baik daripada yang lain untuk tugas-tugas tertentu. Banyak penelitian dan pengembangan dalam ruang jaringan saraf adalah tentang menciptakan arsitektur baru untuk graph ini, daripada menciptakan algoritma baru. Lalu bagaiman penggunaan Graph Komputasi di Jaringan Saraf dan Deep Learning secara khususnya.

Graph Komputasi

Graph Komputasi adalah cara merepresentasikan fungsi matematika dengan bahasa yang mirip dengan Teori Graf. Teori Graf sendiri adalah cabang ilmu matametika yang mempelajari tentang Himpunan Titik (Vertex atau Node) dan Edges yang menghubungkan keduanya. Secara sederhana didalam Teori Graf yang menjadi pusat perhatian adalah Vertex dan Edges. Didalam Graph Komputasi setiap Node itu bisa berupa suatu nilai placeholder atau merupakan suatu fungsi matematika dan Edges berfungsi sebagai tempat aliran data yang diperlukan untuk menyelesaikan tugas tertentu. Misal kita ingin membuat suatu fungsi

f(x,y,z) = (x+y)*z.

Jika kita terjemahkan kedalam Graph Komputasi, kira-kira akan menjadi seperti berikut: pict4 Sesuai dengan ilustrasi diatas kita bisa lihat ada tiga Node yang dilabeli x, y, z yang berguna sebagai placeholder (penampung) nilai yang akan digunakan dalam perhitungan. Secara notasi bisa kita tuliskan sebagai:

Dalam kedua notasi ini kita dapat menghitung jawaban untuk setiap fungsi secara terpisah, asalkan kita melakukannya dalam urutan yang benar. Sebelum kita tahu jawaban untuk f(x, y, z) pertama-tama kita perlu jawaban untuk h(x, y) dan kemudian g(h(x, y), z). Dengan notasi matematika, kami menyelesaikan ini dengan menghitung tanda kurung terdalam terlebih dahulu, dalam grafik komputasi kita harus menunggu sampai semua sisi yang menunjuk ke sebuah simpul memiliki nilai sebelum menghitung nilai output untuk simpul itu. Mari kita lihat contoh untuk komputasi f(1, 2, 3).

pict5

Penyelesaian fungsi f dengan Graph Komputasi

Di dalam contoh sederhana di atas mungkin kita masih belum melihat kenapa Graph Komputasi harus digunakan, dikarenakan fungsi yang coba kita modelkan masih sangat sederhana. Masalah baru akan terlihat ketika kita coba menggunakan skala Jaringan Saraf. Mari kita lihat contoh lain: misalkan kita sedang membangun jaringan saraf yang dalam untuk memprediksi apakah seseorang single atau tidak single (binary prediction). Selain itu, asumsikan bahwa kita telah mengumpulkan data yang memberi tahu kita lima hal tentang seseorang: gaji, usia, jenis kelamin, kota tempat tinggal mereka, dan apakah mereka single atau tidak. Ketika kita mengatakan kita ingin “membangun jaringan saraf” untuk membuat prediksi ini – sama saja mengatakan bahwa kita ingin menemukan fungsi matematika dari formulir:

f(gaji, usia, jenis_kelamin, kota) = single ∨ tidak

Dengan output 1 jika single dan output 0 jika tidak single. Jika kita gambarkan dengan model Graph Komputasi makan kira-kira akan menjadi mirip dengan: pict6

Jaringan Saraf Tiruan sebagai Graph Komputasi

Saya coba berpikir tentang arsitektur jaringan saraf yang dalam sebagai template untuk suatu fungsi. Saat kita mendefinisikan arsitektur jaringan saraf, kita akan menyusun serangkaian sub-fungsi dan menentukan bagaimana mereka harus disusun. Ketika kami melatih jaringan saraf, kami sedang bereksperimen dengan parameter fungsi ini. Pertimbangkan fungsi ini sebagai contoh:

f(x, y) = ax² + bxy + cy²; dengan a,b, dan c sebagai suatu nilai skalar

Sub-fungsi komponen dari fungsi ini adalah semua operator: dua perpangkatan, dua tambahan, dan 4 perkalian. Parameter dari fungsi ini adalah a, b, dan c, dalam bahasa jaringan saraf ini disebut bobot. Input ke fungsi ini adalah x dan yーkita tidak dapat memodifikasi nilai-nilai itu dalam machine learning karena mereka adalah nilai-nilai dari dataset, yang kita kumpulkan sebelumnya. Kita bisa memikirkan arsitektur dari jaringan saraf sebagai template untuk suatu fungsi. Saat kita mendefinisikan arsitektur jaringan saraf, kita menyusun serangkaian sub-fungsi dan menentukan bagaimana mereka harus disusun. Ketika kita melatih jaringan saraf, kami sedang bereksperimen dengan parameter sub-fungsi ini. Dengan mencoba mengubah-ngubah nilai a, b, dan c kita bisa mengubah keluaran dari suatu fungsi. Dan harapannya pengubahan nilai ini dapat membuat fungsi kita mengeluarkan hasil yang kita inginkan untuk suatu nilai (x, y). pict7

Representasi fungsi dalam Graph Komputasi

Contoh diatas bukanlah Jaringan Saraf secara teknis, tetapi mendekati itu dalam beberapa hal. Kita bisa menggunakannya untuk memprediksi suatu trend dalam data, dan kita bisa melatihnya dengan gradient descent, dan back-propagation kita memiliki dataset yang memetakan dua buah input kepada sebuah output. Graph Komputasi seperti diatas akan bagus untuk memetakan suatu trend data yang quadratic yang melibatkan dua variable. Pada contoh diatas melatih jaringan saraf akan melibatkan proses pengubahan nilai a, b, dan c sehingga membuat fungsi bekerja sebagai prediktor bagi dataset kita. Contoh jaringan saraf diatas masih kurang practical sebab hanya bisa menerima dua input dan menghasilkan sebuah output, dan juga hanya bisa mencoba mengubah nilai a, b,dan c dalam pembelajarannya. Dalam kasus yang lebih kompleks kita bisa menggunakan lebih banyak input dan lebih banyak variable yang bisa di-tuning. Sebagai pengingat ada beberapa fakta tentang Jaringan Saraf Dalam (Deep Neural Network):

  1. DNN adalah jenis Graph khusus (Graph Komputasi).
  2. DNN terdiri dari serangkaian Layer of Nodes yang saling terhubung (fully connected).

“Fully connected” berarti bahwa output dari setiap node di lapisan pertama menjadi salah satu input untuk setiap node di lapisan kedua. Dalam graph komputasi, edges adalah nilai output dari fungsi pada lapisan yang terhubung sepenuhnya, output untuk setiap fungsi digunakan sebagai salah satu input untuk setiap fungsi di lapisan berikutnya. Fungsi yang dilakukan oleh setiap node dalam jaringan saraf disebut fungsi aktivasi. Ada dua langkah di setiap fungsi aktivasi. Pertama, semua nilai input digabungkan dalam beberapa cara, biasanya ini adalah penjumlahan berbobot. Kedua, fungsi “non-linier” diterapkan pada jumlah itu fungsi kedua ini dapat berubah dari lapisan ke lapisan dalam jaringan saraf yang dalam. Fungsi nonlinier yang populer untuk langkah kedua ini adalah tanh, log, maks (0, x) (disebut Rectified Linear Unit, atau ReLU), dan fungsi sigmoid. Pada saat penulisan ini, ReLU adalah pilihan nonlinier yang paling populer. pict8

Ilustrasi

Dalam contoh sebelumnya, saya katakan kita tidak memiliki fleksibilitas yang cukup karena kami hanya memiliki 3 parameter untuk di-tune. Jadi berapa banyak parameter yang ada di jaringan saraf yang dalam untuk kita tune? Jika kita mendefinisikan jaring saraf untuk memprediksi klasifikasi biner dengan 2 lapisan tersembunyi masing-masing dengan 512 node dan vektor input dengan 20 fitur, kita akan memiliki 20 * 512 + 512 * 512 * 512 + 512 * 2 = 273.408 bobot bahwa kita dapat fine tune plus 1024 bias (satu untuk setiap node di lapisan tersembunyi). Ini adalah jaringan saraf “sederhana”. Jaringan saraf “kompleks” seringkali memiliki beberapa juta bobot dan bias yang dapat dirubah. fleksibilitasnya yang luar biasa adalah apa yang memungkinkan jaringan saraf untuk menemukan dan memodelkan hubungan yang kompleks. Itu juga mengapa mereka membutuhkan banyak data untuk dilatih. Dengan menggunakan back-propagation dan gradient descent, kita dapat mencoba mengubah jutaan bobot hingga hasilnya menjadi lebih baik, tetapi karena kita melakukan perhitungan yang melibatkan jutaan variabel, perlu banyak waktu dan banyak data untuk menemukan kombinasi bobot dan bias yang tepat. Meskipun terkadang disebut “kotak hitam”, jaringan saraf sebenarnya adalah cara mewakili fungsi matematika yang sangat kompleks. Jaring saraf yang kita bangun adalah fungsi yang sangat berguna karena memiliki begitu banyak parameter yang dapat disesuaikan. Hasil dari fine tuning adalah kompleksitas yang antara komponen input yang berbeda. Pada akhirnya, “arsitektur” graph komputasi ini akan berdampak besar pada seberapa baik jaringan saraf dapat melakukan sesuatu. Pertanyaan-pertanyaan seperti: berapa banyak node per lapisan, fungsi aktivasi mana yang digunakan pada setiap lapisan, dan berapa banyak lapisan yang akan digunakan, adalah topik penelitian dan mungkin berubah secara dramatis dari jaringan saraf ke jaringan saraf lainnya. Arsitektur akan tergantung pada jenis prediksi yang dibuat dan jenis data yang dimasukkan ke dalam sistem, sama halnya seperti kita tidak bisa menggunakan fungsi linier untuk memodelkan data parabola, kita tidak boleh menggunakan jaringan saraf sama untuk menyelesaikan setiap masalah yang ada.