Tipe Machine Learning

Walaupun kecerdasan buatan (Artificial Intelligent), Machine Learning, dan Deep Learning berbeda tetapi satu sama lain berhubungan. Deep Learning, yang dimotori oleh Jaringan Syaraf Tiruan lapis banyak, adalah salah satu jenis Machine Learning. Machine Learning itu sendiri adalah salah satu jenis dari kecerdasan buatan.

Machine Learning yang merupakan proses induksi ada tiga jenis. Penerapannya beragam, dari pengenalan gambar, pengenalan suara, pengenalan bahasa, dan lain-lain. Berikut ini jenis-jenisnya:

1. Suppervised Learning

Kebanyakan Machine Learning diterapkan pada jenis ini. Alur prosesnya antara lain: 1) memilih basis pengetahuan untuk menyelesaikan problem. Bandingkan jawaban dengan hasil sesungguhnya, 2) jika jawaban salah, modifikasi basis pengetahuan. Langkah 1) dan 2) diulangi terus hingga jawaban mirip dengan hasil sesungguhnya. Basis pengetahuan itu sendiri diistilahkan dengan Model. Jika disimpulkan suppervised learning memiliki pola:

{ input, correct output }

Dua tipa aplikasi terkenal dari machine learning jenis ini adalah klasifikasi dan regresi. Jika klasifikasi membagi dalam kelas-kelas yang diskrit, regresi bukan dalam kelas melainkan harga tertentu. Masalah yang sering dijumpai adalah Overfitting, yaitu adanya anomali dimana akurasi training yang bagus ketika diaplikasikan dalam kondisi real jatuh. Hal ini terjadi karena proses training tidak mampu menghasilkan generalisasi dari data dalam artian terlalu kaku mengikuti data training.

Namun terkadang klasifikasi dan regresi bekerja sama membentuk sistem seperti support vector regressin, juga neural network regression. Biasanya mengklasifikasi dulu baru meregresi hasil pastinya.

2. Unsuppervised Learning

Berbeda dengan suppervised learning, pada unsuppervised learning tidak diperlukan hasil sesungguhnya (correct output). Pada mulanya hal ini sulit dimengerti, tetapi dapat diterapkan untuk kasus yang memang tidak ada hasil sesungguhnya. Polanya adalah sebagai berikut:

{ input }

Salah satu representasi dari aplikasi unsuppervised learning adalah pengklusteran (clustering) dimana data training diinvestigasi karakteristiknya sebelum dikategorisasi.

3. Reinforcement Learning

Machine learning ini memasukan aspek optimasi dalam pembelajarannya. Jadi selain input, beberapa output dengan grade/kualitasnya digunakan untuk training. Biasanya diterapkan dalam bidang kontrol dan game plays.

{ input, some output, grade for this output }

Clustering dan Classification

Dua aplikasi tersebut serupa tapi tak sama. Untuk jelasnya kita ambil kasus pembagian kelas siswa menjadi IPA dan IPS. Jika kita memiliki data dengan label (output) IPA jika nilai IPA lebih besar dari IPS dan begitu pula sebaliknya kelas IPS jika nilai IPS lebih besar dari IPA, maka karena proses learningnya memiliki target/label/output, maka masuk kategori suppervised learning dan otomatis masuk domain klasifikasi. Namun jika kebanyakan guru IPA-nya “killer”, maka dikhawatirkan seluruh siswa masuk kelas IPS. Disinilah peran pengklusteran. Di awal kita tidak memiliki output tertentu, biarlah data yang membagi menjadi dua, baru diselidiki mana kelompok kelas IPA mana IPS. Tetapi waspadalah, jangan sampai kita membagi dua kategori (cluster) yang salah, bukannya IPA dan IPS malah kelas IPA dan IPS yang bagus dan kelas IPA dan IPS yang jelek, alias membagi siswa menjadi dua kategori siswa pintar dan siswa yang perlu lebih giat belajar (kata Kho Ping Hoo tidak ada orang pintar dan bodoh, tetapi tahu dan tidak tahu). Semoga bermanfaat.

Menormalkan Data Untuk Range Sempit

