Rabu, 03 Juli 2019

Matlab-Pengaruh Rentang Bilangan Random pada Neural Network Backpropagation


Tuning algoritma yang menggunakan bilangan random terkadang membuat pusing, hal ini penulis alami ketika menulis sebuah algoritma jaringan syaraf tiruan backprogation yang terdiri dari hal utama 2 yaitu propagasi maju dan propagasi mundur.

Awalnya penulis tidak terlalu menghiraukan mengenai generator random yang telah disediakan oleh function built in dan dibiarkan generator random tersebut mempunyain rentang nilai 0 s.d 1 dengan sebab bahwa jenis fungsi aktifasi pada algoritma melibatkan sigmoid.

Masalah pun terjadi ketika di run berulang-ulang mempunyai hasil yang berbeda cukup signifkan, misalkan ketika di run ke 1 menghasilkan akurasi 68%, run ke 2 menghasilkan 98% dan begitu terus menerus. Hal ini menjadi tidak stabil, walaupun sempat menyerah. Penulis berpikir memberikan jeda waktu untuk generator random agar bilangan tersebut makin heterogen pun tidak menjadi solusi yang baik.

Setelah dicermati berkali-kali bahwa algoritma tersebut mempunyai keluaran bobot dan bias yang mempunyai rentang nilai -1 sd. +1 sehingga inilah pangkal permasalahannya. Sehingga generator random untuk membangkitkan bilangan random untuk bobot dan bias pada jaringan syaraf tiruan pun diperbaiki, anda bisa melihat a dan b berikut



a = rand(5,5)
b = -1 + (1+1)*rand(5,5)

Hasilnya

a =

    0.2535    0.0006    0.6886    0.4179    0.9950
    0.8355    0.5332    0.2453    0.8139    0.0751
    0.0985    0.2122    0.9374    0.4401    0.1696
    0.7932    0.5866    0.6871    0.7625    0.5142
    0.5613    0.4621    0.9305    0.0088    0.7791


b =

   -0.2824   -0.3162    0.1841    0.9995    0.3907
   -0.4133   -0.9002    0.6260   -0.9594   -0.0650
   -0.6959   -0.5908   -0.2271    0.3183   -0.4068
    0.8105    0.0474    0.5658    0.0658   -0.1585
   -0.4544   -0.5254    0.4300    0.9144   -0.2076


Setelah diperbaiki menjadi berikut



Terkadang saat menulis kode untuk menguji kasus kecil (misalkan untuk menguji kasus logika non linear XOR) tampaknya algoritma berjalan dengan  baik. Tapiii ketika di scale up untuk menguji kasus yang besar dan dataset yang cukup kompleks, ntah kenapa algoritma tersebut menjadi tidak stabil. Maka alangkah baiknya perlu dilakukan tuning sana-sini, seperti penulis lakukan pada kasus diatas yang semula generator random punya bilangan 0 s.d 1 menjadi tidak stabil ketika diuji untuk kasus yang lainnya. Kode semula sebagai berikut



wh = rand(node_input,node_hidden);
 
bh = rand(1,node_hidden);
 
wout = rand(node_hidden,node_output);
 
bout = rand(1,node_output);

Kemudian di tuning sesuai dengan trial and error, maka yang terbaik seperti ini

wh = -1 + (1+1)*rand(node_input,node_hidden)*0.5;
 
bh = -1 + (1+1)*rand(1,node_hidden)*0.1;
 
wout = -1 + (1+1)*rand(node_hidden,node_output)*0.5;
 
bout = -1 + (1+1)*rand(1,node_output)*0.1;



Akhirnya penulis bisa tersenyum lepas, algoritma berjalan stabil sesuai harapan dengan error tiap iterasi semakin turun.

Dapatkan buku kami
http://www.softscients.web.id/2018/11/buku-belajar-mudah-python-dengan.html
atau mengajukan pertanyaan ke
http://www.softscients.web.id/p/konsultasi.html




Tidak ada komentar: