Beruflich Dokumente
Kultur Dokumente
network (SNN), atau neural network (NN) adalah suatu sistem yang dimodelkan berdasarkan
jaringan saraf manusia . JST ini merupakan sistem yang dapat merubah strukturnya untuk
memecahkan masalah berdasarkan informasi eksternal maupun internal yang diterima seperti
layaknya otak manuasia.
Neural network pemroses informasi secara terdistribusi dan paralel. Metode ini memungkinkan
Jaringan saraf tiruan dapat menyimpan pengetahuan yang diperolehnya dari pengalaman,
secara terorganisir sehingga mudah untuk digunakan sebagai informasi sewaktu dibutuhkan.
-- -- -( Intro )
-- -- -( Dasar-dasar ANN )
Hal yang sama terjadi pada sistem dimana sistem akan diajarkan dengan
berbagai macam contoh (disebut data latih) dan kemudian diharapkan sistem
akan dapat mengambil keputusan atas suatu masalah yang berhubungan dengan
data latih sistem tersebut. Pemanfaatan ANN sekarang ini sudah cukup banyak
dan telah diterapkan pada berbagai bidang, misalnya untuk mengetahui keadaan
bursa saham di masa yang akan datang berdasarkan keadaan saat ini, menentukan
jenis kelamin seseorang berdasarkan bentuk wajah, dll.
apabila ada paket yang melintasi jaringan dan ditangkap oleh IDS (dalam hal
ini Snort) dan packet tersebut memenuhi kriteria rules diatas maka IDS akan
dapat langsung memutuskan bahwa telah terjadi suatu jenis serangan DDOS yang
memanfaatkan tools stacheldracht, dan snort akan langsung mengambil tindakan
yang telah ditetapkan sebelumnya (misal: mengirimkan pesan alert via sms/mail
ke administrator sistem).
Yang menjadi masalah adalah jenis serangan akan terus berkembang dan
umumnya signature serangan tersebut baru akan diketahui apabila telah jatuh
'korban' oleh serangan baru tersebut, hal ini disebabkan jenis serangan baru
belum terdapat datanya di database signature IDS. Untuk mengatasi masalah
tersebut maka saat ini mulai banyak dikembangkan suatu IDS yang menggunakan
teknologi ANN sehingga diharapkan IDS dapat mengenali suatu jenis serangan
baru (walaupun sifatnya baru 'memperkirakan') dan mengambil langkah yang
sesuai, sehingga sistem dapat lebih terlindungi dari jenis serangan baru
tersebut.
pada contoh tersebut, kita mengajarkan pada sistem apabila inputan terdiri
dari angka "0.1" dan "0.2" maka outputnya adalah "0.3". Jika hanya diberikan
satu contoh maka sistem tidak akan belajar dengan baik, untuk itu sistem
sebaiknya diberikan contoh data dengan jumlah yang sangat besar sehingga
kecerdasan sistem bisa lebih handal.
Konsep pertama yang harus di pahami sebelum masuk pada tahap coding
adalah layer. ANN umumnya terdiri dari 3 layer, yaitu "input layer", "hidden
layer", dan "output layer". Ketiga layer inilah yang akan membentuk topologi
ANN. Tiap layer terdiri dari unit-unit node yang jumlahnya dapat kita
tentukan sendiri, bisa dibayangkan bahwa tiap node pada ANN ibaratnya seperti
neuron pada otak manusia. Jumlah node pada input layer tergantung pada jumlah
data input yang akan masuk pada sistem, misalnya pada operasi penjumlahan
diatas maka jumlah node pada input layer sebanyak 2 buah.
Konsep kedua yang penting adalah nilai Error minimum yang diharapkan.
Pada saat ANN di inisialisasi akan dibangkitkan nilai random untuk koneksi
antar node dari suatu layer dengan layer sesudahnya, jadi antar node-node
di hidden layer saling terkoneksi satu sama lain dengan node-node di hidden
layer, dan antar node-node di hidden layer akan saling terkoneksi satu sama
lain dengan node-node pada output layer. Nilai koneksi antar node tersebut
sering disebut 'bobot'. Nilai bobot inilah yang akan menentukan kecerdasan
suatu sistem. Pada saat proses training, nilai bobot tersebut akan terus
berubah sehingga didapatkan kesesuaian antara input dengan output dengan
Error minimum. Dengan kata lain, pada proses training kita akan menentukan
nilai minimum error yang bisa di tolerir oleh sistem....seperti yang
disampaikan diatas bahwa sistem tidak akan memberikan kepastian jawaban untuk
suatu kasus yang tidak pernah dilatihkan kepadanya, pasti ada nilai Error
dari jawaban sistem dengan jawaban yang seharusnya, nah nilai Error tersebut
yang harus di definisikan oleh kita sebelum melatih sistem sehingga sistem
bisa menjawab dengan tingkat kebenaran semaksimal mungkin (misal: tingkat
kebenaran sistem 99,9999% dengan nilai Error 0.0001).
Bingung?! =D
-- -- -( Coding Dasar )
Banyak sekali contoh coding dasar yang diberikan oleh berbagai pihak
di
Internet dalam mengimpelementasikan ANN, namun dari semuanya saya secara
pribadi lebih memilih untuk menggunakan Library yang telah dibuat oleh pihak
lain sehingga kita cukup menggunakan Library tersebut untuk membuat sistem
yang memanfaatkan ANN, tujuannya tentu saja untuk efisiensi dalam pembuatan
program dimana kita tidak perlu membuat implementasi dari ANN, kita cukup
menggunakan API (Application Programmable Interface) dari Library tersebut
untuk diimplementasikan pada sistem kita.
Library ANN yang menurut saya sangat baik adalah FANN (Fast Artificial
Neural Network)[3]. Library ini telah di binding untuk berbagai macam bahasa
pemrograman -- silakan baca sendiri dokumentasinya :-). Pada artikel ini saya
akan menunjukan contoh penggunaannya dengan menggunakan bahasa C (ANSI C).
#include "fann.h"
/* Baca data latih dari file sum.data dan lakukan proses training
* terhadap seluruh data latih tersebut */
fann_train_on_file(ann, "sum.data", max_iterations,
iterations_between_reports, desired_error);
fann_destroy(ann);
return 0;
}
baris selanjutnya menunjukan pasangan input dan output, misal pada baris
kedua dan ketiga:
0.01 0.01 -> Input ke-1 dan Input ke-2
0.02 -> Output
begitu seterusnya. Data yang dimasukan pada sistem ANN umumnya harus
dinormalisasi terlebih dahulu sehingga nilainya berkisar antara 0 s/d 1
(tidak boleh lebih dari 1). Sistem akan membaca seluruh data latih tersebut
dan diulang maksimal sebanyak 500000 kali (dalam ANN disebut Epoch) atau
jika kondisi Minimum Error (0.000001) telah ditemukan. Setelah proses
training dilakukan, maka seluruh nilai bobotnya akan disimpan pada file
(dalam contoh program akan di simpan pada file sum_data.net).
#include <stdio.h>
#include "floatfann.h"
int main()
{
fann_type *calc_out;
fann_type input[2];
/* Load data hasil training yang sebelumnya telah di simpan pada file */
struct fann *ann = fann_create_from_file("sum_data.net");
fann_destroy(ann);
return 0;
}
[Cyb3rh3b@pinguin.stttelkom.ac.id]$ ./sum_run
sum test (0.300000,0.400000) -> 0.707560
hasil outputnya bernilai 0.707 ~ 0.7 (mendekati 0.7). Seperti yang dijelaskan
diatas bahwa jawaban dari sistem ANN tidak pasti benar 100%, ada faktor
Errornya, sehingga nilainya berupa nilai pendekatan. Tingkat keberhasilan
sistem ANN juga tergantung dari jenis data latih serta proses training
yang diberikan, jika pada saat proses training kita memberikan data latih
yang kurang akurat atau jumlahnya kurang memadai maka tingkat kebenaran dari
ANN tidak akan bagus, semua tergantung bagaiman cara kita melatih sistem
tersebut :).
Kalo ada yang tertarik atau memiliki ide mengenai implementasi ANN
untuk mendeteksi suatu jenis serangan tertentu dapat langsung kirim via
email ke cyb3rh3b@kecoak.or.id, semoga nanti ada hasil dari project ini dalam
bentuk implementasi realnya :).
-- -- -( Kesimpulan )
Wassalam! :)
-- -- -( Referensi )
1. http://richardbowles.tripod.com/neural/neural.htm
2. http://ieee.uow.edu.au/~daniel/software/libneural/BPN_tutorial/
BPN_English/BPN_English/BPN_English.html
3. http://fann.sourceforge.net
-- -- -( Greetz )