Beberapa literatur, seperti (Hagan, M. T., Demuth, H. B., & Beale 1997) merekomendasikan penggunakan normal Euclidis (Euclidean) untuk menormalkan data agar hanya berada pada rang [0,1]. Alasannya adalah keortogonalan matriks konversi yang mempermudah Jaringan Syaraf Tiruan (JST) dalam proses pelatihan (Training). Postingan kali ini memperkenalkan teknik yang sering digunakan pada proses peramalan (Forecasting) dengan rentang data tertentu yang sempit, misalnya range [0.2,0.9]. Caranya adalah dengan menggunakan rumusan di bawah ini (Siang 2009):

dengan b dan a adalah data maksimum dan minimum. x’ adalah hasil konversi dari harga awal x. Perhatikan ketika x adalah data maksimum maka x’ akan berharga 0.7+0.2 sementara jika sebaliknya, x data minimum, maka 0 + 0.2 yang cocok dengan range dari 0.2 hingga 0.9. Tetapi ketika ingin dipresentasikan kembali hasil peramalan ke nilai real-nya perlu konversi kembali dengan formula:

Entah mengapa saya cenderung menggunakan normal Euclidis (fungsi normalize atau dengan memanfaatkan norm jika tidak ada fungsi normalize). Untuk versi 2013 sepertinya sudah ada fungsi normalize. Berikut tampilan Matlab jika ada fungsi yang bersangkutan. Semoga bermanfaat.

  • >> help normalize
  • — help for dfilt.normalize —
  • normalize Normalize coefficients between -1 and 1.
  • G = normalize(Hd) normalizes the feed-forward coefficients between -1
  • and 1 and returns the gain G due to normalization. Subsequent calls to
  • normalize will not change the feed-forward coefficients and G will
  • always return the gain used in the first normalization.

 

  • See also dfilt.denormalize.
  • Copyright 1988-2004 The MathWorks, Inc.

Referensi

Hagan, M. T., Demuth, H. B., & Beale, M., 1997. Neural Network Design, Boston: PWS Publishing Co.

Siang, J.J., 2009. Jaringan Syaraf Tiruan dan Pemrogramannya Menggunakan Matlab, Yogyakarta: Penerbit Andi.

 

Sanggupkah ANFIS Mengenali Pola Gambar?

[m.kul/ruang/dosen:pengenalan-pola/software/rahmadya]    

Adaptive Neuro-Fuzzy Inference System (ANFIS) merupakan gabungan Jaringan Syaraf Tiruan (JST) dengan Fuzzy Inference System (FIS). Cara kerja neuron pada JST (lihat JST sederhana) lebih sederhana dibanding dengan ANFIS (lihat post dasar2 ANFIS). Pada ANFIS jumlah neuron harus mengikuti jumlah masukan dan fungsi keanggotaan (membership function) tiap masukan. Selain itu tiap bilangan numerik (crisp) masukan harus dikonversi menjadi fuzzy sets. Akibatnya butuh proses komputasi dibanding JST yang langsung meneruskan masukan numerik ke pembobotan di neuron.

Kasus Citra Hitam-Putih

Citra hitam-putih (B/W) hanya mengenal dua angka yaitu 1 dan nol yang merepresentasikan citra (beberapa peneliti menganjurkan dengan 1 dan -1), sehingga tiap masukan hanya mengenal dua nilai itu. Secara intuitif JST lebih praktis dibanding ANFIS karena kemampuan fuzzy dari ANFIS tidak berfungsi jika hanya bernilai biner (1 dan 0). Tetapi jika kasusnya RGB atau CMYK dengan range bilangan yang cukup besar 0 hingga 255 maka peran fuzzy pada ANFIS jadi penting.

Masalah Jumlah Masukan pada ANFIS

Jika menggunakan data angka 1 sampai 5 yang direpresentasikan dengan matriks berukuran 5×3 maka kita memiliki vektor berukuran 1×15 untuk tiap-tiap angka. Jadi ada 15 input pada ANFIS-nya. Ketika dipraktekan di kelas, baik Matlab 2013 maupun 2014 dengan prosesor i5 dan RAM 4 Gb, anfisedit pada Matlab tidak sanggup.

Pesan kesalahan tersebut muncul di tahap Generate FIS yaitu setelah tombol OK ditekan. Matlab tidak sanggup meng-create ANFIS dengan masukan sebanyak 15. Berikut ini dicoba dengan mereduksi tiap angka menjadi 5 masukan.

Rule akan terbentuk sebanyak 32 buah kombinasi dari MFs (membership function) dengan satu masukan dengan masukan lainnya. Ketika di-training dengan hybrid method dihasilkan ANFIS yang siap dipakai.

