Jumlah Lapis Tersembunyi (Hidden Layer) Jaringan Syaraf Tiruan (Neural Networks)

Jumlah layer tersembunyi, atau yang dikenal dengan istilah hidden layer, menentukan keberhasilan jaringan syaraf tiruan (JST) dalam memecahkam masalah multilayer perceptron (waktu itu problem exclusive OR, XoR). Namun jumlah lapis tersembunyi sangat mempengaruhi proses training dengan backpropagation. Buku terkenal yang biasa jadi referensi riset JST tahun 90-an menyebutkan satu lapis tersembunyi sudah cukup dan tidak membutuhkan banyak komputasi saat pelatihan (Fausett, 1994).

Era Deep Learning

Proses pembelajaran JST merupakan bidang dari Machine Learning yang membahas proses pengaturan bobot dan bias suatu JST (lihat post yang lalu). Namun permasalahan mengenai performa menjadi kendala utama penerapan Machine learning pada multilayer JST, antara lain:

  1. Vanishing Gradient
  2. Overfitting, dan
  3. Computational load

Butuh 20 tahun, yaitu di-era 2000-an ketika masalah tersebut dapat diselesaikan dengan munculnya bidang baru yang dikenal dengan Deep Learning (Kim, 2017). Kalau diartikan dalam bahasa Indonesia: pembelajaran mendalam. Dalam di sini bermakna kompleksnya arsitektur dimana banyaknya lapis tersembunyi (di sini lapis beda dengan susun lho).

Lama saya tidak bermain-main dengan JST, jadi agak tertinggal, padahal ini bidang yang menarik. Apalagi dengan munculnya Deep Learning. Selamat ber-JST ria.

Referensi

 

Iklan

Klasifikasi, Pengklusteran dan Optimasi

Bahasa merupakan pelajaran pertama tiap manusia. Untuk mempelajari komputasi pun pertama-tama membutuhkan bahasa. Sebagai contoh adalah judul di atas yang terdiri dari tiga kata: klasifikasi (classification), pengklusteran (clustering) dan optimasi (optimization). Postingan ringan ini membahas secara gampang tiga kata di atas.

Klasifikasi

Sesuai dengan arti katanya, klasifikasi berarti memilah obyek tertentu ke dalam kelas-kelas yang sesuai. Komponen utama dari klasifikasi adalah classifier yang artinya pengklasifikasi. Jika tertarik dengan bidang ini maka akan bermain pada bagian pengklasifikasi ini. Jika menggunakan jaringan syaraf tiruan (JST) maka akan meramu bobot, bias, dan layer pada JST agar mampu mengklasifikasi suatu obyek. Jika menggunakan Support Vector Machine (SVM) meramu persamaan pemisah antara dua kelas atau banyak kelas (multi-class).
Sepertinya tidak ada masalah untuk konsep ini. Masalah muncul ketika ada konsep baru, misalnya pengklusteran.

Pengklusteran

Manusia itu makin belajar makin bertambah merasa bodoh, karena makin banyak pertanyaan yang muncul. Ketika klasifikasi tidak ada masalah dalam memahami maksudnya, munculnya konsep pengklusteran membuat pertanyaan baru di kepala, apa itu? Paling gampang memahami arti dari kluster, yaitu satu kelompok dalam area tertutup, zona, atau istilah lain yang menggambarkan kelompok yang biasanya memiliki kesamaan. Pengklusteran berarti mengelompokan beberapa obyek berdasarkan kesamaannya. Jadi harus ada obyeknya dulu, karena kalau tidak ada apa yang mau dikelompokan?

