PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
APLIKASI ALGORITMA CONJUGATE GRADIENT PADA JARINGAN SYARAF TIRUAN PERAMBATAN BALIK Tesis Program Studi Teknik Elektro Jurusan Ilmu-ilmu Teknik
disusun oleh : Wiwien Widyastuti 18475/I-1/1820/02
PROGRAM PASCASARJANA UNIVERSITAS GADJAH MADA YOGYAKARTA 2004
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR ISI
HALAMAN JUDUL………………………………………………………….
i
HALAMAN PENGESAHAN………………………………………………...
ii
HALAMAN PERNYATAAN………………………………………………...
iii
PRAKATA……………………………………………………………………
iv
DAFTAR ISI………………………………………………………………….
vi
DAFTAR TABEL…………………………………………………………….
ix
DAFTAR GAMBAR………………………………………………………….
x
ABSTRAK…………………………………………………………………….
xii
I. PENGANTAR………………………………………………………….…
1
A. Latar Belakang…………………………………………………….
1
B. Perumusan Masalah……………………………………………….
2
C. Batasan Masalah…………………………………………………...
3
D. Keaslian Penelitian………………………………………………..
3
E. Tujuan Penelitian………………………………………………….
4
F. Hipotesis…………………………………………………………..
4
G. Cara Penelitian……………………………………………………
4
II. TINJAUAN PUSTAKA………………………………………………….
6
A. Tinjauan Pustaka…………………………………………………..
6
B. Landasan Teori……………………………………………………
7
vi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
1. Metode Steepest Descent (Penurunan Tercuram)………….…...
7
2. Metode Conjugate Gradient…………………………………...
10
3. Jaringan Perambatan Balik (Backpropagation)………………...
14
3.1. Algoritma Perambatan Balik……………………….
17
3.2. Fungsi Aktivasi…………………………………….
21
3.3. Memilih Bobot dan Prasikap Awal…………………
23
3.4. Lama Pelatihan…………………………………….
24
3.5. Jumlah Pasangan Pelatihan………………………...
25
3.6. Representasi Data………………………………….
25
3.7. Jumlah Lapisan Tersembunyi………………………
26
3.8. Indeks Unjuk Kerja (Performance Index)……………..
26
4. Jaringan Perambatan Balik dengan Conjugate Gradient………..
28
III. CARA PENELITIAN…………………………………………………..
30
A. Bahan Penelitian…………………………………………………..
30
B. Alat Penelitian……………………………………………………..
30
C. Jalannya Penelitian………………………………………………...
31
D. Kesulitan-Kesulitan……………………………………………….
49
IV. HASIL PENELITIAN DAN PEMBAHASAN……………………….
50
A. Hasil Uji Coba Masalah Pengenalan Gerbang AND………………
52
B. Hasil Uji Coba Masalah Pengenalan Gerbang XOR……………….
55
C. Hasil Uji Coba Masalah Pengenalan Bilangan……………………...
58
vii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
D. Pembahasan Umum………………………………………………
62
V. KESIMPULAN…………………………………………………………...
68
A. Kesimpulan……………………………………………………….
69
B. Saran………………………………………………………………
69
DAFTAR PUSTAKA………………………………………………………...
71
LAMPIRAN LAMPIRAN A. LISTING PROGRAM
viii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR TABEL
No.
Nama Tabel
Halaman
Tabel 4.1.
Pola gerbang AND………………………………………….
50
Tabel 4.2.
Pola gerbang XOR……………………………………….….
50
Tabel 4.3.
Pola Bilangan…………………………………………….….
51
Tabel 4.4.
Hasil uji coba gerbang AND………………………………...
52
Tabel 4.5.
Hasil uji coba gerbang XOR………………………………...
56
Tabel 4.6.
Hasil uji coba masalah pengenalan bilangan…………………
59
Tabel 4.7.
Kompleksitaspenurunan tercuram dan conjugate gradient……...
62
ix
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
DAFTAR GAMBAR
No.
Nama Tabel
Gambar 2.1.
Jaringan
syaraf
Halaman perambatan
balik dengan
1
lapisan
tersembunyi ………………………………………………...
15
Gambar 2.2.
Jaringan tiga lapis .……………………………………….….
16
Gambar 2.3.
Fungsi sigmoid biner, dengan rentang nilai (0,1) ……………
22
Gambar 2.4.
Fungsi sigmoid bipolar, dengan rentang nilai (-1,1) …………
22
Gambar 3.1.
Lokasi Selang ……………..………………………………...
34
Gambar 3.2.
Selang tidak dikurangi ………………………………………
35
Gambar 3.3.
Diagram alir program pelatihan jaringan perambatan balik standar …….………………………………………………..
Gambar 3.4.
Diagram alir program pengujian jaringan perambatan balik standar ……………………………………………………...
Gambar 3.5.
44
Diagram alir program pelatihan jaringan perambatan dengan conjugate gradient ……………………………………………...
Gambar 3.6.
41
45
Diagram alir program pengujian jaringan perambatan balik dengan conjugate gradient ……………………………………...
48
Gambar 4.1.
Hasil masalah gerbang AND dengan BPS pesat belajar 0,5….
53
Gambar 4.2.
Hasil masalah gerbang AND dengan BPS pesat belajar 0,1….
53
Gambar 4.3.
Hasil masalah gerbang AND dengan BPS pesat belajar 0,05...
54
Gambar 4.4.
Hasil masalah gerbang AND dengan BPCG ………………..
54
Gambar 4.5.
Hasil masalah gerbang XOR dengan BPS pesat belajar 0,5…..
56
x
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Gambar 4.6.
Hasil masalah gerbang XOR dengan BPS pesat belajar 0,1….
57
Gambar 4.7.
Hasil masalah gerbang XOR dengan BPS pesat belajar 0,05...
57
Gambar 4.8.
Hasil masalah gerbang XOR dengan BPCG ……………..….
58
Gambar 4.9.
Grafik hubungan antara waktu dan unit tersembunyi BPS…...
60
Gambar 4.10.
Grafik hubungan antara waktu dan unit tersembunyi BPCG...
61
Gambar 4.11.
Grafik hubungan antara waktu dan unit tersembunyi BPS dan BPCG ………………………………………………………
Gambar 4.12.
61
Kompleksitas waktu algoritma penurunan tercuram dan conjugate gradient ……………………………………………...
63
Gambar 4.13.
Gambar 3 dimensi dari F(x) ………………………………...
64
Gambar 4.14.
Gambar kontur dari F(x) …………………………………
65
Gambar 4.15.
Gambar lintasan dengan penurunan tercuram dengan ukuran langkah sangat kecil ………………………………………...
Gambar 4.16.
65
Gambar lintasan dengan penurunan tercuram ukuran langkah 0,12 ………………………………………………………...
66
Gambar 4.17.
Gambar lintasan dengan conjugate gradient ……………………
66
Gambar 4.18.
Grafik penurunan galat tiap iterasi…………………………..
68
Gambar 4.19.
Grafik pengaruh β tiap iterasi ………………………………
68
xi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
APLIKASI ALGORITMA CONJUGATE GRADIENT PADA JARINGAN SYARAF TIRUAN PERAMBATAN BALIK Abstrak Jaringan syaraf lapis jamak telah berhasil diaplikasikan ke berbagai permasalahan. Algoritma penurunan tercuram (steepest descent) merupakan algoritma yang popular digunakan sebagai algoritma pembelajaran pada jaringan syaraf perambatan balik yang kemudian disebut sebagai algoritma perambatan balik standar. Algoritma ini menghasilkan kekonvergenan yang lambat dan sangat tergantung pada parameter pesat belajarnya. Penelitian ini bertujuan untuk memperbaiki unjuk kerja kecepatan konvergen pada algoritma perambatan balik standar. Algoritma conjugate gradient yang merupakan algoritma iteratif yang handal untuk menyelesaikan persamaan linear simultan skala besar dapat juga digunakan untuk mengoptimalkan algoritma belajar pada jaringan perambatan balik. Pengujian dilakukan dengan membuat program dengan bahasa C++ untuk masing-masing algoritma dengan compiler Borland C++ versi 5.02 dan kemudian mengaplikasikan masing-masing program pada beberapa kasus. Dan dari situ bisa dibandingkan unjuk kerja dari masing-masing algoritma.
xii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
THE APPLICATION OF CONJUGATE GRADIENT ALGORITHM FOR BACKPROPAGATION NEURAL NETWORK Abstract Multilayer neural network has been succesfully applied to many problems. Steepest descent is a popular learning algorith for backpropagation neural network, called standard backpropagation algorithm. This algorithm converges very slowly and depend on learning rate parameter. The goal of this research is to overcome these problems. Conjugate gradient which is the most popular iterative algorithm for solving large system of linear equations. This algorithm can be used to optimize backpropagation learning algorithm. The program in C++ language with Borland C++ version 5.02 is made for analyze the performance of standar backpropagation and conjugate gradient backpropagation.
xiii
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
I.
PENGANTAR
A. Latar Belakang Suatu jaringan syaraf tiruan merupakan sistem pemrosesan informasi yang mempunyai karakteristik kinerja yang mirip dengan jaringan syaraf biologis (Fausett, Laurence. 1994). Pendekatan jaringan syaraf tiruan
menerapkan prinsip-prinsip
komputasi dan organisasional yang berasal dari studi neurobiologi. Sejalan dengan perkembangan komputer modern yang sangat pesat dengan kemampuan komputasi yang semakin tinggi, semakin memungkinkan untuk membuat simulasi pemrosesan pada syaraf.
Teknologi yang semakin canggih
sekarang ini telah memungkinkan untuk memproduksi perangkat keras khusus untuk jaringan syaraf. Kemajuan di bidang komputasi juga membuat studi tentang jaringan syaraf semakin mudah dilakukan. Jaringan syaraf tiruan dapat diaplikasikan ke berbagai bidang, misalnya untuk prediksi atau ramalan cuaca, prediksi harga saham, klasifikasi, asosiasi data, konseptualisasi data dan penapisan data. Jaringan syaraf tiruan didasari oleh model matematika dari pengolahan informasi dan mempunyai cara untuk menyatakan hubungan dari data atau informasi tersebut. Metode-metode numerik dan kemampuan komputer baik perangkat lunak maupun perangkat keras merupakan hal penting dalam jaringan syaraf tiruan terutama untuk masalah yang besar.
1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
2
Keberhasilan sebuah jaringan syaraf tiruan tentu saja juga sangat bergantung dari metode yang digunakan. Pemilihan metode yang efisien merupakan salah satu elemen penting akan keberhasilan suatu jaringan. Jaringan syaraf tiruan perambatan balik (backpropagation) telah berhasil diaplikasikan untuk berbagai permasalahan.
Jaringan perambatan balik standar
mengadopsi algoritma penurunan tercuram (steepest descent) sebagai algoritma belajarnya. Jaringan perambatan balik standar sangat sensitif pada parameter pesat belajar. Pemilihan pesat belajar yang tidak tepat bisa mengakibatkan jaringan belajar dengan sangat lambat bahkan gagal mencapai target yang diinginkan. Algoritma conjugate gradient merupakan salah satu metode komputasi yang handal dalam menyelesaikan persamaan linear secara iteratif. Algoritma ini kemudian secara luas dikembangkan dan dapat digunakan juga sebagai algoritma untuk menyelesaikan persamaan nonlinear.
Fungsi kesalahan yang diminimalkan pada
jaringan perambatan balik seringkali berupa persamaan nonlinear. Oleh karena itu algoritma conjugate gradient dapat digunakan sebagai algoritma untuk memperbaiki kekurangan pada jaringan syaraf tiruan perambatan balik yang standar.
B. Perumusan Masalah Metode standar dari jaringan perambatan balik mengadopsi teknik penurunan tercuram sebagai algoritma pelatihan.
Sifat algoritma ini sangat sensitif pada
pemilihan parameter pesat belajar. Selain itu, bobot selalu dimodifikasi dalam arah negatif dari gradien. Pesat belajr yang terlalu besar dapat mengakibatkan ketidakstabilan yang berarti pelatihan gagal mencapai target yang diharapkan. Pesat belajar yang terlalu kecil mengakibatkan jaringan belajar dengan sangat lambat.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
3
Sedangkan pesat belajar yang ditentukan tiap iterasi akan menghasilkan gerakan sigsag dan berakibat pelatihan berjalan dengan lambat, sehingga iterasi yang dibutuhkan sangat banyak dan tentu saja waktu yang dibutuhkan juga bertambah panjang. Berdasarkan hal tersebut di atas maka peneliti akan mengaplikasikan algoritma conjugate gradient nonlinear tersebut pada jaringan syaraf tiruan perambatan balik agar kinerja jaringan lebih baik.
C. Batasan Masalah Untuk menghindari meluasnya masalah yang akan diteliti, lingkup permasalahan terbatas pada pembuatan program aplikasi algoritma conjugate gradient pada jaringan syaraf tiruan perambatan balik dan program aplikasi jaringan syaraf tiruan perambatan balik standar yang mengadopsi metode penurunan tercuram. Kemudian hasil dari kedua algoritma di atas akan dibandingkan kinerjanya yaitu tentang banyaknya iterasi, waktu yang diperlukan serta keberhasilannya dalam mencapai target. Masalah yang akan digunakan untuk perbandingan adalah masalah yang sudah diketahui fungsi kesalahannya.
D. Keaslian Penelitian Berbagai penelitian tentang algoritma conjugate gradient dan jaringan syaraf tiruan telah dilakukan. Keaslian penelitian atau perbedaan dari penelitian yang sudah dilakukan terletak pada : 1.
Masalah-masalah yang akan digunakan untuk mengaplikasikan algoritma.
2.
Perbandingan dengan jaringan perambatan balik standar
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
4
3.
Program yang akan penulis buat dengan bahasa pemrograman C++.
E. Tujuan Penelitian Tujuan dilakukannya penelitian ini adalah : 1. Untuk mempelajari, memahami algoritma conjugate gradient
khususnya yang
digunakan untuk menyelesaikan masalah nonlinear. 2. Dapat dibuat program simulasi jaringan syaraf tiruan menggunakan algoritma pelatihan perambatan balik dengan conjugate gradient dan algoritma pelatihan perambatan balik standar. 3. Membandingkan kedua algoritma pelatihan tersebut di atas.
F. Hipotesis Berdasarkan penelitian diharapkan algoritma conjugate gradient dapat digunakan sebagai teknik optimisasi pada jaringan syaraf perambatan balik yang menghasilkan kinerja yang lebih baik dari pada jaringan syaraf perambatan balik yang standar.
G. Cara Penelitian Tahap-tahap yang akan dilakukan dalam penelitian ini adalah sebagai berikut : 1. Studi pustaka Pada tahap ini akan dipelajari berbagai literatur yang berhubungan dengan algoritma conjugate gradient dan algoritma penurunan tercuram, serta jaringan syaraf perambatan balik yang merupakan dasar dari penelitian ini.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
5
2. Pembuatan program Setelah melakukan studi pustaka, maka segera dapat dilakukan pembuatan program. Bahasa pemrograman yang akan digunakan adalah bahasa C++. Program yang dibuat ada 2 macam yaitu program jaringan syaraf perambatan balik dengan metode conjugate gradient dan program jaringan syaraf perambatan balik standar. 3. Pencarian masalah Pencarian masalahan dilakukan dengan melakukan pemilihan terhadap masalahmasalah yang telah ada yang sekiranya dapat mewakili permasalahan umum yang sering dijumpai. 4. Aplikasi program Setelah program selesai dan telah diperiksa kebenarannya, maka segera dapat digunakan untuk mengaplikasikan berbagai masalah jaringan syaraf tiruan yang hasilnya akan digunakan untuk menganalisis unjuk kerja dari masing-masing metode. 5. Analisis Setelah program diaplikasikan untuk berbagai masalah, maka hasil yang diperoleh tersebut dianalisis untuk mengetahui unjuk kerja dari masing-masing metode. Unjuk kerja yang akan dibahas di sini adalah mengenai unjuk kerja kekonvergenan, banyaknya iterasi yang dibutuhkan dan waktu yang diperlukan oleh masing-masing metode.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
II. TINJAUAN PUSTAKA
A. Tinjauan Pustaka Hestenes dan Eduard Stiefel pada tahun 1952 pertama kali menemukan metode conjugate gradient yang digunakan untuk menyelesaikan sistem persamaan linear.
Dari sini muncul penelitian-penelitian tentang conjugate gradient yang
membicarakan berbagai aspek. Fletcher dan Reeves, 1964 menggunakan metode conjugate gradient
untuk
minimisasi fungsi. Kemudian pada tahun 1993, Jianming Jin menulis buku tentang metodemetode Finite Element yang digunakan untuk menyelesaikan masalah-masalah elektromagnetik. Berbagai macam metode dipaparkan oleh Jianming, termasuk di dalamnya adalah metode conjugate gradient. Arioli, pada tahun 2001, meneliti tentang kriteria penghentian pada algoritma conjugate gradient dalam kerangka metode Finite Elemen. Penelitian lain dilakukan oleh Zdenek Strakos dan Petr Tichy, pada tahun 2002. Mereka meneliti tentang perkiraan galat dalam metode Conjugate gradient Method dan mengapa hal tersebut dapat dilakukan dalam perhitungan finite presisi. Sedangkan penelitian dan buku tentang jaringan syaraf tiruan antara lain buku tentang dasar-dasar dari jaringan syaraf ditulis oleh Laurene Fausett pada tahun 1994. Buku ini berisi tentang arsitektur, algoritma dan aplikasi dari jaringan syaraf termasuk di dalamnya adalah jaringan syaraf perambatan balik.
6
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
7
Kemudian pada tahun 1997 , Jyh-Shing Roger Jang, Chuen-Tsai Sun, Eiji Mizutani menulis buku tentang jaringan syaraf kabur (neuro-fuzzy) dan komputasinya. Buku ini menjelaskan metode-metode komputasi yang dapat digunakan untuk memecahkan persoalan pada jaringan syaraf kabur antara lain metode penurunan tercuram dan metode conjugate gradient. Tetapi metode-metode tersebut dijelaskan secara terpisah dari jaringan syaraf kabur. Tahun 1999, Martin T. Hagan, Howard B. Demuth dan Mark Beale dalam bukunya menuliskan jaringan perambatan balik dengan optimisasi menggunakan algoritma conjugate gradient.
Algoritma pencarian garis yang digunakan untuk
optimisasinya adalah algoritma golden section search. Berhubungan dengan penelitian sebelumnya tentang aplikasi metode conjugate gradient pada berbagai masalah maka peneliti juga akan mengaplikasikannya pada masalah jaringan saraf dalam hal ini adalah jaringan perambatan balik.
B. Landasan Teori 1. Metode Steepest Descent (Penurunan Tercuram) Metode penurunan tercuram merupakan salah satu metode yang digunakan untuk optimisasi. Pada algoritma pelatihan jaringan syaraf, penurunan tercuram digunakan untuk untuk mengoptimalkan performance index F(x). Arti mengoptimalkan di sini adalah mencari nilai x yang meminimalkan F(x). Penurunan tercuram adalah metode iteratif yang memulai taksiran x dengan taksiran awal x0 dan kemudian tiap iterasinya akan memperbaiki taksiran dengan persamaan yang berbentuk: x k +1 = x k + αk p k
(2.1)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
8
atau ∆x k = (x k +1 − x k ) = αk p k
(2.2)
dengan vektor p k adalah search direction (arah pencarian) dan αk adalah learning rate (pesat belajar) yang merupakan skalar positif. Pesat belajar menentukan panjang langkah pada tiap pencarian. Pada tiap iterasi diharapkan fungsi selalu menurun, atau dengan kata lain : F ( x k +1 ) < F ( x k )
(2.3)
Kemudian arah p k dapat dipilih dengan memakai ekspansi deret Taylor urutan pertama sebagai berikut : F ( x k +1 ) = F ( xk + ∆xk ) ≈ F ( x k ) + g Tk ∆x k
(2.4)
dengan gk adalah gradien pada taksiran lama xk : g k ≡ ∇F ( x ) x = x
(2.5) k
Agar F ( x k +1 ) < F ( x k ) , maka suku ke-dua dari persamaan di sebelah kanan harus negatif: g Tk ∆x k = αk g kT p k < 0
(2.6)
αk dipilih bilangan yang kecil tapi lebih besar dari nol , artinya : g Tk pk < 0
(2.7)
Semua vektor p k yang memenuhi persamaan di atas disebut arah penurunan. Fungsi akan turun jika dilakukan langkah yang cukup kecil pada arah ini. Sedangkan yang dimaksud dengan arah penurunan tercuram adalah arah yang akan mengakibatkan fungsi turun paling cepat. Hal ini terjadi jika g Tk p k paling negatif. Ini akan terjadi jika vektor arah merupakan negatif dari gradiennya :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
9
pk = −g k
(2.8)
Dengan menggunakan persamaan(2.8) pada persamaan(2.1) diperoleh metode penurunan tercuram sebagai berikut : x k +1 = x k − αk g k
(2.9)
Pada penurunan tercuram ada 2 metode yang umum digunakan untuk menentukan pesat belajar αk. Cara pertama adalah meminimalkan F(x) terhadap αk pada tiap iterasi. Dengan kata lain, memilih αk yang meminimalkan : F ( x k + αk p k )
(2.10)
Untuk fungsi kuadratis, dapat disusun minimisasi linear secara analitis. Jika fungsi kuadratis adalah sebagai berikut : F ( x) =
1 T x Ax + bT x + c 2
(2.11)
Maka turunan dari fungsi(2.10) terhadap αk untuk fungsi kuadratis F(x) adalah : d F ( x k + αk pk ) = ∇F (x )T dαk
x= xk
p k + αk p Tk ∇ 2 F ( x ) x= x p k (2.12) k
Jika turunan tersebut disamakan dengan nol, maka αk diperoleh :
αk = −
∇F ( x )T
x = xk
pk
p Tk ∇ 2 F ( x ) x = x pk
=−
g Tk p k p Tk Ak pk
(2.13)
k
dengan Ak adalah matriks Hessian yang dievaluasi pada xk : Ak ≡ ∇ 2 F ( x )
x = xk
(2.14)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
10
Cara kedua adalah dengan memilih suatu nilai tertentu untuk αk, misalnya αk=0,02 atau menggunakan variabel yang sudah ditentukan sebelumnya, misalnya αk=1/k.
2. Metode Conjugate Gradient Metode conjugate gradient dikembangkan oleh E.Stiefel dan M.R. Hestenes. Pertama kali metode ini digunakan sebagai metode untuk menyelesaikan persamaan linear atau persamaan matriks secara iteratif.
Conjugate gradient merupakan metode
efektif untuk sistem persamaan linear dengan ukuran besar, yaitu : Ax=b
(2.15)
Dengan x adalah vektor yang tidak diketahui, b adalah vektor yang sudah diketahui dan A adalah matriks simetris, definit positif yang telah diketahui. Matriks A adalah definit positif jika untuk tiap vektor x yang tidak nol : x T Ax > 0
(2.16)
Jika terdapat suatu fungsi kuadratis : F ( x) =
1 T x Ax − b T x + c 2
(2.17)
dengan A adalah matriks, x dan b adalah vektor dan c adalah skalar konstan. Jika A adalah matriks simetris dan definit positif maka F(x) dapat diminimisasi dengan menggunakan penyelesaian dari Ax=b. Gradien dari fungsi kuadratik tersebut adalah :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
11
∂ ∂x F ( x ) 1 ∂ F ( x ) F ' ( x ) = ∂x2 ... ∂ F ( x ) ∂xn
(2.18)
dengan menggunakan persamaan (2.18) pada persamaan (2.17), diperoleh : F ' (x ) =
1 T 1 A x + Ax − b 2 2
(2.19)
Jika A adalah matriks simetris maka persamaan (2.18) menjadi : F ' ( x ) = Ax − b
(2.20)
Karena A adalah definit positif, maka bentuk permukaan fungsi kuadratik F(x) adalah seperti mangkuk, yang berarti titik minimum dari fungsi terletak di dasar mangkuk yang mempunyai gradien nol. Sehingga dengan membuat gradien sama dengan nol, persamaan (2.20) menjadi suatu sistem persamaan linear yang akan dipecahkan sebagai berikut : Ax = b
(2.21)
Dari sini terlihat bahwa penyelesaian dari Ax=b adalah merupakan titik minimum dari F(x). Jika A adalah matriks simetris yang definit positif, Ax=b dapat diselesaikan dengan mencari nilai x yang meminimalkan F(x). Metode conjugate gradient dapat juga digunakan untuk menyelesaikan suatu sistem persamaan linear walaupun A bukan matriks simetris, bukan definit positif, bahkan jika A bukan matriks bujur sangkar. Caranya adalah dengan mengalikan A dengan transposenya : AT Ax = AT b
(2.22)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
12
Untuk mencari titik minimum pada fungsi kuadratis seperti pada persamaan (2.11), sekumpulan vektor {p k} akan mutually conjugate dengan matriks Hessian A yang definit positif jika dan hanya jika : p Tk Ap j = 0 Salah
satu
untuk k ≠ j
himpunan
{λ1 , λ2 ,..., λn } adalah
vektor
(2.23) conjugate
adalah
eigenvector
eigenvalues dari matriks Hessian A dan
dari
A.
Jika
{z1 , z 2 ,..., z n } adalah
eigenvector-nya, maka untuk melihat bahwa eigenvector-nya conjugate, adalah dengan mengganti p k pada persamaan di atas dengan zk sebagai berikut : z kT Az j = λ j z Tk z j = 0
untuk k ≠ j
(2.24)
persamaan terakhir bisa demikian karena eigenvektor dari matriks simetris adalah mutually orthogonal. Dari situ bisa dilihat bahwa fungsi kuadratis dapat diminimisasi secara tepat dengan menggunakan arah pencarian sepanjang eigencector matrik Hessian, sebab eigenvector merupakan sumbu utama dari kontur fungsi. Tetapi mencari eigenvector secara praktek tidak mudah dilakukan karena untuk mencari eigenvector terlebih dulu harus mencari matrik Hessian. Oleh karena itu dicari cara agar penghitungan turunan ke-2 tidak diperlukan. Pada fungsi kuadratis seperti pada (2.11) : ∇F ( x ) = F ' ( x ) = Ax + b
(2.25)
∇ 2 F (x ) = A
(2.26)
dengan menggunakan persamaan tersebut, dapat diketahui perubahan gradien pada iterasi k+1, yaitu : ∆g k = g k +1 − g k = ( Axk +1 + b) − ( Ax k + b ) = A∆xk
(2.27)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
13
kemudian dari persamaan (2.2) : ∆x k = (x k +1 − x k ) = αk p k
(2.28)
dan αk dipilih untuk meminimalkan F(x) pada arah p k Kondisi konjugasi dapat dituliskan kembali : αk p Tk Ap j = ∆x Tk Ap j = ∆g kT p j = 0 dengan k ≠ j
(2.29)
Arah pencarian akan conjugate jika ortogonal dengan perubahan gradien.
Arah
pencarian pertama (p 0) ditentukan sembarang dan p 1 adalah vektor yang ortogonal terhadap ∆g0. Secara umum untuk memulai pencarian digunakan arah dari metode penurunan tercuram : p0 = −g0
(2.30)
Kemudian, pada tiap iterasi, vektor p k dipilih vektor yang ortogonal terhadap
{∆g 0 , ∆g1 ,..., ∆g k −1 } .
Prosedur ini mirip dengan ortogonalisasi Gram-Schmidt, yang
disederhanakan untuk iterasi menjadi : p k = − g k + βk pk −1
(2.31)
Skalar βk dapat dipilih dari beberapa metode yang memberikan hasil yang sama untuk fungsi kuadratis. Pertama adalah menurut Hestenes dan Steifel : βk =
∆g Tk−1 g k ∆g kT−1 p k −1
(2.32)
Kedua , menurut Fletcher dan Reeves : βk =
g kT g k g kT−1 g k −1
Ketiga adalah menurut βk menurut Polak dan Ribiere :
(2.33)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
14
βk =
∆g kT−1 g k g kT−1 g k −1
(2.34)
Secara ringkas, metode conjugate gradient terdiri dari langkah-langkah sebagai berikut : 1. Pilih arah pencarian awal yang merupakan negatif dari gradien seperti persamaan(2.30) : p0 = −g0 2. Lakukan langkah seperti persamaan (2.28): ∆x k = (x k +1 − x k ) = αk p k dengan αk dipilih untuk meminimalkan fungsi sepanjang arah pencarian. Untuk fungsi kuadratis dapat digunakan persamaan (2.13) : αk = −
∇F ( x )T
x = xk
pk
p Tk ∇ 2 F ( x ) x = x pk
=−
g Tk p k p Tk Ak pk
k
Sedangkan untuk fungsi non-linear lainnya dapat menggunakan teknik-teknik minimisasi linear yang umum dipakai. 3. Pilih arah pencarian selanjutnya menggunakan persamaan (2.31) : p k = − g k + βk pk −1 dengan βk dapat dihitung dengan salah satu dari persamaan (2.32), persamaan (2.33), atau persamaan(2.34).
3. Jaringan Perambatan Balik (Backpropagation) Jaringan perambatan balik adalah jaringan lapis jamak, yang dilatih dengan algoritma perambatan galat balik (Back Error Propagation) atau sering disebut algoritma perambatan balik (backpropagation) saja. Tujuan dari jaringan adalah untuk melatih
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
15
jaringan agar mampu menanggapi secara benar pola-pola masukan yang digunakan saat pelatihan (mengingat) dan mampu memberikan tanggapan yang baik untuk polapola yang mirip tetapi tidak sama dengan pola-pola pelatihan (generalisasi). Pelatihan jaringan dengan perambatan balik meliputi tiga tahap, pertama adalah tahap maju (feedforward) untuk input pola pelatihan, kedua adalah perhitungan dan perambatan balik (backpropagation) dari galat yang bersangkutan dan yang terakhir adalah penyesuaian bobot.
Setelah pelatihan, aplikasi jaringan hanya meliputi
komputasi dari tahap maju. Y1
……
Yk
……
Ym
1 Z1
Zj
Zp
1 X1
……
Xi
……
Xn
Gambar 2.1. Jaringan syaraf perambatan balik dengan 1 lapisan tersembunyi
Pada gambar 2.1. tampak sebuah jaringan syaraf perambatan balik dengan satu hidden layer (lapisan tersembunyi), atau dikatakan sebagai jaringan dua lapis. Gambar 2.2. adalah cara lain untuk mengilustrasikan multilayer network (jaringan lapis jamak), dalam gambar 2.2 menunjukkan diagram dari jaringan tiga lapis. Secara sederhana, jaringan lapis jamak adalah jaringan perceptron yang bertingkat.
Keluaran dari
jaringan pertama merupakan masukan jaringan kedua, dan keluaran jaringan kedua merupakan masukan jaringan ketiga. Tiap lapis dapat memiliki jumlah neuron yang
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
16
berbeda, bahkan dapat juga memiliki transfer function/activation function (fungsi aktivasi) yang berbeda pula. Masukan
Lapis Pertama
w1 1,1 Σ
p1
n 11
a 11
w2 1,1
f1
Σ
b 11 1
p2
Σ
n 12 b 12
p3 . . .
1
. . .
Σ
pR w1 S1 ,R
n 1s 1
Lapis Ketiga
Lapis Kedua
n 21
a 21
w3 1,1
f2
Σ
b 21 1
a 12
f1 . . .
Σ
f1
Σ w2 S2 ,S 1
1
f2 . . .
Σ
1
f2
b 2s 2
a2 =f2 (W2 a1 +b2 )
n 32 b 32
. . . a 2s 2
1
a1 =f1 (W1 p+b1 )
1
a 22
1 n 2s 2
a 31
f3
b 31
b 22
. . . a 1s 1
b 1s 1
n 22
n 31
Σ w3 S3 ,S 2
n 3s 1
a 32
f3 . . .
a 3s 3
f3
b 3s 3 1 a3 =f3 (W3 a2 +b3 )
a3 =f3 (W3 f2 (W2 f1 (W1 p+b1 )+b2 )+b3 )
Gambar 2.2. Jaringan tiga lapis
Pada gambar 2.2., lambang R menunjukkan jumlah masukan, S1 menunjukkan jumlah neuron pada lapis pertama, S2 adalah jumlah neuron pada lapis kedua dan S3 menunjukkan jumlah neuron pada lapis ketiga. Pada jaringan lapis jamak, lapisan yang keluarannya merupakan keluaran dari jaringan disebut dengan output layer (lapisan keluaran), pada gambar 2.2. adalah lapis
. . .
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
17
ketiga. Sedangkan lapisan yang lain (lapis pertama dan kedua) disebut sebagai lapisan tersembunyi.
3.1. Algoritma Perambatan Balik Seperti yang dijelaskan di awal, bahwa pelatihan jaringan dengan perambatan balik meliputi tiga tahap yaitu meneruskan (feedforward) pola-pola masukan pelatihan, merambatkan balik galat yang bersesuaian dan penyesuaian bobot. Pada saat meneruskan pola masukan, berdasarkan gambar 2.1. tiap unit masukan (Xi) menerima sinyal masukan dan meneruskan ke unit-unit pada lapisan tersembunyi Z1,….,Zp. Kemudian tiap unit tersembunyi menghitung aktivasinya dan mengirimkan sinyal tersebut (zj) ke tiap unit keluaran. Tiap unit keluaran (Yk) menghitung aktivasinya (yk) agar menghasilkan tanggapan jaringan untuk pola masukan yang diberikan. Pada saat pelatihan, tiap unit keluaran membandingkan aktivasi yk dengan nilai target tk untuk menentukan galat untuk suatu pola pada unit tersebut. Berdasarkan galat ini, faktor δk (k=1,…,m) dapat dihitung. Faktor δk digunakan untuk mendistribusikan galat pada unit keluaran Yk kembali ke semua unit di lapis sebelumnya (lapis tersembunyi yang terhubung ke Yk). Faktor δk nantinya juga digunakan untuk menyesuaikan bobot antara keluaran dan lapis tersembunyi. Dengan cara yang sama, faktor δj (j=1,….,p) dihitung dari tiap unit tersembunyi Zj. Galat tidak perlu dirambatkan balik ke lapisan masukan, tetapi faktor δj tetap digunakan untuk menyesuaikan bobot antara lapis tersembunyi dan lapis masukan.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
18
Setelah semua faktor δ ditentukan, bobot untuk semua lapisan dapat disesuaikan secara bersamaan. Penyesuaian bobot w jk (dari unit tersembunyi Zj ke unit keluaran Yk) dilakukan berdasarkan faktor δj dan aktivasi xi dari unit masukan. Lambang-lambang yang digunakan dalam algoritma pelatihan pada jaringan perambatan balik adalah sebagai berikut :
x
Vektor masukan pelatihan : x=(x1, …, xi,…,xn)
t
vektor keluaran target t=(t1,…,tk,…,tm)
δk
Bagian dari koreksi galat dari penyesuaian bobot w jk yang berhubungan dengan galat pada unit keluaran Yk, juga merupakan informasi tentang galat pada unit Yk yang dirambatkan balik ke unit tersembunyi yang berhubungan dengan unit Yk.
δj
Bagian dari koreksi galat dari penyesuaian bobot v ij yang berhubungan dengan perambatan balik
informasi galat dari lapisan keluaran ke unit
tersembunyi Zj α
Pesat belajar
Xi
Unit masukan ke-i : Untuk sebuah unit masukan, sinyal masukan dan sinyal keluarannya sama, yaitu xi.
v 0j
Bias (prasikap) pada unit tersembunyi j.
Zj
Unit tersembunyi j :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
19
Net input pada Zj dilambangkan dengan Z_inj : z _ in j = v 0 j + ∑ xi v ij i
Sinyal keluaran (aktivasi) dari Zj dilambangkan dengan zj : zj=f(z_inj). w 0k
Prasikap pada unit keluaran k
Yk
Unit keluaran k : Net input pada Yk dilambangkan dengan y_ink : y _ in k = w0 k + ∑ z j w jk j
Sinyal keluaran (aktivasi) dari Yk dilambangkan dengan yk : yk=f(y_ink)
Sedangkan algoritma pelatihannya adalah sebagai berikut : Langkah 0
Berikan bobot awal (dengan nilai acak yang kecil)
Langkah 1
Selama kondisi berhenti belum memenuhi, kerjakan langkah 2-9.
Langkah 2
Untuk tiap pasangan pola pelatihan, lakukan langkah 3-8
Tahap Maju Langkah 3
Tiap unit masukan (Xi, i=1,….,n) menerima sinyal input xi dan
mengirimkan
sinyal
tersebut
ke
semua
unit
pada
lapisan berikutnya (unit tersembunyi). Langkah 4
Tiap
unit
tersembunyi
(Zj,
input terbobot : n
z _ in j = v 0 j + ∑ xi v ij i =1
j=1,..,p)
menjumlah
sinyal
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
20
Kemudian aplikasikan fungsi aktivasinya untuk menghitung sinyal keluaran :
z j = f (z _ in j ) Dan mengirimkan sinyal ini ke semua unit pada lapisan di atasnya (unit keluaran). Langkah 5
Tiap
unit
keluaran
(Yk,
k=1,…,m)
menjumlahkan
sinyal
masukan terbobot : p
y _ in k = w0 k + ∑ z j w jk j =1
Dan
aplikasikan
fungsi
aktivasinya
untuk
menghitung
sinyal output
y k = f ( y _ in k ) Tahap Perambatan balik dari galat Langkah 6
Tiap
unit
yang
keluaran
sesuai
(Yk,
dengan
k=1,…,m)
pola
menerima
masukan
pola
pelatihan,
target hitung
informasi galat :
δ k = (t k − y k ) f ' ( y _ in k ) Hitung
koreksi
bobot
(yang
akan
digunakan
untuk
penyesuaian bobot) :
∆w jk = αδk z j Hitung
koreksi
prasikap
(yang
akan
digunakan
untuk
penyesuaian prasikap) :
∆w0 k = αδk Kirimkan δk ke unit pada lapisan sebelumnya. Langkah 7
Tiap unit tersembunyi (Zj, j=1,….,p) menjumlahkan delta masukannya (dari unit pada lapisan berikutnya),
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
21
m
δ _ in j = ∑ δk w jk k =1
Kalikan
dengan
turunan
dari
fungsi
aktivasinya
untuk
digunakan
untuk
menghitung informasi galat :
δ j = δ _ in j f ' ( z _ in j ) Hitung
koreksi
bobot
(yang
akan
penyesuaian vij) :
∆v ij = αδ j x i Hitung koreksi prasikap (untuk penyesuaian v0j) :
∆v 0 j = αδ j Penyesuaian Bobot dan Prasikap Langkah 8
Tiap unit keluaran (Yk,
k=1,…,m)
menyesuaikan
prasikap
dan bobotnya (j=0,…,p) :
w jk (baru ) = w jk (lama ) + ∆w jk Tiap unit tersembunyi (Zj, j=1,…,p) menyesuaikan prasikap dan bobotnya (I=0,…,n) :
v ij (baru ) = v ij (lama) + ∆vij Langkah 9
Pengetesan kondisi berhenti.
3.2. Fungsi Aktivasi Fungsi aktivasi untuk jaringan perambatan balik harus mempunyai karakteristik penting yaitu, harus kontinyu, dapat diturunkan (differentiable) dan monotonically nondecreasing. Salah satu fungsi aktivasi yang sering dipakai adalah binary sigmoid function (fungsi sigmoid biner) yang mempunyai rentang nilai dari (0,1) dan didefinisikan oleh :
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
22
f1 (x ) =
1 1 + exp( − x )
(2.35)
dengan turunannya adalah : f 1 ' ( x) = f 1 ( x)[1 − f 1 ( x )]
(2.36)
Gambar (2.3) memperlihatkan fungsi sigmoid biner.
F(x)
x Gambar 2.3 Fungsi sigmoid biner, dengan rentang nilai (0,1)
Fungsi aktivasi lain yang umum dipakai adalah bipolar sigmoid function (fungsi sigmoid bipolar), yang mempunyai rentang nilai (-1,1) dan didefinisikan sebagai : f 2 ( x) =
2 −1 1 + exp( − x)
(2.37)
dengan turunannya adalah : f 2' ( x) =
1 [1 + f 2 ( x) ][1 − f 2 ( x) ] 2
(2.38)
F(x)
x
Gambar 2.4 Fungsi sigmoid bipolar, dengan rentang nilai (-1,1)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
23
Gambar 2.4. memperlihatkan fungsi sigmoid bipolar.
3.3. Memilih Bobot dan Prasikap Awal Ada beberapa cara untuk menentukan inisialisasi bobot dan prasikap. Pilihan pertama adalah dengan inisialisasi acak (random initialization). Pilihan bobot awal akan mempengaruhi suatu jaringan apakah akan mencapai minimum global atau hanya mencapai minimum lokal dari galat, dan juga berpengaruh pada kecepatan menuju konvergen. Penyesuaian bobot antara dua unit tergantung pada turunan pada fungsi aktivasi di unit atas dan fungsi aktivasi di unit bawah. Karena hal tersebut, maka sangat penting untuk menghindari suatu bobot awal yang akan menyebabkan aktivasi dan turunan dari aktivasi sama dengan nol. Nilai bobot awal harus tidak terlalu besar sehingga sinyal masukan awal pada tiap unit tersembunyi tidak berada di daerah di mana turunan dari fungsi sigmoid mempunyai nilai yang sangat kecil ( daerah saturasi/jenuh).
Sebaliknya, jika bobot awal terlalu kecil, net input pada unit
tersembunyi atau unit keluaran akan dekat ke nol yang juga akan menyebabkan pembelajaran berjalan dengan lambat. Prosedur yang umum untuk inisialisasi bobot dan prasikap adalah nilai acak antara -0,5 dan 0,5 (atau antara -1 dan 1 atau selang tertentu yang sesuai). Nilai tersebut boleh positif atau negatif karena bobot akhir setelah pelatihan juga bisa keduanya. Cara inisialisasi lain adalah inisialisasi yang dikembangkan oleh Nguyen dan Widrow (1990).
Pendekatan dari cara ini berdasar pada analisis geometri dari
tanggapan neuron tersembunyi pada masukan tunggal. Bobot dari unit tersembunyi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
24
ke unit keluaran (dan prasikap pada unit keluaran) diinisialisasi secara acak dengan nilai antara -0,5 dan 0,5 seperti pada kasus secara umum. Inisialisasi bobot dari unit masukan ke unit tersembunyi dirancang untuk meningkatkan kemampuan belajar dari unit tersembunyi. Prosedur inisialisasi bobot menurut Nguyen dan Widrow adalah sebagai berikut : Langkah 1
Hitung faktor skala :
β = 0,7( p) n = 0,7n p 1
dengan
n
adalah
jumlah
unit
masukan
dan
p
adalah
jumlah unit tersembunyi. Langkah 2
Untuk tiap unit tersembunyi (j=1,….,p) : Inisialisasikan vektor bobot (dari unit masukan) : vij(lama)=nilai
acak
antara
-0,5
dan
0,5
(atau
antara -γ dan γ) Hitung :
v j (lama ) = v1 j ( lama) 2 + v2 j (lama) 2 + ... + vnj ( lama) 2 Inisialisasikan kembali bobot :
v ij =
βv ij (lama) v j (lama)
Tentukan prasikap : v0j= nilai acak antara -β dan β.
3.4. Lama Pelatihan Tujuan dari jaringan perambatan balik adalah untuk mencapai keseimbangan antara tanggapan yang benar untuk pola pelatihan dan tanggapan yang baik untuk pola masukan yang baru (keseimbangan antara mengingat dan generalisasi). Untuk
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
25
tujuan tersebut maka jaringan tidak perlu melanjutkan pelatihan sampai total galat kuadrat benar-benar mencapai minimum. Hecht dan Nielsen (1990) menyarankan untuk menggunakan dua kelompok data selama pelatihan. Satu kelompok pola pelatihan dan satu kelompok pola untuk pengecekan pelatihan. Pada selang selama pelatihan, galat dihitung menggunakan pola pengecekan untuk pelatihan. Pada saat galat untuk pola pengecekan pelatihan menurun, pelatihan dilanjutkan. Ketika galat mulai meningkat, jaringan mulai mengingat pola pelatihan secara spesifik yang artinya kemampuan generalisasinya mulai menghilang. Pada titik ini, pelatihan dihentikan.
3.5. Jumlah Pasangan Pelatihan Menurut Baum dan Haussler (1989), jika tersedia pola pelatihan yang cukup, jaringan akan dapat menggeneralisasi sesuai yang diinginkan. Pola pelatihan yang cukup ditentukan dengan kondisi sebagai berikut : W = e, P
atau P =
W e
(2.39)
dengan W adalah jumlah bobot yang dilatih, P adalah jumlah pola pelatihan yang tersedia dan e adalah ketepatan klasifikasi yang diharapkan. Jika jaringan dilatih untuk mengklasifikasi 1-(e/2) bagian dari pola pelatihan secara benar, dengan 0<e<1/8, maka jaringan akan mengklasifikasikan 1-e dari pola pengetesan secara benar pula.
3.6. Representasi Data Pada banyak kasus, vektor masukan dan vektor keluaran mempunyai komponen dalam rentang nilai yang sama. Karena salah satu faktor dalam ekspresi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
26
penyesuaian bobot adalah aktivasi dari unit sebelumnya, maka unit yang aktivasinya nol tidak akan belajar. Untuk itu disarankan bahwa pembelajaran dapat ditingkatkan jika masukan dinyatakan dalam bentuk bipolar dan fungsi sigmoid bipolar digunakan sebagai fungsi aktivasi.
3.7. Jumlah Lapisan Tersembunyi Hasil teoritis (Fausett, 1994) menunjukkan bahwa satu lapisan tersembunyi cukup efisien untuk jaringan perambatan balik untuk mengaproksimasi pemetaan kontinyu dari pola masukan ke pola keluaran untuk sembarang derajat akurasi. Walau demikian, dua lapisan tersembunyi akan membuat pelatihan lebih mudah untuk situasi tertentu.
3.8. Indeks Unjuk Kerja (Performance Indeks) Indeks unjuk kerja adalah ukuran kuantitatif dari unjuk kerja jaringan. Angka indeks unjuk kerja kecil menunjukkan unjuk kerja jaringan yang baik, sedangkan indeks unjuk kerja besar menunjukkan unjuk kerja jaringan yang buruk. Algoritma perambatan balik untuk jaringan lapis jamak merupakan generalisasi dari algoritma LMS (Least Mean Square), kedua algoritma tersebut menggunakan indeks unjuk kerja yang sama yaitu galat rata-rata kuadrat (mean square error). Algoritma diberikan dengan sekumpulan pola pelatihan :
{p1 , t1}, { p2 , t 2 },...., {p k , t k }
(2.40)
dengan p k adalah masukan jaringan dan tk adalah target keluaran yang diharapkan. Pada setiap masukan yang diaplikasikan ke jaringan, keluaran jaringan dibandingkan dengan target.
Algoritma harus menyesuaikan parameter jaringan untuk
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
27
meminimalkan galat rata-rata kuadrat. Galat yang merupakan fungsi bobot yang akan diminimalkan adalah sebagai berikut : E = 0.5∑ (t k − y k )
2
(2.41)
k
Dengan aturan rantai, diperoleh gradien dari galat pada lapisan keluaran sebagai berikut : ∂E ∂ = 0.5∑ (t k − y k )2 ∂wJK ∂wJK k ∂ = 0.5[t K − f ( y _ in K )]2 ∂wJK ∂ = −[t K − y K ] f ( y _ in K ) ∂w JK = −[t K − y K ] f ' ( y _ in K )z J
(2.42)
Kemudian, informasi error δ K didefinisikan : δ K = [t K − y K ] f ' ( y _ in K )
(2.43)
Dengan cara yang sama, dapat dicari gradien pada lapisan tersembunyi sebagai berikut : ∂E ∂ = −∑ [t k − y k ] yk ∂v IJ ∂v IJ k = −∑ [t k − y k ] f ' ( y _ in k ) k
∂ y _ in k ∂v IJ
∂ y _ in k ∂v IJ k ∂ = −∑ δk wJk z ∂v IJ J k = − ∑ δk
= −∑ δk wJk f ' ( z _ in J )[x I ] k
Kemudian, informasi error δ J didefinisikan :
(2.44)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
28
δ J = ∑ δk w JK f ' (z _ in J )
(2.45)
k
4. Jaringan Perambatan Balik dengan algoritma Conjugate Gradient Algoritma dasar dari perambatan balik biasanya berjalan lambat untuk kebanyakan aplikasi. Berbagai variasi dari perambatan balik telah dikembangkan untuk meningkatkan kecepatan dari proses pelatihan. Di antaranya adalah dengan penggunaan momentum, variasi pesat belajar dan penggunaan algoritma optimisasi numerik yang umum, salah satunya adalah algoritma conjugate gradient yang akan dipakai dalam penelitian ini. Algoritma conjugate gradient seperti dijelaskan di sub bab II.B.2 tidak dapat digunakan secara langsung pada masalah-masalah pelatihan jaringan syaraf, karena pada jaringan syaraf indeks unjuk kerjanya tidak selalu berbentuk fungsi kuadratis. Oleh karena itu perlu sedikit modifikasi, pertama adalah bahwa persamaan (2.13) pada algoritma langkah 2 tidak dapat digunakan. Untuk itu diperlukan line search (metode pencarian garis) yang umum, misalnya metode Golden Section Search. Modifikasi kedua adalah algoritma harus di-reset setelah sejumlah iterasi tertentu. Ada banyak prosedur yang disarankan, tetapi metode paling sederhana adalah dengan me-reset arah pencarian pada arah pencarian dari metode penurunan tercuram (negatif dari gradien) setelah n iterasi (Scales, 1985). Menurut Hagan, Demuth dan Beale (1999) aplikasi algoritma conjugate gradient pada jaringan perambatan balik adalah sebagai berikut : 1. Algoritma perambatan balik digunakan untuk menghitung gradien (δk dan δj pada langkah 6 dan langkah 7).
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
29
2. Algoritma conjugate gradient digunakan untuk menentukan penyesuaian bobot (mencari α pada langkah 6 dan langkah 7 serta penyesuaian bobot dan prasikap pada langkah 8 ). Algoritma di atas merupakan algoritma dengan model batch karena gradien dihitung setelah seluruh pasangan pelatihan dilatihkan pada jaringan.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
III. CARA PENELITIAN
Bagian ini akan menjelaskan tentang bahan dan alat yang digunakan dalam penelitian, jalannya penelitian serta kesulitan-kesulitan yang timbul selama penelitian.
A. Bahan Penelitian Bahan penelitian yang dimaksud di sini adalah data yang dipakai dalam penelitian.
Permasalahan-permasalahan yang digunakan diperoleh dari literatur-
literatur seperti yang tertulis pada daftar pustaka sebagai berikut : 1. Masalah pengenalan gerbang AND 2. Masalah pengenalan gerbang exclusive-OR (XOR) 3. Masalah pengenalan pola bilangan 1 sampai dengan 0 Pola bilangan dinyatakan dalam larik 7x5 sebagai berikut :
--#--##---#---#---#---#--###-
-####---# ----# ---#--#--#--#####
-####---# ----# --##----# #---# -###-
----# ---## --#-# -#--# ##### ----# ----#
##### #---#---####----# ----# ####-
-#### #---#---#####---# #---# -###-
##### ----# ---#---#--#---#--#---
-####---# #---# -####---# #---# -###-
-####---# #---# -#### ----# ----# ####-
-####---# #---# #---# #---# #---# -###-
30
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
31
B. Alat Penelitian Alat penelitian yang digunakan berupa perangkat lunak (software) dan perangkat keras (hardware) komputer sebagai berikut : 1. Perangkat lunak komputer Bahasa pemrograman yang dipakai adalah bahasa C++ menggunakan compiler Borland C++ versi 5.02. 2. Perangkat keras komputer Perangkat keras yang digunakan selama penelitian adalah satu unit notebook IBM ThinkPad 390E Pentium II 300MHz, memory 64 MB.
C. Jalannya Penelitian Jalannya penelitian dimulai dengan mempelajari berbagai literatur tentang algoritma conjugate gradient, algoritma penurunan tercuram, serta jaringan syaraf perambatan balik yang merupakan dasar dari seluruh penelitian. 1. Pembuatan Program Setelah melakukan studi pustaka, tahap selanjutnya adalah pembuatan program. Persiapan pertama dalam pembuatan program adalah pembuatan pseudocode(algoritma) dari kedua algoritma pelatihan yang akan dibuat programnya yaitu algoritma pelatihan perambatan balik standar dan algoritma pelatihan perambatan balik dengan conjugate gradient.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
32
a. Perambatan Balik Standar Penelitian ini akan membandingkan unjuk kerja dari kedua algoritma tersebut. Karena algoritma perambatan balik dengan conjugate gradient merupakan algoritma pelatihan dengan model batch, maka algoritma pelatihan perambatan balik standar dibuat juga dengan model batch. Sehingga algoritma perambatan balik standar pada dasar teori yang dibuat dengan pelatihan per pola harus dimodifikasi terlebih dulu sehingga sesuai dengan model batch. Pengetesan kondisi berhenti pada langkah 10 dilakukan dengan menghitung rata-rata galat. Galat tiap pasangan pelatihan (Fausset,1994) dihitung dengan rumus : E = 0.5∑ [t k − y k ]2
(3.1)
k
Bila dinyatakan sebagai fungsi galat, menjadi : F ( w) = 0.5∑ [t k − y k (w)]
2
(3.2)
k
Maka galat untuk keseluruhan pola dihitung dengan rata-rata galat sebagai berikut : E=
0.5 [t k − y k ]2n ∑∑ N n k
(3.4)
dengan N adalah jumlah pola pelatihan. Fungsi galatnya : F ( w) =
0.5 [t k − yk (w)]2n ∑∑ N n k
(3.5)
b. Perambatan Balik dengan Conjugate Gradient Langkah berikutnya adalah pembuatan pseudo-code dari algoritma pelatihan perambatan balik dengan conjugate gradient. Algoritma ini merupakan kombinasi dari 2 algoritma yaitu algoritma pelatihan perambatan balik standar dengan algoritma
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
33
conjugate gradient. Kedua algoritma tersebut digabung dan disusun kembali sehingga menjadi algoritma pelatihan yang baru yang disebut dengan algoritma pelatihan perambatan balik dengan conjugate gradient. Menurut Hagan, Demuth dan Beale (1999), karena permasalahan-permasalahan dalam jaringan syaraf biasanya mempunyai fungsi galat atau indeks unjuk kerja yang tidak kuadratis maka algoritma conjugate gradient seperti pada dasar teori tidak dapat diaplikasikan secara langsung. Algoritma tersebut harus disesuaikan sehingga dapat digunakan untuk memecahkan masalah yang tidak linear dengan permukaan yang tidak kuadratis. Fungsi galat pada persamaan 3.5 tampak seperti persamaan kuadratis tetapi karena yk(w) pada penelitian menggunakan fungsi aktivasi sigmoid bipolar maka fungsi galat menjadi tidak kuadratis. Selain itu algoritma conjugate gradient untuk pemecahan masalah tidak kuadratis membutuhkan metode pencarian linear (linear search ) yang umum untuk mencari letak minimum dari fungsi pada suatu arah tertentu. Pencarian ini terdiri dari 2 langkah yaitu lokasi selang (interval location) dan pengurangan selang (interval reduction). Tujuan dari langkah lokasi selang adalah menemukan selang awal yang mengandung minimum
lokal.
Kemudian
langkah
pengurangan
selang
akan
mengurangi/memperkecil ukuran selang awal tersebut sampai dengan toleransi ketelitian yang diinginkan. Prosedur dari langkah lokasi selang ditunjukkan pada gambar 3.1. Dimulai dengan mengevaluasi fungsi galat pada titik awal, yang dilambangkan dengan a 1 pada gambar 3.1. Titik ini merupakan nilai bobot dan prasikap jaringan saat itu. Dengan kata lain, yang dihitung adalah : F ( w0 )
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
34
Langkah selanjutnya adalah mengevaluasi galat pada titik kedua, dalam gambar 3.1. dilambangkan dengan b 1, yang berjarak ε dari titik awal, sepanjang arah pencarian pertama p 0. Dengan kata lain, dievaluasi nilai : F ( x 0 + εp 0 ) Kemudian dilanjutkan dengan mengevalusai fungsi galat pada titik baru b i, yang secara berurutan mempunyai jarak titik dua kali lipat dari sebelumnya. Proses ini berhenti saat fungsi galat meningkat antara dua evaluasi yang berturutan. Pada gambar 3.1. dilambangan dengan b 3 ke b 4. Pada titik ini , diketahui bahwa titik minimum berada antara titik a 5 dan b 5. Sehingga tidak diperlukan lagi untuk memperlebar selang , karena titik minimum kemungkinan berada pada selang [a 4,b 4] atau selang [a 3,b 3]. Kedua kemungkinan ini ditunjukkan pada gambar 3.2.a. F(x) 8ε 4ε 2ε ε
a1
b1 a2
x b2 a3
b3 a4
a5
b4 b5
Gambar 3.1. Lokasi Selang
Setelah diperoleh selang yang mengandung titik minimum, langkah selanjutnya pada pencarian linear adalah pengurangan selang. Pada langkah ini, fungsi pada titik-titik internal selang [a 5,b 5] yang merupakan hasil dari langkah lokasi selang akan dievaluasi.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
35 F(x) F(x)
a
a.
b
c
x
a
c
d
b
b.
Gambar 3.2.Selang tidak dikurangi
Gambar 3.2.b. memperlihatkan bahwa paling tidak fungsi harus dievaluasi pada dua titik dalam untuk mengurangi/memperkecil ukuran ketidakpastian selang. Gambar 3.2.a memperlihatkan bahwa evaluasi fungsi pada sebuah titik internal tidak dapat menentukan lokasi titik minimum. Walau demikian, jika fungsi dievaluasi pada dua titik c dan d seperti dalam gambar 3.2.b., selang ketidakpastian dapat dikurangi. Jika F( c ) >F(d), seperti gambar 3.2.b. , maka titik minimum pasti berada pada selang[c,b]. Sebaliknya, jika F( c)
x
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
36
Algoritma Golden Section Search : τ=0,618 Tentukan :
c1 = a1 + (1 − τ )(b1 − a1 ), Fc = F (c1 ) d 1 = b1 − (1 − τ )(b1 − a1 ), Fd = F (d 1 ) Untuk k=1,2,….kerjakan : Jika Fc
a k +1 = a k ; bk +1 = d k ; d k +1 = c k c k +1 = a k +1 + (1 − τ)(bk +1 − a k +1 ) Fd = Fc ; Fc = F (c k +1 ) jika tidak, kerjakan : Tentukan :
a k +1 = c k ; bk +1 = bk ; c k +1 = d k d k +1 = bk +1 + (1 − τ )(bk +1 − a k +1 ) Fc = Fd ; Fd = F (d k +1 ) selesai selesai
sampai
bk +1 − a k +1 < tol ,
dengan
tol
adalah
toleransi
ketelitian yang dikehendaki.
Satu hal lagi yang perlu dimodifikasi pada algoritma conjugate gradient agar dapat diaplikasikan ke pelatihan jaringan syaraf. Untuk fungsi kuadratis, algoritma akan konvergen ke titik minimum pada jumlah iterasi tidak lebih dari n iterasi, dengan n adalah jumlah parameter yang dioptimasi (Hagan, Demuth, Beale, 1999). Tetapi pada kenyataannya fungsi galat untuk jaringan lapis jamak bukan merupakan fungsi kuadratis, sehingga algoritma tidak konvergen secara normal dalam n iterasi.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
37
Pengembangan algoritma conjugate gradient tidak menunjukkan arah pencarian mana yang digunakan setelah satu siklus n iterasi lengkap. Metode paling sederhana yang digunakan pada penelitian ini adalah me-reset arah pencarian ke arah pencarian dari penurunan tercuram (negatif dari gradien) setelah n iterasi (Scales, 1985). Berdasarkan modifikasi-modifikasi di atas, disusun algoritma perambatan balik dengan conjugate gradient sebagai berikut : Langkah 0
Berikan bobot awal (dengan nilai acak yang kecil)
Langkah 1
Selama kondisi berhenti belum memenuhi, kerjakan langkah 2-13.
Langkah 2
Untuk tiap pasangan pola pelatihan, lakukan langkah 3-7. Lakukan
untuk
seluruh
pola(pola
ke-1,….,
pola
ke-N
dengan N adalah jumlah keseluruhan pola). Tahap Maju Langkah 3
Tiap unit masukan (Xi, i=1,….,n) menerima sinyal input xi dan mengirimkan sinyal tersebut ke semua unit
pada
lapisan berikutnya (unit tersembunyi). Langkah 4
Tiap unit
tersembunyi (Zj,
j=1,..,p)
menjumlah
sinyal
input terbobot : n
z _ in j = v 0 j + ∑ xi v ij i =1
Kemudian aplikasikan fungsi aktivasinya untuk menghitung sinyal keluaran :
z j = f (z _ in j ) Dan mengirimkan sinyal ini ke semua unit pada lapisan di atasnya (unit keluaran). Langkah 5
Tiap
unit
keluaran
(Yk,
k=1,…,m)
menjumlahkan
sinyal
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
38
masukan terbobot : p
y _ in k = w0 k + ∑ z j w jk j =1
Dan
aplikasikan
fungsi
aktivasinya
untuk
menghitung
sinyal output :
y k = f ( y _ in k ) Tahap Perambatan balik dari galat Langkah 6
Tiap unit yang
keluaran (Yk, k=1,…,m) menerima pola target
sesuai
dengan
pola
masukan
pelatihan,
hitung
informasi galat :
δ k = (t k − y k ) f ' ( y _ in k ) Hitung
gradien
pada
lapisan
output
(k=1,…,m
dan
j=0,…,p):
G2 jk = −δ k z j Kirimkan δk ke unit pada lapisan sebelumnya. Langkah 7
Tiap unit tersembunyi (Zj, j=1,….,p) menjumlahkan delta masukannya (dari unit pada lapisan berikutnya), m
δ _ in j = ∑ δk w jk k =1
Kalikan
dengan
turunan
dari
fungsi
aktivasinya
untuk
menghitung informasi galat :
δ j = δ _ in j f ' ( z _ in j ) Hitung
gradien
pada
lapisan
tersembunyi
(j=1,…,p
dan
i=0,…,n):
G1ij = −δ j xi Langkah 8
Tiap unit
keluaran (Yk,
k=1,…,m)
menghitung
rata-rata
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
39
gradien (j=0,…,p):
G2 jk (rata − rata) =
G 2 jk ( pola1) + .... + G 2 jk ( polaN ) N
Tiap unit tersembunyi (Zj, j=1,…,p) menghitung rata-rata gradien (i=0,…,n):
G1ij (rata − rata) =
G1ij ( pola1) + .... + G2 ij ( polaN ) N
dengan N adalah jumlah pola pelatihan. Penyesuaian Bobot dan Prasikap (Conjugate Gradient) Langkah 9
Tentukan q=1
Langkah 10
Hitung arah pencarian lapis tersembunyi :
p1ij = −G1ij (rata − rata) Hitung arah pencarian lapis keluaran :
p 2 jk = −G2 jk (rata − rata) Langkah 11
Hitung
α1
pada
lapis
tersembunyi
dan
α2
pada
lapis
keluaran dengan metode Golden Search dengan fungsi yang diminimalkan adalah fungsi galat :
f ( w) = Langkah 12
1 2N
∑∑ (t n
k
− y k ( w ) )2
k
Tiap unit keluaran (Yk, k=1,…,m) menyesuaikan prasikap dan bobotnya (j=0,…,p) :
w jk (baru ) = w jk ( lama) + (α2)( p 2 jk ) Tiap
unit
tersembunyi
(Zj,
prasikap dan bobotnya (i=0,…,n) :
v ij (baru ) = v ij (lama) + (α1)( p1ij ) Langkah 13
Pengetesan kondisi berhenti.
j=1,…,p)
menyesuaikan
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
40
Jika galat
=toleransi, ke langkah Langkah 14
14
Tentukan :
w jk = w jk ( baru) v ij = v ij (baru ) Langkah 15
Pengetesan kondisi reset. Jika q+1>jumlah parameter bobot dan bias((n+1)p+(p+1)m) , maka lanjutkan ke langkah 1. Jika
q+1<=jumlah
parameter
bobot
dan
bias,
dengan
langkah
maka
lanjutkan ke langkah: a. Tentukan q=q+1 b. Lakukan
langkah
2
sampai
8
untuk
menghitung gradien. c. Hitung arah pencarian baru :
p1ij (baru ) = −G1ij + ( β1)( p1ij )
p 2 jk (baru ) = −G2 jk + ( β2) ( p 2 jk ) Dengan β1 dan β2 menggunakan metode dari Polak
dan
Ribiere seperti persamaan (2.34) :
β1 = β2 =
(G1
− G1 ji (lama) )G1ij G1 ji (lama )G1ij (lama ) ji
(G 2
kj
− G2 kj (lama) )G2 jk
G 2 kj (lama )G 2 jk ( lama)
d. Lanjutkan ke langkah 11
Tahap selanjutnya adalah pembuatan program yang meliputi langkah-langkah sebagai berikut penulisan program (coding). Program ditulis berdasarkan pseudocode/algoritma yang telah dibuat. Program dilengkapi dengan dokumentasi yang
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
41
memudahkan untuk pengecekan kesalahan dan memudahkan untuk memodifikasi program di waktu yang lain. Flow chart (diagram alir) program adalah sebagi berikut :
Begin
Input Data: n (unit masukan) p (unit tersembunyi) m (unit output) nPattern (jumlah pola) InPattern(pola input) TtarPattern(pola target) w1(bobot dan prasikap lapisan tersembunyi) w2(bobot dan prasikap lapisan keluaran)
Init(): w1TermAvg[n][p]=0 w2TermAvg[p][m]=0
CorrectionTermAvg()
WeightUpdate()
No
!CheckError()
Yes
w1(bobot dan bias lapisan tersembunyi terlatih) w2(bobot dan bias lapisan keluaran terlatih)
End
Gambar 3.3. Diagram Alir Program Pelatihan Jaringan Perambatan Balik Standar
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
42
begin Correction TermAvg
1
s=1
s<=nPattern
j=1
No
j<=p
No
A Yes Yes
i=0
BackPErrorDeltaWeightt() iPattern=s
No
i<=n
Yes BackPError()
w1TermAvg[i][j]= w1TermAvg[i][j]+ w1TermAvg[i][j]
NetInputHidden()
i=i+1 OutputBipolarSigmoidHidden()
j=j+1 NetInputOutput()
k=1 OutputBipolarSigmoidOutput()
ErrorTermOutputBipolarSigmoid()
k<=m
ErrorTermHiddenBipolarSigmoid()
Yes j=0
FError()
DeltaWeight()
No
j<=p
Yes 1 w2TermAvg[j][k]= w2TermAvg[j][k]+ w2TermAvg[j][k]
j=j+1
k=k+1
s=s+1
No
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
43
A
j=1
j<=p
No
Yes i=0
No
i<=n Yes w1TermAvg[i][j]= w1TermAvg[i][j]/ nPattern
i=i+1
j=j+1
k=1
k<=m
Yes j=0
No
j<=p
Yes w2TermAvg[j][k]= w2TermAvg[j][k]/ nPattern
j=j+1
k=k+1
No
end Correction TermAvg
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
44 begin Testing
InPattern(pola masukan) TarPattern(pola target) w1(bobot dan bias lapisan tersembunyi terlatih) w2(bobot dan bias lapisan keluaran terlatih)
i=1
No
i<=nPattern
Yes iPattern=i
BackPError()
PrintPattern(i)
i=i+1
end Testing
Gambar 3.4. Diagram Alir Program Pengujian Jaringan Perambatan Balik Standar
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
45
1
Begin
Input Data: n (unit masukan) p (unit tersembunyi) m (unit output) nPattern (jumlah pola) InPattern(pola input) TtarPattern(pola target) w1(bobot dan prasikap lapisan tersembunyi) w2(bobot dan prasikap lapisan keluaran)
!CheckError()
No End
Yes BackUpOld()
BackupOld() G1AvgOld[][]=G1Avg[][] G2AvgOld[][]=G2Avg[][]
Init()
GradientAvg() Init() fError=0 G1Avg[][]=0 G2Avg[][]=0
(q+1)> ((n+1)*p+(p+1)*m
No GradientAvg()
Yes q=1 q++ SearchDirectionPolakRibiere()
q=1 SearchDirectionSteepestDescent()
SearchDirectionSteepestDescent() GoldenSectionSearch() GoldenSectionSearch() WeightUpdate() WeightUpdate()
1
Gambar 3.5. Diagram Alir Program Pelatihan Jaringan Perambatan Balik dengan Conjugate Gradient
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI begin Gradient Avg
1
s=1
j=1
s<=nPattern
No
j<=p
46
No
A Yes Yes
i=0
BackPErrorGradient()
i<=n
iPattern=s
BackPError()
G1Avg[i][j]= G1Avg[i][j]+ G1Avg[i][j]
NetInputHidden()
i=i+1 OutputBipolarSigmoidHidden()
j=j+1 NetInputOutput()
k=1 OutputBipolarSigmoidOutput()
ErrorTermOutputBipolarSigmoid()
k<=m
ErrorTermHiddenBipolarSigmoid()
Yes j=0
FError()
Gradient()
No
j<=p
Yes 1 G2Avg[j][k]= G2Avg[j][k]+ G2Avg[j][k]
j=j+1
k=k+1
s=s+1
No
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
47
A
j=1
j<=p
No
Yes i=0
No
i<=n Yes G1Avg[i][j]= G1Avg[i][j]/nPattern
i=i+1
j=j+1
k=1
k<=m
Yes j=0
No
j<=p
Yes G2Avg[j][k]= G2Avg[j][k]/nPattern
j=j+1
k=k+1
No
end Gradient Avg
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
48
begin Testing
InPattern(pola masukan) TarPattern(pola target) w1(bobot dan bias lapisan tersembunyi terlatih) w2(bobot dan bias lapisan keluaran terlatih)
i=1
No
i<=nPattern
Yes iPattern=i
BackPError()
PrintPattern(i)
i=i+1
end Testing
Gambar 3.6. Diagram Alir Program Pengujian Jaringan Perambatan Balik Conjugate Gradient
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
49
2. Pencarian Masalah Setelah kedua program selesai dibuat, tahap selanjutnya adalah pencarian masalah. Masalah yang akan digunakan untuk menganalisa kedua algoritma adalah masalah pengenalan gerbang AND, masalah pengenalan gerbang XOR dan masalah pengenalan pola bilangan 1 sampai dengan 0.
3. Aplikasi program Setelah diperoleh masalah-masalah yang akan diteliti, tahap selanjutnya adalah mengaplikasikan kedua program pada masing-masing masalah.
4. Analisa Hasil dari aplikasi program digunakan untuk menganalisa unjuk kerja dari masing-masing algoritma. Unjuk kerja yang dibahas adalah mengenai banyaknya iterasi dan waktu yang dibutuhkan.
D. Kesulitan-kesulitan Kesulitan-kesulitan yang dialami selama proses penelitian ini adalah penentuan bobot dan prasikap awal dari jaringan yang seringkali menghasilkan pelatihan yang tidak konvergen dan terjebak pada minimum lokal.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
IV. HASIL PENELITIAN DAN PEMBAHASAN
1. Masalah pengenalan gerbang AND Pasangan pola masukan adalah sebagai berikut :
Masukan
Target(t1)
X1
X2
-1
-1
-1
-1
1
-1
1
-1
-1
1
1
1
Tabel 4.1. Pola gerbang AND
2. Masalah pengenalan gerbang XOR Pasangan pola masukan adalah sebagai berikut:
Masukan
Target(t1)
X1
X2
-1
-1
-1
-1
1
1
1
-1
1
1
1
-1
Tabel 4.2. Pola gerbang XOR
3. Masalah pengenalan bilangan 1 sampai dengan 0. Pola bilangan dinyatakan dengan larik 7x5, dengan - dinyatakan dengan -1 dan # dinyatakan dengan 1. Pasangan pola masukan adalah seperti pada tabel 4.3. 50
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
51
Pola
1
2
3
4
5
6
7
8
9
0
Masukan
Target
(x1, x2, x3, …., x35)
(t1,…, t4)
-1
-1
1
-1
-1
-1
1
1
-1
-1
-1
1
-1
-1
-1
-1
1
-1
-1
-1
-1
1
-1
-1
-1
1
-1
-1
-1
1
1
1
-1
-1
1
1
1
-1
1
-1
-1
-1
1
-1
-1
-1
1
-1
-1
-1
1
-1
-1
-1
1
-1
-1
1
-1
-1
-1
1
1
1
1
1
-1
1
1
1
-1
1
-1
-1
-1
1
-1
-1 -1 -1
-1
-1
1
-1
-1
1
1
-1
-1
-1
-1
-1
1
1
-1
-1
-1
1
-1
1
1
1
-1
-1
-1
-1
-1
1
-1
-1
-1
1
1
-1
1
-1
1
-1
1
-1
-1
1
1
1
1
1
-1
-1
-1
-1
1
-1
-1
-1
-1
1
1
1
1
1
1
1
-1
-1
-1
-1
1
-1
-1
-1
1
1
1
1
-1
-1
-1
-1
1
-1
-1
-1
-1
1
1
1
1
1
-1
-1
1
1
1
1
1
-1
-1
-1
-1
1
-1
-1
-1
1
1
1
1
-1
1
-1
-1
1
1
-1
-1
-1
1
-1
1
1
1
-1
1
1
1
1
1
-1
-1
-1
-1
1
-1
-1
1
-1
-1
-1
-1
1
-1
-1
-1
1
-1
-1
-1
1
-1
-1
-1
1
-1
-1
-1
-1
1
1
1
-1
1
-1
-1
-1
1
1
-1
-1
-1
1
-1
1
1
1
-1
1
-1
-1
-1
1
1
-1
-1
-1
1
-1
1
1
1
-1
-1
1
1
1
-1
1
-1
-1
-1
1
1
-1
-1
-1
1
-1
1
1
1
1
-1
-1
-1
-1
1
-1
-1
-1
-1
1
1
1
1
1
-1
-1
1
1
1
-1
1
-1
-1
-1
1
1
-1
-1
-1
1
1
-1
-1
-1
1
1
-1
-1
-1
1
1
-1
-1
-1
1
-1
1
1
1
-1
Tabel 4.3. Pola Bilangan
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1
1
-1
-1 -1 -1
1 -1
1
1
1 -1
1
1
-1 -1 -1
-1 -1
1
1 -1
1
1
-1
-1 -1
1
-1
1 -1 -1 -1
1 -1 -1
1
1 -1 -1
1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
52
A. Hasil Uji Coba Masalah Pengenalan Gerbang AND Pada masalah pengenalan gerbang AND jaringan yang digunakan adalah jaringan 2-2-1 (jaringan dengan 1 lapisan tersembunyi, 2 unit masukan, 2 unit tersembunyi dan 1 unit keluaran). Program dicoba dengan menggunakan toleransi galat = 0,001, yang berarti program akan berhenti jika rata-rata galat kuadrat jaringan mencapai kurang dari 0,001. Fungsi aktivasi yang digunakan pada lapisan tersembunyi dan lapisan keluaran adalah fungsi sigmoid bipolar. Pada algoritma perambatan balik standar (BPS) program dicoba dengan menggunakan 3 nilai pesat belajar yang berbeda. Hasil eksekusi program dapat diringkas dalam tabel 4.4. BPCG
BPS α=0,05
α=0,1
α=0,5
iterasi
Waktu(dt)
iterasi
Waktu(dt)
iterasi
Waktu(dt)
iterasi
Waktu(dt)
4
0,000
5481
1,625
2741
0,775
549
0,134
Tabel 4.4. Hasil uji coba gerbang AND
Dari tabel 4.4. tampak bahwa iterasi yang dibutuhkan pada algoritma BPCG sangat kecil daripada yang dibutuhkan algoritma BPS. Demikian juga waktu yang dibutuhkan untuk proses pelatihan BPCG paling kecil dibanding BPS dengan semua pesat belajar. Pada algoritma BPS pesat belajar berpengaruh besar terhadap iterasi dan waktu yang dibutuhkan pada proses belajar. Gambar 4.1., gambar 4.2. dan gambar 4.3. adalah grafik pengurangan galat terhadap banyaknya iterasi untuk masing-masing pesat belajar. Semua grafik pada bab ini digambar dengan MATLAB berdasarkan hasil dari program C++.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
53
BPS dengan pesat belajar(α)=0,5
Gambar 4.1. Hasil masalah gerbang AND dengan BPS pesat belajar 0,5
BPS dengan pesat belajar(α)=0,1
Gambar 4.2. Hasil masalah gerbang AND dengan BPS pesat belajar 0,1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
54
BPS dengan pesat belajar(α)=0,05
Gambar 4.3. Hasil masalah gerbang AND dengan BPS pesat belajar 0,05
BPCG
Gambar 4.4. Hasil masalah gerbang AND dengan BPCG
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
55
Dari grafik di atas tampak bahwa pada algoritma BPS pesat belajar yang semakin besar akan mempercepat pengurangan galat terutama pada tahap awal proses pelatihan. Sedangkan pesat belajar yang semakin kecil akan mengakibatkan proses pelatihan juga semakin lambat.
Tetapi kemungkinananya tidak selalu
demikian, dalam beberapa kasus bisa jadi pesat belajar yang besar akan mengakibatkan terjadinya osilasi yang pada akhirnya jaringan justru belajar dengan sangat lambat bahkan tidak dapat mencapai minimum lokal. Sedang pada algoritma BPCG pesat belajar dicari pada tiap iterasi sehingga pada tiap iterasi pesat belajar ditentukan untuk menghasilkan penurunan galat yang paling cepat.
B. Hasil Uji Coba Masalah Pengenalan Gerbang XOR Pada masalah pengenalan gerbang XOR jaringan yang digunakan adalah jaringan 2-4-1 (jaringan dengan 1 lapisan tersembunyi, 2 unit masukan, 4 unit tersembunyi dan 1 unit keluaran). Program dicoba dengan menggunakan toleransi galat = 0,001. Fungsi aktivasi yang digunakan pada lapisan tersembunyi dan lapisan keluaran adalah fungsi sigmoid bipolar. Untuk algoritma BPSD program dicoba dengan menggunakan 3 nilai pesat belajar yang berbeda yaitu 0,5, 0,1 dan 0,05. Hasil eksekusi program dapat diringkas dalam tabel 4.5.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
56
BPCG
BPS α=0,05
α=0,1
α=0,5
iterasi
Waktu(dt)
iterasi
Waktu(dt)
iterasi
Waktu(dt)
iterasi
Waktu(dt)
8
0,120
14071
3,475
7037
1,788
1409
0,411
Tabel 4.5. Hasil uji coba gerbang XOR
Sama halnya dengan masalah pengenalan gerbang AND, algoritma BPCG memerlukan iterasi dan waktu yang sangat kecil dibanding algoritma BPS. Pengaruh pesat belajar terhadap penurunan galat tampak pada gambar 4.5, gambar 4.6 dan gambar 4.7. BPS dengan pesat belajar 0,5
H. Analisa Hasil Sementara
Gambar 4.5. Hasil masalah gerbang XOR dengan BPS pesat belajar 0,5
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BPS dengan pesat belajar 0,1 57
Gambar 4.6. Hasil masalah gerbang XOR dengan BPS pesat belajar 0,1
BPS dengan pesat belajar 0,05
Gambar 4.7. Hasil masalah gerbang XOR dengan BPS pesat belajar 0,05
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
58
BPCG
Gambar 4.8 Hasil masalah gerbang XOR dengan BPCG
Seperti halnya pada masalah pengenalan gernbang AND, pesat belajar yang terbesar pada BPS menghasilkan penurunan galat yang cepat, walaupun demikian algoritma BPCG tetap menghasilkan penurunan galat tercepat.
C. Hasil Uji Coba Masalah Pengenalan Bilangan Pada masalah pengenalan bilangan 1 sampai dengan 0 jaringan yang dipakai adalah jaringan 35-n-4 yaitu jaringan dengan 1 lapis tersembunyi, 35 unit masukan, n unit tersembunyi (pada penelitian ini akan dicoba dengan nilai n antara 6 sampai dengan 30) dan 4 unit keluaran. 35 unit masukan mewakili larik 7x5 yang merupakan larik dari pola masukan dan 4 unit keluaran mewakili 4 digit pola target. Program diuji dengan menggunakan toleransi galat = 0,01. Fungsi aktivasi yang digunakan pada lapisan tersembunyi dan lapisan keluaran adalah fungsi sigmoid
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
59
bipolar. Untuk algoritma BPS program dicoba dengan menggunakan nilai pesat belajar 0,1 No.
Hasil eksekusi program dapat diringkas dalam tabel 4.6.
Jumlah
Jumlah
unit
parameter
tersembu
bobot dan
nyi (n)
prasikap
BPS
Iterasi
BPCG
Waktu (dt)
Iterasi
Waktu(dt)
(36xn)+((n +1)x4) 1.
6
244
1504
1,486
39
0,380
2.
7
284
1318
1,572
37
0,425
3.
8
324
1078
1,341
33
0,357
4.
9
364
1008
1,468
25
0,262
5.
10
404
890
1,546
19
0,244
6.
11
444
984
1,587
29
0,359
7.
12
484
925
1,451
17
0,240
8.
13
524
771
1,435
20
0,255
9.
14
564
834
1,462
17
0,339
10.
15
604
778
1,630
12
0,241
11.
16
644
758
1,249
13
0,345
12.
17
684
721
1,714
33
0,585
13.
18
724
756
1,706
23
0,425
14.
19
764
755
1,896
17
0,435
15.
20
804
704
1,822
19
0,510
16.
21
844
727
1,977
17
0,458
17.
22
884
709
1,971
17
0,415
18.
23
924
676
1,761
12
0,355
19.
24
964
666
1,790
18
0,407
20.
25
1004
692
2,130
19
0,477
21.
26
1044
670
1,916
14
0,441
22.
27
1084
672
1,990
15
0,429
23.
28
1124
633
1,826
14
0,571
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
60
24.
29
1164
630
1,955
12
0,402
25.
30
1204
610
2,404
18
0,712
Tabel 4.6. Hasil uji coba masalah pengenalan bilangan
Grafik hubungan antara jumlah unit tersembunyi dan lama waktu yang diperlukan terlihat pada gambar 4.9. untuk BPS dan gambar 4.10. untuk BPCG. Sedangkan hasil gabungannya pada gambar 4.11.
Grafik hubungan an Gambar 4.9. Grafik Hubungan antara Waktu dan Unit Tersembunyi BPS
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
61
Gambar 4.10. Grafik Hubungan antara Waktu dan Unit Tersembunyi BPCG
Gambar 4.11. Grafik Hubungan antara Waktu dan Unit Tersembunyi BPS dan BPCG
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
62
Dari hasil percobaan tampak bahwa waktu yang diperlukan pada algoritma BPS untuk semua kemungkinan jumlah unit tersembunyi lebih lama dibanding dengan algoritma BPCG. Pada masalah pengenalan bilangan, waktu terbaik dicapai oleh jaringan BPCG dengan 15 unit tersembunyi yaitu waktu proses pelatihan adalah 0,241 detik dengan 12 iterasi.
Di sini banyaknya iterasi sebenarnya tidak
menunjukkan kecepatan proses, bisa jadi jumlah iterasi lebih kecil tetapi waktu proses lebih lama. Ini terjadi karena dengan bertambahnya jumlah unit tersembunyi maka perhitungan tiap iterasinya akan memerlukan waktu yang lama pula. Di sini dapat dilihat pula bahwa dengan bertambahnya jumlah unit tersembunyi (jumlah parameter yang tidak diketahui juga bertambah) tidak selalu mengakibatkan waktu yang lama pula. Oleh karena itu kompleksitas waktu dari kedua algoritma tidak dapat dilihat dari sini.
D. Pembahasan Umum Kompleksitas waktu dari kedua algoritma dapat dilakukan dengan menguji algoritma penurunan tercuram dan conjugate gradient secara umum, yaitu dengan menghitung banyaknya operasi (flops) yang dilakukan untuk memecahkan suatu masalah. Hasil pengujian flops seperti terlihat pada tabel 4.7.
No.
Banyaknya parameter yang dicari
Jumlah flops Penurunan Tercuram
Conjugate Gradient
1
2
2040
77
2
5
3696
308
3
10
6468
1013
4
30
17019
7833
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
63
5
100
21567101
82103
6
200
52067600
324203
7
400
117559200
1288403
8
600
214374626
2892603
9
800
338553642
5136803
10
1000
486729000
8021003
Tabel 4.7. Kompleksitas Penurunan Tercuram dan Conjugate Gradient
Gambar 4.12. Kompleksitas Waktu Algoritma Penurunan Tercuram dan Conjugate Gradient
Kompleksitas waktu yang berupa grafik hubungan antara banyaknya flops dengan ukuran masalah (problem size) terlihat pada Gambar 4.12. Tampak bahwa untuk ukuran masalah yang semakin besar maka jumlah flops meningkat dengan sangat tajam pada algoritma penurunan tercuram sedangkan pada conjugate gradient tidak
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
64
demikian. Sehingga semakin besar permasalahan algoritma conjugate gradient semakin unggul dibanding dengan penurunan tercuram. Dari hasil uji coba program tampak bahwa untuk ketiga permasalahan pada jaringan perambatan balik di atas, algoritma perambatan balik dengan conjugate gradient membutuhkan iterasi dan waktu yang lebih sedikit dibanding algoritma perambatan balik standar. Walaupun
perhitungan tiap iterasi pada algoritma BPCG lebih
kompleks tetapi secara keseluruhan algoritma ini menghasilkan kecepatan belajar jaringan yang lebih baik. Secara umum kecepatan konvergen dari conjugate gradient dibanding dengan penurunan tercuram dapat dijelaskan dengan contoh sederhana sebagai berikut : Misal fungsi yang akan dicari minimalnya adalah : f ( x ) = 5x1 2 − 6 x1 x2 + 5 x2 2 + 4 x1 + 4 x 2
Gambar 4.13. Gambar 3 dimensi dari F(x)
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
65
Karena ada 2 variabel x1 dan x2 maka fungsi dapat digambarkan dalam bentuk 3 dimensi seperti gambar 4.13. Dan gambar konturnya tampak pada gambar 4.14
Gambar 4.14. Gambar Kontur dari F(x)
Gambar 4.15. Gambar Lintasan dengan Penurunan Tercuram ukuran langkah sangat kecil
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
66
Gambar 4.16. Gambar Lintasan dengan Penurunan Tercuram ukuran langkah 0,12
Sedangkan lintasan dengan algorima conjugate gradient dapat dilihat pada gambar 4.17
Gambar 4.17. Gambar Lintasan dengan Conjugate Gradient
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
67
Dari gambar lintasan tampak bahwa untuk ukuran langkah yang kecil, penurunan tercuram mengikuti lintasan (negatif dari gradient) yang selalu ortogonal dengan garis kontur.
Hal ini karena gradient ortogonal dengan garis kontur.
Sedangkan dengan memperbesar ukuran langkah bisa berakibat lintasan yang berosilasi. Jika ukuran langkah terlalu besar, algoritma akan tidak stabil. Ukuran langkah yang semakin besar diharapkan dapat mempercepat kekonvergenan, tetapi apabila terlalu besar akan mengakibatkan ketidakstabilan. Kemudian pada gambar 4.17. tampak bahwa algoritma conjugate gradient konvergen dengan tepat menuju minima dalam dua iterasi (untuk kasus fungsi kuadratis dua dimensi). Hal ini terjadi karena pada saat awal mencari titik minimum sepanjang arah pencarian, maka lintasan akan berhenti pada titik yang merupakan tangen (garis singgung) dari garis kontur. Kemudian iterasi berikutnya menggunakan arah yang conjugate. Arah pencarian yang conjugate ini dapat menuju ke titik minimum dari fungsi kuadratis tepat maksimum n langkah, dengan n adalah dimensi dari x. Sehimpunan vektor {p k} akan mutually conjugate terhadap matrik Hessian A yang positif definit jika dan hanya jika : p Tk Ap j = 0
k≠ j
Satu set dari vektor conjugate adalah eigenvector dari A. Sehingga pada conjugate gradient fungsi kuadratis dapat diminimalkan dengan tepat dengan arah pencarian menggunakan arah dari eigenvector matrik Hessian, karena arah ini merupakan arah sumbu utama dari kontur fungsi.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
68
Arah pencarian ditentukan dengan persamaan 2.31. Dari rumus tersebut terlihat bahwa arah pencarian merupakan negatif dari gradien ditambah suatu skalar (β) dikalikan arah pencarian sebelumnya.
Ada kemiripan dengan algoritma
perambatan balik standar yang menggunakan momentum. Perbedaannya adalah, momentum pada perambatan balik standar nilainya tetap sedangkan momentum (β) pada conjugate gradient nilainya berubah pada tiap iterasi dicari yang paling optimal. Gambar 4.18 dan 4.19 memperlihatkan pengaruh β pada masalah pengenalan pola bilangan dengan 12 unit tersembunyi.
Gambar 4.18 Grafik Penurunan Galat tiap iterasi
Gambar 4.19 Grafik Pengaruh β tiap iterasi
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
V. KESIMPULAN DAN SARAN A. Kesimpulan Dari hasil penelitian dan pembahasan yang telah dilakukan, dapat ditarik kesimpulan sebagai berikut : 1. Algoritma conjugate gradient dapat digunakan sebagai algoritma pelatihan pada jaringan syaraf tiruan perambatan balik yang fungsi galatnya tidak kuadratis. 2. Algoritma penurunan tercuram yang merupakan algoritma belajar pada jaringan syaraf tiruan perambatan balik standar pada umumnya menghasilkan proses pelatihan yang lambat dan sangat tergantung pada parameter pesat belajar. 3. Pada masalah pengenalan gerbang AND, gerbang XOR dan masalah pengenalan bilangan, jaringan syaraf tiruan perambatan balik dengan conjugate gradient menghasilkan proses pelatihan yang lebih cepat dibanding proses pelatihan pada jaringan syaraf tiruan perambatan balik standar. 4. Baik jaringan syaraf tiruan perambatan balik standar atau dengan algoritma conjugate gradient tidak bisa mengatasi bila terjebak pada minimum lokal.
B. Saran Karena adanya beberapa keterbatasan pada penelitian ini, maka untuk peneliti yang akan datang disarankan hal-hal sebagai berikut : 1. Perlu dilakukan perbaikan program terutama untuk antarmuka sehingga lebih mudah digunakan (user friendly). 2. Perlu dilakukan percobaan dengan fungsi aktivasi yang lain.
69
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
70
3. Perlu dicoba dengan inisialisasi bobot dengan metode lain selain dengan menggunakan inisialisasi acak. 4. Pengembangan lebih lanjut adalah dengan membandingkan algoritma conjugate gradient dan penurunan tercuram dengan metode yang lain. 5. Perlu diteliti lebih lanjut tentang pengaruh momentum pada algoritma conjugate gradient dan pada algoritma perambatan balik standar menggunakan momentum.
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
71
DAFTAR PUSTAKA
Arioli, M., 2001, " Stopping Criterion for the Conjugate gradient Algorithm in a Finite Element Method Framework", Numeric Math. Deitel, H.M., Deitel, P.J., 2002, " C++ How to Program", Prentice Hall. 4 th edition. Fausett, Laurene, 1994, "Fundamentals of Neural Networks", Prentice-Hall, Inc., New Jersey, USA. Fletcher, R., Reeves, 1964, "Function Minimization by Conjugate Gradients", Computer Journal 7 pp 149-154. Hestenes, M.R., Stiefel Eduard, 1952, "Methods of Conjugate gradients for Solving Linear Systems", Journal of Research of the National Bureau of Standards 49, 409-436. Hagan, M.T., Demuth, H.B., Beale, M, 1999, "Neural Network Design", PWS Publishing Co., USA. Jang, JS.R., Sun, CT., Mizutani, E., 1997, "Neuro-Fuzzy and Soft Computing", PrenticeHall, Inc., New Jersey, USA Jin, Jianming., 1993, "The Finite Element Method in Electromagnetics", John Wiley and Sons, Inc., New York, USA. Kadir, A., 1999, "Pemrograman C++ menggunakan Turbo C++ dan Borland C++", Andi Offset, Yogyakarta. Shewchuk, J.R., 1994, "An Introduction to the Conjugate Gradient Method Without the Agonizing Pain", School of Computer Science Carnegie Mellon University, Pittsburgh. Strakos, Zdenek., Tichy,Petr., 2002, "On Error Estimation in the Conjugate gradient Method and Why It Works in Finite Precision Computational", Electronic Transaction on Numerical Analysis, vol 13, pp 56-80. Yabe, Hiroshi, 2004, "Global Convergence of Nonlinear Conjugate Gradient Methods for Unconstrained Minimization", Department of Mathematical Information Science.
71
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
Lampiran A. Listing Program
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
#include #include #include #include #include
<math.h> <stdlib.h>
#include "sw.h" #define MaxIterasi 100000L const const const const const const const const const const
float Es = 0.01; //stopping error float EsGolden = 1; //stopping error Golden search int N = 50; // max size input unit 4 int P = 50; // max size hidden unit 4 int M = 50; // max size output unit 4 int MaxPattern = 10; // max number of pattern float T_1 =0.382; //(1-T), T=0.618 float AA= 0.1; // set learning rate float AA1= 0.5; // set learning rate float AA2= 0.5; // set learning rate
class ArchitectureBP { protected: int n; // number of input unit int p; // number of hidden unit int m; // number of output unit int nPattern; float InPattern[MaxPattern][N]; float TarPattern[MaxPattern][M]; int iPattern;
// // // //
number of pattern input pattern target pattern i'th nPattern
float w1[N][P];//bias hidden layer(index N=0),weight hidden layer float hNet[P]; // net input hidden layer float hOut[P]; // output hidden layer float w2[P][M]; // bias output layer (index P=0), weight output layer float oNet[M]; // net input output layer float oOut[M]; // output output layer float float float float
hError[P]; // error term hidden layer netError[P]; // netError hidden layer oError[M]; // error term output layer fError; // error function
long iterasi; public: void void void void void
// BP iterasi counter
SetNPM(); SetPattern(); SetW(); ReadFile(char in_filename[]); TestingPattern(char in_filename[]);
// set n, p, m // set In & Tar Pattern // set weight
private: void NetInputHidden(); //calculate net input hidden layer void OutputBipolarSigmoidHidden();//calculate output hidden layer void NetInputOutput(); //calculate net input output layer void OutputBipolarSigmoidOutput();//calculate output output layer void ErrorTermOutputBipolarSigmoid(); //calculate Error Term output layer
1
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
void ErrorTermHiddenBipolarSigmoid(); //calculate Error Term hidden layer void FError(); //calculate error function void ReadFileTest(char in_filename[]); protected: void SetiPattern(int in_iPattern); void BackPError(); int CheckError(); void PrintPattern(int in_iPattern);
//set iPattern
};
void ArchitectureBP::ReadFile(char in_filename[]) { ifstream inFile; int i,j; inFile.open(in_filename, ios::in); if (!inFile) { cerr << "File could not be opened" << endl; exit(1); } inFile>>n; inFile>>p; inFile>>m; inFile>>nPattern; for (int j=1;j<=nPattern;j++) { for (int i=1;i<=n;i++) { inFile>>InPattern[j][i]; } for (int k=1;k<=m;k++) { inFile>>TarPattern[j][k]; } } for (i=0; i<=n; i++) { for (j=1; j<=p; j++) { inFile>>w1[i][j]; } } for (j=0; j<=p; j++) { for (int k=1; k<=m; k++) { inFile>>w2[j][k]; } } inFile.close(); } void ArchitectureBP::ReadFileTest(char in_filename[])
2
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
{ ifstream inFile; int i,j; inFile.open(in_filename, ios::in); if (!inFile) { cerr << "File could not be opened" << endl; exit(1); } inFile>>n; inFile>>p; inFile>>m; inFile>>nPattern; for (j=1;j<=nPattern;j++) { for (i=1;i<=n;i++) { inFile>>InPattern[j][i]; } for (int k=1;k<=m;k++) { inFile>>TarPattern[j][k]; } }
inFile.close(); } void ArchitectureBP::TestingPattern(char in_filename[]) { ReadFileTest(in_filename); for (int i=1;i<=nPattern;i++) { // AllPattern.SetXT(InPattern[i],TarPattern[i]); SetiPattern(i); BackPError(); PrintPattern(i); } }
void ArchitectureBP::SetNPM() { cout<<"Masukkan jumlah unit input :"; cin>>n; cout<<"Masukkan jumlah unit tersembunyi :"; cin>>p; cout<<"Masukkan jumlah unit output :"; cin>>m; } void ArchitectureBP::SetPattern() { cout<<"Masukkan jumlah pola pelatihan :"; cin>>nPattern; for (int j=1;j<=nPattern;j++) { for (int i=1;i<=n;i++) {
3
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
cout<<"Masukkan pola masukan ["<<j<<"]["<>InPattern[j][i]; } for (int k=1;k<=m;k++) { cout<<"Masukkan pola target ["<<j<<"]["<>TarPattern[j][k]; } } } void ArchitectureBP::SetW() { for (int i=0; i<=n; i++) { for (int j=1; j<=p; j++) { cout<<"Masukkan bias dan bobot lapisan tersembunyi W1["<>w1[i][j]; } } for (int j=0; j<=p; j++) { for (int k=1; k<=m; k++) { cout<<"Masukkan bias dan bobot lapisan output W2["<<j<<"]["<>w2[j][k]; } } } void ArchitectureBP::SetiPattern(int in_iPattern) { iPattern=in_iPattern; } void ArchitectureBP::NetInputHidden() { for (int j=1; j<=p; j++) { hNet[j] = w1[0][j]; for (int i=1; i<=n; i++) { hNet[j] = hNet[j] + InPattern[iPattern][i]*w1[i][j]; } } } void ArchitectureBP::OutputBipolarSigmoidHidden() { for (int j=1; j<=p; j++) { hOut[j] = (2/(1 + exp(-hNet[j])))-1; } } void ArchitectureBP::NetInputOutput() { for (int k=1; k<=m; k++) {
4
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
oNet[k] = w2[0][k]; for (int j=1; j<=p; j++) { oNet[k] = oNet[k] + hOut[j]*w2[j][k]; } } } void ArchitectureBP::OutputBipolarSigmoidOutput() { for (int k=1; k<=m; k++) { oOut[k] = (2/(1 + exp(-oNet[k])))-1; } } void ArchitectureBP::ErrorTermOutputBipolarSigmoid() { for(int k=1; k<=m; k++) { oError[k]=(TarPattern[iPattern][k] - oOut[k])*(0.5*(1 + oOut[k])*(1-oOut[k])); } } void ArchitectureBP::ErrorTermHiddenBipolarSigmoid() { int j; for(j=1; j<=p; j++) { netError[j]=0; for(int k=1; k<=m; k++) { netError[j]=netError[j] + oError[k]*w2[j][k]; } } for(j=1; j<=p; j++) { hError[j]=netError[j] * (0.5*(1 + hOut[j])*(1-hOut[j])); } } void ArchitectureBP::FError() { // calculate error function for(int k=1; k<=m; k++) { fError=fError + pow((TarPattern[iPattern][k] - oOut[k]),2); } }
void ArchitectureBP::BackPError() { NetInputHidden(); OutputBipolarSigmoidHidden(); NetInputOutput(); OutputBipolarSigmoidOutput(); ErrorTermOutputBipolarSigmoid(); ErrorTermHiddenBipolarSigmoid(); FError(); }
5
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
int ArchitectureBP::CheckError() { fError =fError / (2*nPattern); if (fError >= Es) return 0; return 1; } void ArchitectureBP::PrintPattern(int in_iPattern) { for (int i=1;i<=n;i++) { cout<<"Pola masukan ["<
class StandardBackP: public ArchitectureBP { protected: float A; // learning rate float w1Term[N][P]; // error term output layer float w2Term[P][M]; // error term output layer protected: void DeltaWeight(); // calculate weight correction term void BackPErrorDeltaWeight(int in_iPattern); public: StandardBackP(); }; StandardBackP::StandardBackP() { A= AA; // set learning rate } void StandardBackP::DeltaWeight() { // calculate w1Term and b1Term for (int j=1; j<=p; j++) { w1Term[0][j] = A*hError[j]; for (int i=1; i<=n; i++) { w1Term[i][j] = A*hError[j]*InPattern[iPattern][i]; } } // calculate w2Term and b2Term for(int k=1; k<=m; k++) { w2Term[0][k]=A*oError[k];
6
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
for(int j=1; j<=p; j++) { w2Term[j][k]=A*oError[k]*hOut[j]; } } }
void StandardBackP::BackPErrorDeltaWeight(int in_iPattern) { SetiPattern(in_iPattern); BackPError(); DeltaWeight(); }
class StandardBackP_All: public StandardBackP { private: float w1TermAvg[N][P]; // avg bias and weight correction term hidden layer float w2TermAvg[P][M]; // avg bias and weight correction term output layer private: void correctionTermAvg(); average void BackupOld(); void WeightUpdate();
//calculate weight correction term //backup old weight //update weight
public: StandardBackP_All(); void Init(); void Training(); void PrintWeight(); }; //constructor StandardBackP_All::StandardBackP_All() { iterasi=0; // Init(); // inisialization } void StandardBackP_All::Init() { // init jumlah iterasi fError=0; // init w1Term and b1Term for (int j=0; j
total
// init w2Term and b2Term Total for(int k=0; k<M; k++)
7
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
{ for(int j=0; j
void StandardBackP_All::WeightUpdate() { for (int j=1;j<=p;j++) { for (int i=0;i<=n;i++) { w1[i][j]=w1[i][j]+w1TermAvg[i][j];
8
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
} } for (int k=1;k<=m;k++) { for (int j=0;j<=p;j++) { w2[j][k]=w2[j][k]+w2TermAvg[j][k]; } } } void StandardBackP_All::Training() { do { Init(); correctionTermAvg(); WeightUpdate(); cout<<" iterasi ke- :"<
// net input hidden layer Golden search // output hidden layer Golden search
9
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
float w2G[P][M]; // bias output layer (index P=0), weight output layer Gs float oNetG[M]; float oOutG[M];
// net input output layer Golden search // output output layer Golden search
float fErrorG;
// error function Golden search
private: void Gradient(); // calculate weight correction term protected: void BackPErrorGradient(int in_iPattern); void SetWeightG(float faktor_A); //calculate net input hidden layer G void NetInputHiddenG(); //calculate net input hidden layer G void OutputBipolarSigmoidHiddenG(); //calculate output hidden layer G void NetInputOutputG(); //calculate net input output layer G void OutputBipolarSigmoidOutputG(); //calculate output output layer G void FErrorG(); //calculate error function G void FeedForwardG(); //calculate output feed foward G void FErrorAvgG(); public: CGBackP();
// constructor
void CGBackP::InitG(); }; CGBackP::CGBackP() { // Init(); // initialization A1= AA1; // set learning rate A2= AA2; // set learning rate } void CGBackP::Gradient() { for(int k=1; k<=m; k++) { G2[0][k]=-oError[k]; for(int j=1; j<=p; j++) { G2[j][k]= -oError[k]*hOut[j]; } } for(int j=1; j<=p; j++) { G1[0][j]=-hError[j]; for(int i=1; i<=n; i++) { G1[i][j] = - hError[j] * InPattern[iPattern][i]; } } } void CGBackP::BackPErrorGradient(int in_iPattern) { SetiPattern(in_iPattern);
10
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
BackPError(); Gradient(); } void CGBackP::SetWeightG(float faktor_A) { for (int i=0; i<=n; i++) { for (int j=1; j<=p; j++) { w1G[i][j]=w1[i][j]+ faktor_A*P1[i][j]; } } for (int j=0; j<=p; j++) { for (int k=1; k<=m; k++) { w2G[j][k]=w2[j][k]+ faktor_A*P2[j][k]; } } } void CGBackP::NetInputHiddenG() { for (int j=1; j<=p; j++) { hNetG[j] = w1G[0][j]; for (int i=1; i<=n; i++) { hNetG[j] = hNetG[j] + InPattern[iPattern][i]*w1G[i][j]; } } } void CGBackP::OutputBipolarSigmoidHiddenG() { for (int j=1; j<=p; j++) { hOutG[j] = (2/(1 + exp(-hNetG[j])))-1; } } void CGBackP::NetInputOutputG() { for (int k=1; k<=m; k++) { oNetG[k] = w2[0][k]; for (int j=1; j<=p; j++) { oNetG[k] = oNetG[k] + hOutG[j]*w2G[j][k]; } } } void CGBackP::OutputBipolarSigmoidOutputG() { for (int k=1; k<=m; k++) { oOutG[k] = (2/(1 + exp(-oNetG[k])))-1; } }
11
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
void CGBackP::FErrorG() { // calculate error function for(int k=1; k<=m; k++) { fErrorG=fErrorG + pow((TarPattern[iPattern][k] - oOutG[k]),2); } } void CGBackP::FErrorAvgG() { fErrorG =fErrorG / (2*nPattern); } void CGBackP::FeedForwardG() { NetInputHiddenG(); OutputBipolarSigmoidHiddenG(); NetInputOutputG(); OutputBipolarSigmoidOutputG(); FErrorG(); } void CGBackP::InitG() { // init fError fErrorG=0; }
class CGBackP_All: public CGBackP { private: float float float float
G1Avg[N][P]; // G2Avg[P][M]; // G1AvgOld[N][P]; G2AvgOld[P][M];
float fErrorGAll[3];
avg gradient hidden avg gradient output // old avg gradient // old avg gradient
layer layer hidden layer output layer
// error function Golden search 1,2,3
private: void GradientAvg(); // calculate gradient average void SearchDirectionSteepestDescent(); // search direction of Steepest D void BackupOld(); // backup old gradient void SearchDirectionPolakRibiere(); // search direction of Polak R unsigned long IntervalLocation(float A); // find interval location float GoldenSectionSearch(float in_A); // Gs search per Alpha void GoldenSectionSearch(); // Golden section search void WeightUpdate(); // update weight public: CGBackP_All(); void Init();
// inisialization
void Training(); void PrintWeight(); //
void InitGAll();
12
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
}; CGBackP_All::CGBackP_All() { // init jumlah iterasi iterasi=0; Init(); //inisialization } void CGBackP_All::Init() { fError=0; // init G1Avg for (int j=0; j
void CGBackP_All::GradientAvg() { for (int s=1; s<=nPattern; s++) { BackPErrorGradient(s); // calculate G1 total for (int j=1; j<=p; j++) { for (int i=0; i<=n; i++) { G1Avg[i][j] = G1Avg[i][j]+G1[i][j]; } } // calculate G2 Total for(int k=1; k<=m; k++) { for(int j=0; j<=p; j++) { G2Avg[j][k]=G2Avg[j][k]+G2[j][k]; } } } // calculate G1 Average for (int j=1; j<=p; j++) { for (int i=0; i<=n; i++) { G1Avg[i][j] = G1Avg[i][j]/nPattern;
13
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
} } // calculate G2 Average for(int k=1; k<=m; k++) { for(int j=0; j<=p; j++) { G2Avg[j][k]=G2Avg[j][k]/nPattern; } } } void CGBackP_All::SearchDirectionSteepestDescent() { // calculate P1=-G1 Average for (int j=1; j<=p; j++) { for (int i=0; i<=n; i++) { P1[i][j] = -G1Avg[i][j]; } } // calculate P2=-G2 Average for(int k=1; k<=m; k++) { for(int j=0; j<=p; j++) { P2[j][k] = -G2Avg[j][k]; } } } void CGBackP_All::BackupOld() { // backup old G1 Average for (int j=1; j<=p; j++) { for (int i=0; i<=n; i++) { G1AvgOld[i][j] = G1Avg[i][j]; } } // backup old G2 Average for(int k=1; k<=m; k++) { for(int j=0; j<=p; j++) { G2AvgOld[j][k] = G2Avg[j][k]; } } } void CGBackP_All::SearchDirectionPolakRibiere() { double B=0, BTemp=0; int i, j, k; //calculate B1 for (j=1; j<=p; j++)
14
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
{ for (i=0; i<=n; i++) { B=B+((G1Avg[i][j]-G1AvgOld[i][j])*G1Avg[i][j]); BTemp=BTemp+(G1AvgOld[i][j]*G1AvgOld[i][j]); } } if (BTemp == 0.0) B = 0; else B=B/BTemp; // calculate P1 for (j=1; j<=p; j++) { for (i=0; i<=n; i++) { P1[i][j] = -G1Avg[i][j] + (B*P1[i][j]); } } B=0; BTemp=0; // calculate B2 for(k=1; k<=m; k++) { for(j=0; j<=p; j++) { B=B+((G2Avg[j][k]-G2AvgOld[j][k])*G2Avg[j][k]); BTemp=BTemp+(G2AvgOld[j][k]*G2AvgOld[j][k]); } } if (BTemp == 0.0) B = 0; else B=B/BTemp; // calculate P2 for(k=1; k<=m; k++) { for(j=0; j<=p; j++) { P2[j][k] = -G2Avg[j][k] + (B*P2[j][k]); } } } unsigned long CGBackP_All::IntervalLocation(float in_A) { int x=0; // index of error function unsigned long f=0; // faktor int i; // InitGAll(); SetWeightG(f*in_A); InitG(); for (i=1; i<=nPattern;i++) { SetiPattern(i); FeedForwardG(); } FErrorAvgG();
15
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
fErrorGAll[x]=fErrorG; f=1; x++; SetWeightG(f*in_A); InitG(); for (i=1; i<=nPattern;i++) { SetiPattern(i); FeedForwardG(); } FErrorAvgG(); fErrorGAll[x]=fErrorG; f=f*2; x++; SetWeightG(f*in_A); InitG(); for (i=1; i<=nPattern;i++) { SetiPattern(i); FeedForwardG(); } FErrorAvgG(); fErrorGAll[x]=fErrorG; while (!(fErrorGAll[1] < fErrorGAll[2])) { if (f <= 16) f=f*2; else return f; SetWeightG(f*in_A); InitG(); for (i=1; i<=nPattern;i++) { SetiPattern(i); FeedForwardG(); } FErrorAvgG(); fErrorGAll[0]=fErrorGAll[1]; fErrorGAll[1]=fErrorGAll[2]; fErrorGAll[2]=fErrorG; } return f;
} float CGBackP_All::GoldenSectionSearch(float in_A) { unsigned long f; float A,B,C,D; float fErrorCG, fErrorDG; int i; // begin of A calculation f=IntervalLocation(in_A); if (f > 16) return f*in_A/4; B=f*in_A; A=f*in_A/4;
16
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
C=A+T_1*(B-A); D=B-T_1*(B-A); SetWeightG(C); InitG(); for (i=1; i<=nPattern;i++) { SetiPattern(i); FeedForwardG(); } FErrorAvgG(); fErrorCG=fErrorG; SetWeightG(D); InitG(); for (i=1; i<=nPattern;i++) { SetiPattern(i); FeedForwardG(); } FErrorAvgG(); fErrorDG=fErrorG; do { if (fErrorCG < fErrorDG) { B=D; D=C; C=A+T_1*(B-A); fErrorDG=fErrorCG; SetWeightG(C); InitG(); for (int i=1; i<=nPattern;i++) { SetiPattern(i); FeedForwardG(); } FErrorAvgG(); fErrorCG=fErrorG; } else { A=C; C=D; D=B-T_1*(B-A); fErrorCG=fErrorDG; SetWeightG(D); InitG(); for (int i=1; i<=nPattern;i++) { SetiPattern(i); FeedForwardG(); } FErrorAvgG(); fErrorDG=fErrorG; } } while (B-A< EsGolden); return A; // end of A calculation
17
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
} void CGBackP_All::GoldenSectionSearch() { A1=GoldenSectionSearch(A1); A2=GoldenSectionSearch(A2); }
void CGBackP_All::WeightUpdate() { for (int j=1;j<=p;j++) { for (int i=0;i<=n;i++) { w1[i][j]=w1[i][j]+A1*P1[i][j]; } } for (int k=1;k<=m;k++) { for (int j=0;j<=p;j++) { w2[j][k]=w2[j][k]+A2*P2[j][k]; } } } void CGBackP_All::Training() { int q; //
q=1; BackupOld(); Init(); //inisialization GradientAvg(); q=1; SearchDirectionSteepestDescent(); GoldenSectionSearch(); WeightUpdate(); cout<<"Iterasi ke : "< ((n+1)*p+(p+1)*m)) { q=1; SearchDirectionSteepestDescent(); } else { q++; SearchDirectionPolakRibiere(); } GoldenSectionSearch(); WeightUpdate(); cout<<"Iterasi ke : "<
18
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
if (iterasi == MaxIterasi) break; } } void CGBackP_All::PrintWeight() { cout<<"iterasi ke- : "<
int main() { StopWatch Waktu; char strWaktu[20]; clrscr(); StandardBackP_All Wien; Wien.ReadFile("data3.dat"); Waktu.Start(); Wien.Training(); Waktu.Stop(); Wien.PrintWeight(); Wien.TestingPattern("data3a.dat"); Waktu.Time(strWaktu); cout << "Waktu: " << strWaktu << endl; // getch(); /* CGBackP_All Wien2; Wien2.ReadFile(); Waktu.Start(); Wien2.Training(); Waktu.Stop(); Wien2.PrintWeight(); Wien2.Testing(); Waktu.Time(strWaktu); cout << "Waktu: " << strWaktu << endl; // getch();
19
PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
*/ return 0; }
20