Mereduksi Jumlah Masukan

Cara mereduksi masukan adalah dengan menerapkan fungsi imresize pada Matlab. Fungsi ini akan menghasilkan citra yang lebih kecil ukurannya. Tapi tentu saja akan sedikit berbeda dengan citra sebelum direduksi. Selain itu citra yang tadinya berbentuk biner berubah menjadi real. Misal kita memiliki image angka dua dengan ukuran 5×3 (atau vektor sepanjang 15 kolom).

  • >> duaReal
  • duaReal =
  • 1 1 1
  • 0 0 1
  • 1 1 1
  • 1 0 0
  • 1 1 1

Jika diterapkan fungsi imshow akan diperoleh image angka 2 (lihat yang berwarna putihnya).

  • imshow(duaReal,’InitialMagnification’,5000)

Selanjutnya kita reduksi dengan fungsi imresize. Perhatikan di bagian akhir (0.75) menyatakan persentasi pengecilan dari ukuran sebenarnya.

  • >> duaCrop=imresize(duaReal,.75)
  • duaCrop =
  • 0.6902 0.8532 1.0162
  • 0.4380 0.7667 1.0654
  • 0.8851 0.2718 0.2707
  • 0.9837 0.9288 0.9316

Gambar berikut adalah pengecilan menjadi setengahnya (kiri) dan diperbesar 3 kali lipat (kanan). Sepertinya yang diperkecil tidak begitu jelas.

Jadi bagaimana, sanggupkah ANFIS mengenali pola citra? Sepertinya perlu membatasi jumlah masukan kira-kira 5 sampai 10 untuk laptop rata-rata. Selain itu perlu preprocessing untuk mereduksi pola. Jangan lupa, perhatikan batas pengecilan maksimal agar citra masih dikenali, dan terhindar dari false positive. Sekian, selamat mencoba.

Prinsip Kerja Adaptive Neuro Fuzzy Inference System (ANFIS)

Adaptive Neuro Fuzzy Inference System (ANFIS) menggabungkan prinsip kerja Jaringan Syaraf Tiruan (JST) dengan Fuzzy Inference System (FIS). Dengan menggabungkan ANFIS denang JST diharapkan dapat meminimalisir kelemahan masing-masing metode. Kedua metode tetap menggunakan prinsip machine learning.

Plus Minus ANFIS

FIS yang mengharuskan terlibatnya expert dalam menyusun rule, pada ANFIS tidak lagi diperlukan. ANFIS sendiri selain mampu mengolah angka numerik, juga pengetahuan berbasis bahasa (linguistic). Selain itu, ANFIS lebih transparan terhadap pengguna dibanding JST yang seperti kotak hitam (black box). Hal ini karena rule hasil olah ANFIS dapat diketahui oleh pengguna. Namun kebanyakan riset menunjukan bahwa JST lebih akurat dibanding ANFIS. Di antara dua jenis FIS (mamdani dan sugeno), untuk ANFIS sugeno lebih dianjurkan karena proses lebih cepat.

Bentuk ANFIS

Berikut diambil dari jurnal internasional yang membahas cara kerja ANFIS [1]. Mirip dengan JST, ada juga layer dalam ANFIS tetapi jumlahnya rata-rata lima lapis seperti gambar berikut:

Contoh di atas adalah ANFIS dengan dua masukan dan satu keluaran (f). Berikut keluaran (diberi simbol O besar) di tiap-tiap lapis.

Lapis Pertama

Lapis pertama berfungsi mengkonversi angka crisp menjadi bilangan fuzzy dengan menggunakan fuzzy sets. Keluarannya adalah:

Lapis Kedua

Jika pada lapis pertama hanya melibatkan tiap-tiap masukan, pada lapis kedua tiap masukan menuju lapis yang sama guna mengetahui kekuatan penyalaan (firing strength). Fuzzy Sets dikalikan antara satu masukan dengan masukan lainnya dengan hubungan sebagai berikut:

Lapis Ketiga

Pada lapis ketiga dilakukan perhitungan normalisasi sebelum diterapkan ke lapis keempat. Normalisasi adalah proses pembobotan ulang agar diperoleh total/max bernilai satu.

Lapis Keempat

Setelah pembobotan yang telah dinormalkan selesai, proses dilanjutkan dengan mengalikan dengan fungsi yang melibatkan masukan (x dan y) untuk menghasilkan keluaran yang sudah dalam bentuk CRISP.

Lapis Kelima

Langkah terakhir adalah dengan mengakumulasi hasil dari lapis keempat (untuk dua rule).

Sementara untuk metode learning, dua metode bisa digunakan antara lain: backpropagation dan hybrid. Prinsipnya adalah meminimalisir error yang terjadi. Ada dua metode penghitungan error: 1) Mean Absolute Percent Error (MAPE) dan 2) Mean Absolute Deviation.

Reference

[1]    M. Şahin and R. Erol, “A Comparative Study of Neural Networks and ANFIS for Forecasting Attendance Rate of Soccer Games,” Math. Comput. Appl., vol. 22, no. 4, p. 43, 2017.

 

Penjelasan Sederhana Jaringan Syaraf Tiruan – Kasus Logika OR

Dulu sempat ambil mata kuliah “Artificial Intelligent & Neuro-Fuzzy” dengan buku referensi yang digunakan adalah “Neural Network Design” karangan Hagan. Materinya cukup berat karena satu buku tersebut harus dikuasai dalam setengah semester (sampai UTS/Midterm Examination). Selain itu buku tersebut sepertinya ditujukan untuk level advance (lanjut). Postingan ini bermaksud menjelaskan secara sederhana prinsip kerja jaringan syaraf tiruan. Kasus yang dijadikan contoh adalah bagaimana jaringan syaraf tiruan (JST) sederhana mampu menjalankan Logika OR.

Gambar berikut adalah JST dengan jumlah neuron hanya satu buah. Neuron adalah sel di otak yang memiliki kemampuan menyimpan dan mentransfer informasi. Disimpan dalam bentuk bobot dan bias serta mentransfer dengan fungsi aktivasi.

W1 dan W2 adalah bobot yang mengalikan tiap input yang akan diteruskan ke neuron lainnya. Sementara itu b adalah bias yang menjumlahkan total masukan yang telah dikalikan bobot. Pada gambar di atas fungsi aktivasi belum dilibatkan. Persamaan matematis gambar di atas adalah sebagai berikut:

Dengan cara training, misal backpropagation, W dan b dapat ditemukan. Tetapi sebenarnya dengan intuisi kita dapat menemukan bahwa W1 dan W2 berharga masing-masing “1” dan biasnya “nol”. Kita coba memasukan ke persamaan y di atas diperoleh akurasi yang baik hanya saja di bagian akhir, yaitu ketika masukan X1 dan X2 kedua-duanya “1” yang seharusnya keluaran y = 1 di sini berharga “2”. Oleh karena itu diperlukan fungsi aktivasi seperti gambar di bawah ini.

Di antara ketiga fungsi aktivasi, yaitu tangen sigmoid, tangga, dan purelin, yang cocok dengan kasus kita adalah tangen sigmoid. Di sini tangga bisa diterapkan, tetapi agak sulit jika digunakan untuk backpropagation yang membutuhkan diferensiasi. Tangen sigmoid (juga log sigmoid) jika diturunkan berharga -1, mudah untuk dikalkulasi saat proses pembobotan ulang (rambat balik dari target ke input). Sementara purelin tidak cocok karena jika input 2 keluarnya akan 2 juga (jika y=x persamaan purelin-nya). Dengan menambah fungsi aktivasi sebelum ke output, nilai 2 dengan fungsi tangen sigmoid bernilai 1 sehingga sesuai dengan table kebenaran logika OR. Gambar di atas sebenarnya cuplikan video yang saya upload di youtube berikut ini:

 

 

 

Merubah Format Image 1 dan 0 Menjadi 1 dan -1 Secara Cepat

Jaringan Syaraf Tiruan berfungsi menirukan fungsi otak manusia yang berisi neuron-neuron. Neuron ini ketika bekerja mengatur bobot dan bias sesuai dengan masukan dan targetnya. Ketika mengatur bobot dan bias terkadang diperlukan bilangan-bilangan yang mudah diolah. Biasanya lebih disukai yang sudah dinormalkan (normal Euclidean). Selain itu untuk kasus tertentu seperti data gambar, lebih disukai yang berbentuk 1 dan -1 dibanding dengan 1 dan 0 (lihat buku-buku tentang JST), untuk image black-white. Sementara bentuk 1 dan nol lebih mudah ketika mengetik/membuat matriks (karena tanpa mengetik minus “-“). Tentu saja repot jika mengubah manual nol menjadi -1, tetapi dengan cara berikut, hanya diperlukan satu langkah untuk merubah 1 dan nol menjadi 1 dan -1.

  • >> empat=[1 0 1;1 0 1;1 1 1;0 0 1;0 0 1]
  • empat =
  • 1 0 1
  • 1 0 1
  • 1 1 1
  • 0 0 1
  • 0 0 1