Lalu bedanya dengan klasifikasi? Penjelasan gampangnya adalah klasifikasi memisahkan berdasarkan kelas-kelas yang sudah didefinisikan dengan jelas sementara pengklusteran kelompok yang akan dipisahkan tidak didefinisikan lebih dahulu. Bisa juga dengan melatih berdasarkan data yang sudah ada kelasnya (target/label nya). Misal untuk kasus penjurusan, kita bisa saja mengklasifikasikan siswa masuk IPA jika nilai IPA nya lebih baik dari IPS dan sebaliknya untuk jurusan IPS. Sementara pengklusteran kita biarkan sistem memisahkan sekelompok siswa menjadi dua kelompok yaitu kelompok IPA dan IPS. Masalah muncul ketika mengklasifikasikan berdasarkan nilai IPA dan IPS-nya, jika guru IPAnya “Killer” sementara yg guru IPS “baik hati”, maka dengan classifier itu tidak akan ada yang masuk jurusan IPA. Sementara pengklusteran akan memisahkan siswa-siswa itu menjadi dua kelompok. Bisa saja yang nilai IPA nya misalnya 6 masuk ke kelas IPA karena nilai 6 itu udah top di sekolah itu.

Optimasi

Nah, apalagi ini? Kembali lagi sesuai dengan arti katanya optimasi berarti mencari nilai optimal. Optimal tentu saja tidak harus maksimal/minimal, apalagi ketika faktor-faktor yang ingin dicari nilai optimalnya banyak, atau dikenal dengan istilah multiobjective. Apakah bisa untuk klasifikasi? Ya paling hanya mengklasifikasikan optimal dan tidak optimal saja. Biasanya optimasi digunakan untuk mengoptimalkan classifier dalam mengklasifikasi, misal untuk JST adalah komposisi neuron, layer, dan paramter-parameter lainnya. Atau gampangnya, kalau klasifikasi mengklasifikasikan siswa-siswi ganteng dan cantik, optimasi mencari yang ter-ganteng dan ter-cantik. Sederhana bukan? Ternyata tidak juga. Banyak orang baik di negara kita, tetapi mencari beberapa yang terbaik saja ternyata malah “hang” sistemnya.

Natural Language Processing

Natural Language Processing (NLP) merupakan istilah lain dari computational linguistic dimana bahasa dikenali atau diproses dengan bantuan komputer. Tentu saja perlu pemahaman yang baik tentang teori bahasa yang melibatkan tata bahasa (grammar), semantik dan fonetik. Bahasa sendiri terdiri dari dua pokok yaitu berbicara (speaking) dan bacaan/tulisan (text).

Peran Machine Learning

Ada istilah classical computational linguistic. Istilah klasik berarti menggunakan komputasi model lama. Model lama di sini memang karena sudah dikembangkan sejak dulu. Teori bahasa dan otomata merupakan induk dari metode komputasi klasik. Sempat juga belajar, dari otomata, teori bahasa formal, hingga mesin turing. Sulit juga ternyata, karena melibatkan teorema-teorema yang tidak disukai oleh orang teknik (misalnya: for all .. there exist … dan sejenisnya), mungkin kalau orang MIPA sudah terbiasa.

Perkembangan yang lebih modern melibatkan statistik, sehingga dikenal dengan Statistical Natural Language Processing. Statistik mulai diterapkan dalam NLP karena melibatkan data-data yang berukuran besar sehingga melibatkan teori-teori statistik dalam komputasinya. Teori-teori probabilitas sangat penting karena berguna dalam melakukan suatu inferensi/perkiraan. Tetapi karena karakter bahasa yang fleksibel dan terkadang melibatkan hal-hal yang tidak pasti, tidak lengkap, dan sejenisnya yang sulit dikelola dengan statistik, membuat peran fuzzy dan teori-teori soft computing lainnya kian penting. Akibatnya peran machine learning dalam NLP saat ini kian penting. Dalam penerapannya machine learning biasanya digunakan untuk menangani data teks dan membuat suatu sistem yang menyerupai manusia dalam bekerja dengan bahasa alami.

Deep Learning dalam NLP

Saat ini Jaringan Syaraf Tiruan (JST) lebih disukai untuk mengelola NLP karena memiliki karakteristik yang robust. JST itu sendiri merupakan komponen utama dari subyek deep learning, yaitu JST yang melibatkan lapisan yang banyak (multilayer). Lihat post terdahulu tentang apa itu deep learing.

Penerapan dan Riset NLP Saat Ini

