Particle Swarm Optimization merupakan salah satu teknik heuristik untuk mencari solusi optimal dari fungsi objektif yang tidak ribet dengan meniru perilaku kawanan hewan, sedangkan NN Backpropagation dikenal handal dalam kasus klasifikasi dan dataset dalam ruang dimensi N yang bersifat non linear.
Hibrid kedua diatas tentu sangat menarik, semuanya handal dalam masing-masing kasus. Nah, penulis mencoba mendesain fungsi objektif yang bisa digunakan ke PSO dengan desain dari core engine NN. Perlu diketahui bahwa NN yang digunakan dalam tulisan ini terdiri dari 2 perhitungan yaitu forward dan backward.
Desain dari fungsi objektif PSO menjadi menarik, karena core engine NN harus ‘diinjeksi’ langsung kepada PSO dan harus ‘dibungkus’ rapi menjadi satu sehingga penulis harus membuat kode NN terlebih dahulu. Salah satu rujukan NN yaitu buku karangan Sri Kusuma Dewi
Berikut kode finalnya.
%kode ini adalah teknik hibrid antara NN dan PSO %NN dengan tipe backpropagation yang terdiri dari 2 langkah %1. langkah maju atau forward %2. langkah mundur atau backward %NN menggunakan fungsi aktifasi sigmoid dan update bobot bias %menggunakan fungsi turunan pertama sigmoid %secara umum NN akan melakukan update bobot dan bias setiap melakukan %iterasi hal ini punya kelemahan utama yaitu tidak adanya seleksi %sehingga setiap ada iterasi, maka terjadi update bobot dan bias %sedangkan PSO akan memperbaiki kelemahan ini yaitu %update bobot dan bias menggunakan aturan PSO %sehingga bobot dan bias hasil akhir menjadi optimal %fungsi objektif PSO dibangun atas 2 langkah utama dari NN yaitu terdiri %dari perhitungan maju dan mundur sehingga didapatkan error %error terkecil menjadi paramater PSO %setelah didapatkan bobot dan bias dari PSO %akan digunakan kembali sebagai input perhitungan NN yaitu %perhitungan maju untuk memprediksi hasil akhir %kode ini bertujuan untuk update bobot dan bias clc;clear all;close all; help demo_PSO_NN disp('Kasus sederhana yang dipilih yaitu logika non lineaar Boolean XOR') [X,target,lr]=inputtarget(); disp('Input dan target yaitu') disp(table(X,target)) disp('NN standar akan melakukan pelatihan....') epoch = 5000; node_hidden = 3; disp(['Jumlah epoch ' num2str(epoch)]) disp(['Nilai learning rate ' num2str(lr)]) disp(['Jumlah node hidden ' num2str(node_hidden)]) [jaringan] = latihjaringan(X,target,epoch, node_hidden,lr); prediksi_nn = simulasijaringan(jaringan,X); disp('NN selesai... ') nvars = 13; lb = ones(1,13)*-100; %nilai lower bound ub = ones(1,13)*+100; %nilai upper bound disp('Proses pencarian oleh PSO.....') disp(['Dengan jumlah partikel sebanyak 50 dan iterasi 10']) options = optimoptions('particleswarm','SwarmSize',50,... 'HybridFcn',@fmincon,'Display','iter','MaxStallIterations',10,... 'FunctionTolerance',1e-3,'DisplayInterval',10); [bobot_bias,fval,exitflag,output] = particleswarm(@objektif,nvars,lb,ub,options); disp('PSO selesai....') [wh,bh,wout,bout] = splitbobotbias(bobot_bias); %fungsi ini dipanggil ulang untuk melakukan prediksi %yaitu perhitungan maju-forward dari NN digunakan kembali [prediksi_pso,hiddenlayer_activations] = perhitunganmaju(X,wh,bh,wout,bout); disp('hasil prediksi PSO dan NN') disp(table(target,prediksi_pso,prediksi_nn)) disp('Terlihat bahwa nilai dari PSO lebih mendekati target daripada NN')
kode ini adalah teknik hibrid antara NN dan PSO NN dengan tipe backpropagation yang terdiri dari 2 langkah 1. langkah maju atau forward 2. langkah mundur atau backward NN menggunakan fungsi aktifasi sigmoid dan update bobot bias menggunakan fungsi turunan pertama sigmoid secara umum NN akan melakukan update bobot dan bias setiap melakukan iterasi hal ini punya kelemahan utama yaitu tidak adanya seleksi sehingga setiap ada iterasi, maka terjadi update bobot dan bias sedangkan PSO akan memperbaiki kelemahan ini yaitu update bobot dan bias menggunakan aturan PSO sehingga bobot dan bias hasil akhir menjadi optimal fungsi objektif PSO dibangun atas 2 langkah utama dari NN yaitu terdiri dari perhitungan maju dan mundur sehingga didapatkan error error terkecil menjadi paramater PSO setelah didapatkan bobot dan bias dari PSO akan digunakan kembali sebagai input perhitungan NN yaitu perhitungan maju untuk memprediksi hasil akhir Kasus sederhana yang dipilih yaitu logika non lineaar Boolean XOR Input dan target yaitu X target ______ ______ 1 1 0 1 0 1 0 1 1 0 0 0 NN standar akan melakukan pelatihan.... Jumlah epoch 5000 Nilai learning rate 0.25 Jumlah node hidden 3 NN selesai... Proses pencarian oleh PSO..... Dengan jumlah partikel sebanyak 50 dan iterasi 10 Best Mean Stall Iteration f-count f(x) f(x) Iterations 0 50 0.1385 0.4868 0 10 550 8.72e-56 0.3458 0 Optimization ended: relative change in the objective value over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance. Switching to the hybrid optimization algorithm (FMINCON). FMINCON ended. PSO selesai.... hasil prediksi PSO dan NN target prediksi_pso prediksi_nn ______ ____________ ___________ 0 4.1762e-28 0.059254 1 1 0.95451 1 1 0.95461 0 4.1762e-28 0.039221 Terlihat bahwa nilai dari PSO lebih mendekati target daripada NN
Kode diatas menggunakan Matlab agar lebih mudah dalam pengolahan array, adapun untuk bahasa lain seperti Python sedang penulis porting ulang, kalian bisa baca disini untuk versi python dengan penjelasan lebih lengkap Optimasi Inisiasi Bobot pada Multi Layer Perceptron menggunakan Particle Swarm Optimization