Logika sederhana adalah dengan mengurang 0 dengan 1 agar menjadi -1. Tetapi tentu saja yang 1 akan menjadi nol. Oleh karena itu kita kalikan dua agar 1 menjadi 2 dan jika dikurangkan 1 menjadi 1. Sementara nol dikalikan 2 tidak berubah.

  • >> empatb=empat*2
  • empatb =
  • 2 0 2
  • 2 0 2
  • 2 2 2
  • 0 0 2
  • 0 0 2

Setelah dikalikan dengan 2 kurangkan dengan satu seluruh matriks itu. Gunakan fungsi ones untuk membuat matriks berisi angka 1.

  • >> empatc=empatb-ones(5,3)
  • empatc =
  • 1 -1 1
  • 1 -1 1
  • 1 1 1
  • -1 -1 1
  • -1 -1 1

Tampak hasilnya sesuai dengan yang diinginkan. Coba lihat dengan fungsi imshow apakah hasilnya tampak sama dengan sebelumnya, yaitu angka “4”. Beberapa literatur menyarankan menggunakan versi -1 dibandingkan dengan nol ketika mengolah data dengan jaringan syaraf tiruan (neural networks).

imshow(empatc,’InitialMagnification’,5000)

Lihat yang berwarna putih menunjukan angka “4”. Jadi caranya mudah, kalikan dengan “2” dan kurangkan dengan matriks 1 (fungsi “ones”). Sekian, semoga bermanfaat.

Menampilkan Citra Kecil dengan Fungsi IMSHOW Matlab

Citra biasanya ditampilkan dari file gambar (jpg, bmp, tiff, dan sejenisnya). Tetapi di Matlab, citra bisa juga ditampilkan dari matriks. Berikut ini contoh matriks yang menampilkan angka 7 segment. Buka Matlab, arahkan Current Directory ke folder yang sudah kita persiapkan dan ketik matriks yang menyatakan angka “empat” berikut ini:

  • >> empat=[1 0 1;1 0 1;1 1 1;0 0 1;0 0 1]
  • empat =
  • 1 0 1
  • 1 0 1
  • 1 1 1
  • 0 0 1
  • 0 0 1

Perhatikan angka satu di matriks di atas menunjukan formasi angka 4. Untuk melihat bentuknya dengan jendela baru, gunakan fungsi imshow().

Namun masalahnya adalah bentuknya kecil sekali. Oleh karena itu perlu ditambahkan parameter InitialMagnification untuk memperbesar citra hasil fungsi tersebut. Berikut ini contohnya:

>> imshow(empat, ‘InitialMagnification’, 5000)

Perhatikan angka di atas, yang berwarna putih adalah angka “1” pada matriks empat yang telah dimasukan sebelumnya. Selamat mencoba, semoga bermanfaat.

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

 

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.

Fungsi Keanggotaan (Membership Function)

Fuzzy Inference System (FIS) memiliki fungsi keanggotaan (MF) ketika mengarahkan masukan ke keluaran tertentu. MF yang banyak digunakan adalah linear (purelin), tangen sigmoid (tansig), atau logaritmic sigmoid (logsig). MF yang tersedia di matlab tersebut digunakan juga untuk Jaringan Syaraf Tiruan (JST). Oiya, yang benar “syaraf” atau “saraf” ya?

Untuk mengetahui persamaan matematis MF tersebut, ketik saja “help tansig“, “help logsig” atau “help purelin”, sesuai dengan MF yang akan dipelajari.

Tansig merupakan fungsi eksponensial denga nilai maksimal 1 (kondisi jenuh). Coba plot fungsi dengan kode yang dicontohkan oleh “help” tadi. Berikut merupakan hasil running-nya.

Jika skripsi/tesis dibebaskan memilih fungsi keanggotaan, lebih mudah menggunakan fungsi purelin atau berbentuk segitiga karena lebih mudah menghitungnya secara manual yang terkadang diminta membandingkan antara hitungan manual dengan program. Jika akan diimplementasikan, sebaiknya gunakan logsig atau tansig.