Jadi kesimpulannya, saat ini riset tentang NLP berkecimpung dengan machine learning yang mengelola input berupa teks dan output yang berupa bahasa yang semirip mungkin dengan manusia (natural language). Bidang ini dapat diterapkan ke dalam pembelajaran jarak jauh (PJJ) dalam mengelola naskah-naskah yang menjadi alat komunikasi antara siswa dengan tutor online. Dulu sempat jadi proposal disertasi saya sebelum beralih ke data spasial. Siapa tahu ada yang berminat dan mencoba melakukan riset PJJ (lihat riset tentang ini) yang melibatkan machine learning atau soft computing. Jawaban siswa yang menjiplak, absen online, dan lain-lain dapat ditangani dengan cepat dan akurat lewat bantuan soft computing. Semoga pembaca tertarik.

Referensi:

https://machinelearningmastery.com/natural-language-processing/

Inisialisasi Jaringan Syaraf Tiruan

Jaringan Syaraf Tiruan (JST) atau dalam bahasa Inggrisnya Artificial Neural Network, atau Neural Network saja, merupakan salah satu Machine Learning yang terkenal, dan saat ini juga dikenal dengan istilah Deep Learning (lihat post yg lalu). Sejak dulu setelah ditemukannya metode training terkenal “Backpropagation” atau rambatan error kian banyak yang meriset, terutama dalam proses pembelajarannya.

Dalam training JST, faktor inisialisasi bobot sangat menentukan kualitas dan kecepatan proses pembelajaran. Banyak faktor-faktor yang mempengaruhinya kecepatan proses pembelajaran, antara lain:

  • Nilai awal bobot dan bias
  • Laju pembelajaran
  • Topologi JST
  • Peningkatan laju pembelajaran (momentum)

Menggunakan pendekatan “Global Search” untuk menentukan parameter-parameter tersebut sangat tidak layak, karena pengaruh kecil saja sudah mempengaruhi konvergensi dari proses pembelajaran. Konvergensi ini sangat menentukan keberhasilan proses training.

Metode Inisialisasi Bobot

Beberapa periset sudah merekomendasikan metode-metode terbaik dalam menentukan inisialisasi bobot, antara lain:

  • Inisialisasi Bobot Acak. Ini merupakan cara paling sederhana. Lebih baik dari pada seluruh bobot diberi harga nol, yang menurut Rummerhald, tiap training cenderung memberikan hasil yang sama. Dengan bobot acak, akan diperoleh hasil pelatihan yang berbeda-beda, sangat tergantung dengan attractors, istilah untuk faktor-faktor yang mempengaruhi konvergensi.
  • Menggunakan analisa statistik dan geometri. Metode ini sangat menguras waktu. Salah satu yang terkenal adalah metode pseudo-inverse. Menurut peneliti masih banyak memiliki kelemahan.
  • Menggunakan properti yang khusus dari JST yang akan ditraining, misalnya untuk tipe JST radial basis, menggunakan cara yang berbeda dengan multilayer perceptron lainnya.

Tulisan yang membahas metode-metode inisialisasi bobot yang terkenal adalah Thimm, dkk (Thimm & Fiesler, 1994). Beberapa peneliti terkenal antara lain: Fahlman, Bottou, Boers, Smieja, Lee, Haffner, Watrous, dan yang saat ini banyak digunakan yaitu Nguyen dan Widrow. Silahkan baca bagi yang berminat, semoga bermanfaat bagi yang riset tentang JST.

Referensi:

Thimm, G., & Fiesler, E. (1994). High Order and Multilayer Perceptron Initialization. NEURAL NETWORKS.

 

Deep learning, Machine Learning & Artificial Intelligent

Tiga istilah yang mirip tetapi sejatinya berbeda. Untuk menjawabnya tidak ada salahnya membaca buku tentang deep learning karangan (Kim, 2017). Dalam buku tersebut, secara gampangnya dijelaskan, deep learning adalah salah satu bagian dari machine learning, sedangkan machine learning sendiri merupakan salah satu subjek dari artificial intelligent (AI).

Machine Learning

