Hibrid Particle Swarm Optimization dan Neural Network

By | November 22, 2022
1,094 Views

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