Machine Learning (ML) bukanlah mengajari seorang murid yang berupa mesin. Kalaupun iya, itu adalah AI. ML di sini adalah membuat sebuah model dengan melatihnya lewat suatu data. Dengan demikian model tersebut bisa menjawab inputan tertentu sesuai dengan hasil pembelajaran dari data yang dikenal dengan istilah data training. Dari data dapat dibuat dua model yang terkenal yaitu regresi dan klasifikasi. Yang saat ini banyak diteliti adalah klasifikasi yang terdiri dari supervised, unsupervised, dan reinforcement.

Deep Learning

Saat ini pemodelan yang terkenal adalah artificial neural network (JST). Metode ini sempat mengalami pasang surut. Setelah McCulloch – Pitt menemukan model JST pertama, terjadi kevakuman karena metode ini tidak mampu menyelesaikan masalah sederhana, misalnya logika XOR. Namun setelah 30 tahun kemudian, munculnya backpropagation, sebuat metode learning baru yang bisa diterapkan dalam multilayer perceptron, akhirnya JST mulai menggeliat lagi, namun kemudian redup lagi karena masalah performa. Setelah 20 tahun kemudian, yaitu pertengahan 2000-an, diperkenalkanlah Deep Learning yang berfokus dalam meningkatkan performa Hidden Layer, yaitu beberapa layer antara input dan output. Sehingga riset tentang JST semarak lagi. Yuk, baca bareng buku itu.

Ref

Kim, P. (2017). MATLAB Deep Learning. New York: Apress. https://doi.org/10.1007/978-1-4842-2845-6

 

Epoch, Iteration, dan Stop Condition

Perkembangan Soft-computing menciptakan istilah-istilah baru yang sebelumnya belum pernah ada. Hal ini terjadi karena soft computing mengadopsi istilah-istilah lain. Sebagai contoh dalam algoritma genetika, istilah-istilah mutasi, kromosom, dan istilah-istilah yang berasal dari teori genetik dan evolusi menjadi istilah dalam ilmu komputer. Bahkan algoritma yang sudah sejak lama digunakan sudah bergeser ke arah metode. Metode lebih general dibanding algoritma yang lebih spesifik dan penerapan khusus. Jika Anda perhatikan algoritma genetika, beberapa tulisan menulisnya dalam bahasa Inggris dengan Genetic Algorithms dengan tambahan “s” di belakang algoritma. Hal ini karena algoritma genetika melibatkan beberapa algoritma seperti roulette wheel, encoding ke bits string dan sebaliknya (decoding), dan lain-lain. Namun beberapa buku tidak menambahkan “s” di belakang algoritma (Genetic Algorithm) dengan anggapan bahwa algoritma genetika adalah satu metode.

Beberapa rekan menanyakan istilah terkenal dalam machine learning yaitu “Epoch”. Banyak yang mengartikannya dengan iterasi. Tetapi mengapa tidak mengambil istilah iterasi saja? Jawabannya berasal dari training artificial neural network. Salah satu metode training, yaitu propagasi balik (backpropagation), menggunakan istilah epoch karena ketika melakukan satu kali iterasi dilakukan dengan rambatan balik. Untuk gampangnya, misalnya satu iterasi melibatkan proses a-b-c-d, maka epoch dalam satu “iterasi”-nya (dengan istilah satu kali epoch) melibatkan a-b-c-d-c-b-a. Dua iterasi: a-b-c-d-a-b-c-d, sementara dua epoch: a-b-c-d-c-b-a-b-c-d-c-b-a. Atau gampangnya iterasi itu epoch tanpa rambatan balik (hanya maju saja).

Beberapa rekan juga menanyakan metode yang cocok untuk stop condition. Untuk iterasi, sejak dulu kita sudah mengenal dengan error atau delta error. Jika error antara satu iterasi dengan iterasi berikutnya cukup kecil maka proses perhitungan berhenti. Error yang saat ini sering digunakan adalah Mean Square Error. Silahkan gunakan metode lain, misalnya Gradient Descent dengan prinsip kemiringan. Kemiringan diambil dari posisi saat ini dibanding epoch maupun iterasi sebelumnya. Jika masih besar selisihnya berarti masih miring. Ibaratnya kendaraan beroda jika masih miring masih bergerak turun, sementara jika sudah tidak begitu miring jalanan-nya, kendaraan itu bergerak perlahan, dan walaupun belum berhenti, dalam komputasi sudah dihentikan demi efisiensi. Untuk prakteknya perhatikan grafik hasil pelatihan jaringan syaraf tiruan di akhir prosesnya. Teringat saya ketika presentasi hasil penelitian di kampus. Karena reviewer adalah doktor dari FAI mempertanyakan mengapa perlu “pelatihan” karena buang-buang waktu dan biaya (dikiranya pelatihan JST itu: pelatihan/kursus/workshop).

Melihat Data Network Hasil Training JST – Versi GUI

Pada postingan yang lalu telah dibahas cara mengetahui hasil training Jaringan Syaraf Tiruan (JST) dengan command window. Begitu juga bagaimana mengupdate salah satu parameternya, misalnya bias dan bias, sudah dibahas. Tetapi beberapa pembaca sepertinya agak kesulitan dengan instruksi-instruksi lewat command window. Oleh karena itu di sini akan dibahas cara yang jauh lebih mudah yaitu dengan “nntool”, salah satu GUI bawaan Matlab untuk merakit JST.

Sebenarnya masalah ini muncul ketika saya mencari kembali hasil training JST untuk peramalan (lihat post peramalan dengan JST di sini). Masalah yang sering dijumpai adalah “lupa”, karena banyaknya yang harus dikerjakan terkadang membuat seseorang lupa. Untungnya saya aktif menulis, tinggal masukan kata kunci di kolom “search” blog, catatan terdahulu yang dicari langsung ketemu. Jadi blog itu seperti catatan yang disimpan di “awan (cloud)” yang bisa diakses di mana saja dan kapan saja. Buka Matlab dan ketik nntool di command window.

Sebelumnya load terlebih dahulu Mat-file hasil training yang berisi variabel-variabel network. Di sini saya ada 7 variabel network yang saya sendiri lupa konfigurasinya. Setelah menekan “Import” di nntool maka muncul pilihan variabel yang akan dilihat. Ambil salah satu variabel hasil loading yang ada di workspace Matlab, dilanjutkan dengan kembali menekan Import setelah memilihnya.

Tekan Ok ketika ada informasi bahwa netwok telah berhasil diimpor. Tutup lagi sementara jendela Import to network/Data Manger. Perhatikan nntool kini telah muncul Network1 hasil impor. Untuk melihat isi dari variabel itu dobel klik saja di variabel tersebut.

Sebenarnya gambar di atas sudah cukup untuk mengetahui struktur JST yang telah dilatih dahulu. Misalnya input yang berjumlah 4 variabel dengan 1 keluaran. Hidden layer yang terletak di tengah tampak berjumlah sembilan. Gambar di atas khusus untuk Matlab versi 2013 ke atas, sementara Matlab versi yang terdahulu tidak memunculkan informasi tentang neuron-neuronnya. Silahkan tekan View/Edit Weights jika ingin melihat konfigurasi bobot-bobotnya. Kebetulan saya memiliki 4 variabel data yang akan dicoba prediksi dengan JST tersebut. Atau jika tidak ada, buat saja sendiri di command window. Tambahkan data input di nntool.

Tekan tombol Simulate pada network untuk memprediksi. Cara ini bisa juga dengan command window lewat instruksi sim.

Ada pesan untuk melihat nntool karena hasilnya dikirim ke sana. Jika sudah kembali ke nntool, tekan dua kali Output. Tampak hasilnya.

Sepertinya dengan nntool tidak banyak mengetik, alias tinggal klak-klik mouse saja. Jadi dengan empat masukan pada data akan menghasilkan satu keluaran (0.48). Di sini sebaiknya kita menggunakan normalisasi data, kalau bisa normal Euclidean, karena matrix yang dibuat dengan normal euclidean ortogonal yang disukai JST.