Aplikasi algoritma Conjugate Gradient pada jaringan syaraf tiruan perambatan balik.

(1)

xii

APLIKASI ALGORITMA CONJUGATE GRADIE NT

PADA JARINGAN SYARAF TIRUAN

PE RAMBATAN 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.


(2)

xiii

THE APPLICATION OF

CONJUGATE GRADIE NT ALGORITHM

FOR BACKPROPAGATION NE URAL NE TWORK

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.


(3)

APLIKASI ALGORITM A

CO NJUGATE GRADIENT

PADA JARINGAN SYARAF TIRUAN

PERAM BATAN BALIK

Tesis

Program Studi Teknik Elektro Jurusan Ilmu-ilmu Teknik

disusun oleh : W iwien W idyastuti

18475/I-1/1820/02

PROGRA M PA SCA SA RJA NA

UNIVERSITA S GA DJA H MA DA

YOGYA KA RTA

2004


(4)

(5)

vi

DAF TAR ISI

HALAMAN JUDUL………. i

HALAMAN PE NGE SAHAN………... ii

HALAMAN PE RNYATAAN………... iii

PRAKATA……… iv

DAFTAR ISI………. vi

DAFTAR TABE L………. ix

DAFTAR GAMBAR………. x

ABSTRAK………. xii

I. PE NGANTAR……….… 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


(6)

vii

1. Metode Steepest Descent (Penurunan Tercuram)………….…... 7

2. Metode Conjugate Gradient………... 10

3. Jaringan Perambatan Balik (Back propagation)………... 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 PE NE LITIAN……….. 30

A. Bahan Penelitian……….. 30

B. Alat Penelitian……….. 30

C. Jalannya Penelitian………... 31

D. Kesulitan-Kesulitan………. 49

IV. HASIL PE NE LITIAN DAN PE MBAHASAN………. 50

A. Hasil Uji Coba Masalah Pengenalan Gerbang AND……… 52

B. Hasil Uji Coba Masalah Pengenalan Gerbang XOR………. 55


(7)

viii

D. Pembahasan Umum……… 62

V. KE SIMPULAN………... 68

A. Kesimpulan………. 69

B. Saran……… 69

DAF TAR PUSTAKA………... 71 LAMPIRAN


(8)

ix

DAF TAR TABE L

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


(9)

x

DAF TAR GAMBAR

No. Nama Tabel Halaman

Gambar 2.1. Jaringan syaraf 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 …….……….. 41 Gambar 3.4. Diagram alir program pengujian jaringan perambatan balik

standar ………... 44 Gambar 3.5. Diagram alir program pelatihan jaringan perambatan dengan

conjugate gradient ………... 45

Gambar 3.6. 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


(10)

xi

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 ……… 61

Gambar 4.12. 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 ………... 65

Gambar 4.16. 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


(11)

xii

APLIKASI ALGORITMA CONJUGATE GRADIE NT

PADA JARINGAN SYARAF TIRUAN

PE RAMBATAN 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.


(12)

xiii

THE APPLICATION OF

CONJUGATE GRADIE NT ALGORITHM

FOR BACKPROPAGATION NE URAL NE TWORK

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.


(13)

1

I.

PE NGANTAR

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.


(14)

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 (back propagation) 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.


(15)

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


(16)

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.


(17)

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 masalah-masalah yang telah ada yang sekiranya dapat mewakili permasalah-masalahan 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.


(18)

6

II. TINJAUAN PUSTAKA

A. Tinjauan Pustaka

Hestenes dan E duard 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 metode-metode Finite E lement 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 E lemen.

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.


(19)

Kemudian pada tahun 1997 , Jyh-Shing Roger Jang, Chuen-Tsai Sun, E iji 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:

k k k

k

x

p


(20)

atau

(

k k

)

k k

k

x

x

p

x

=

=

α

+1 (2.2)

dengan vektor pk 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 :

( ) ( )

x

k

F

x

k

F

+1

<

(2.3)

Kemudian arah pk dapat dipilih dengan memakai ekspansi deret Taylor urutan pertama sebagai berikut :

( )

(

)

( )

k

T k k k

k

k

F

x

x

F

x

g

x

x

F

+1

=

+

+

(2.4)

dengan gk adalah gradien pada taksiran lama xk:

( )

x xk

k

F

x

g

= (2.5)

Agar

F

( ) ( )

x

k+1

<

F

x

k , maka suku ke-dua dari persamaan di sebelah kanan harus

negatif:

0

<

=

k

T k k k T

k

x

g

p

g

α

(2.6)

α

k dipilih bilangan yang kecil tapi lebih besar dari nol , artinya :

0

<

k T k

p

g

(2.7)

Semua vektor pk 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 k

T k

p

g

paling negatif. Ini akan terjadi jika vektor arah merupakan negatif dari gradiennya :


(21)

k

k

g

p

=

(2.8)

Dengan menggunakan persamaan(2.8) pada persamaan(2.1) diperoleh metode penurunan tercuram sebagai berikut :

k k k

k

x

g

x

+1

=

α

(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 :

(

x

k k

p

k

)

F

+

α

(2.10)

Untuk fungsi kuadratis, dapat disusun minimisasi linear secara analitis. Jika fungsi kuadratis adalah sebagai berikut :

c

x

b

Ax

x

x

F

=

T

+

T

+

2

1

)

(

(2.11)

Maka turunan dari fungsi(2.10) terhadap

α

k untuk fungsi kuadratis F(x) adalah :

(

)

( )

( )

x x k

T k k k x x T k k k k

p

x

F

p

p

x

F

p

x

F

d

d

k k = =

+

=

+

α

α

2

α

(2.12)

Jika turunan tersebut disamakan dengan nol, maka

α

k diperoleh :

( )

( )

k k

T k k T k k x x T k k x x T k

p

A

p

p

g

p

x

F

p

p

x

F

k

k

=

=

= = 2

α

(2.13)

dengan Ak adalah matriks Hessian yang dievaluasi pada xk :

( )

k x x

k

F

x

A

=

2


(22)

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 :

A x= 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 :

0

>

Ax

x

T (2.16)

Jika terdapat suatu fungsi kuadratis :

c

x

b

Ax

x

x

F

=

T

T

+

2

1

)

(

(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 A x= b.


(23)

=

)

(

...

)

(

)

(

)

(

'

2 1

x

F

x

x

F

x

x

F

x

x

F

n (2.18)

dengan menggunakan persamaan (2.18) pada persamaan (2.17), diperoleh :

b

Ax

x

A

x

F

=

T

+

2

1

2

1

)

(

'

(2.19)

Jika A adalah matriks simetris maka persamaan (2.18) menjadi :

b

Ax

x

F

'

(

)

=

(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 :

b

Ax

=

(2.21)

Dari sini terlihat bahwa penyelesaian dari A x= b adalah merupakan titik minimum dari F(x). Jika A adalah matriks simetris yang definit positif, A x= 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 :

b

A

Ax

A

T

=

T


(24)

Untuk mencari titik minimum pada fungsi kuadratis seperti pada persamaan (2.11), sekumpulan vektor {pk} akan mutually conjugate dengan matriks Hessian A yang definit positif jika dan hanya jika :

j

k

untuk

0

=

j T k

Ap

p

(2.23)

Salah satu himpunan vektor conjugate adalah eigenvector dari A. Jika

{

λ

1

,

λ

2

,...,

λ

n

}

adalah eigenvalues dari matriks Hessian A dan

{

z

1

,

z

2

,...,

z

n

}

adalah

eigenvector-nya, maka untuk melihat bahwa eigenvector-nya conjugate, adalah dengan mengganti pk pada persamaan di atas dengan zk sebagai berikut :

j

k

untuk

0

=

=

j T k j j T

k

Az

z

z

z

λ

(2.24)

persamaan terakhir bisa demikian karena eigenvek tor 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) :

b

Ax

x

F

x

F

=

=

+

(

)

'

(

)

(2.25)

A

x

F

=

2

(

)

(2.26)

dengan menggunakan persamaan tersebut, dapat diketahui perubahan gradien pada iterasi k+ 1, yaitu :

(

k

) (

k

)

k

k k

k

g

g

Ax

b

Ax

b

A

x

g

=

=

+

+

=


(25)

kemudian dari persamaan (2.2) :

(

k k

)

k k

k

x

x

p

x

=

=

α

+1 (2.28)

dan

α

k dipilih untuk meminimalkan F(x) pada arah pk Kondisi konjugasi dapat dituliskan kembali :

j

k

dengan

0

=

=

=

j T k j T k j T k

k

p

Ap

x

Ap

g

p

α

(2.29)

Arah pencarian akan conjugate jika ortogonal dengan perubahan gradien. Arah pencarian pertama (p0) ditentukan sembarang dan p1 adalah vektor yang ortogonal terhadap

g0. Secara umum untuk memulai pencarian digunakan arah dari metode penurunan tercuram :

0

0

g

p

=

(2.30)

Kemudian, pada tiap iterasi, vektor pk dipilih vektor yang ortogonal terhadap

{

g

0

,

g

1

,...,

g

k−1

}

. Prosedur ini mirip dengan ortogonalisasi Gram-Schmidt, yang

disederhanakan untuk iterasi menjadi :

1

+

=

k k k

k

g

p

p

β

(2.31)

Skalar

β

k dapat dipilih dari beberapa metode yang memberikan hasil yang sama untuk fungsi kuadratis. Pertama adalah menurut Hestenes dan Steifel :

1 1 1 − − −

=

k T k k T k k

p

g

g

g

β

(2.32)

Kedua , menurut Fletcher dan Reeves :

1 1 − −

=

k T k k T k k

g

g

g

g

β

(2.33)


(26)

1 1 1 − − −

=

k T k k T k k

g

g

g

g

β

(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) :

0

0

g

p

=

2. Lakukan langkah seperti persamaan (2.28):

(

k k

)

k k

k

x

x

p

x

=

=

α

+1

dengan

α

k dipilih untuk meminimalkan fungsi sepanjang arah pencarian. Untuk fungsi kuadratis dapat digunakan persamaan (2.13) :

( )

( )

k k

T k k T k k x x T k k x x T k

p

A

p

p

g

p

x

F

p

p

x

F

k

k

=

=

= = 2

α

Sedangkan untuk fungsi non-linear lainnya dapat menggunakan teknik-teknik minimisasi linear yang umum dipakai.

3. Pilih arah pencarian selanjutnya menggunakan persamaan (2.31) :

1

+

=

k k k

k

g

p

p

β

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 E rror Propagation) atau sering disebut algoritma perambatan balik (back propagation) saja. Tujuan dari jaringan adalah untuk melatih


(27)

jaringan agar mampu menanggapi secara benar pola-pola masukan yang digunakan saat pelatihan (mengingat) dan mampu memberikan tanggapan yang baik untuk pola-pola yang mirip tetapi tidak sama dengan pola-pola-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 (back propagation) dari galat yang bersangkutan dan yang terakhir adalah penyesuaian bobot. Setelah pelatihan, aplikasi jaringan hanya meliputi komputasi dari tahap maju.

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

Y1 Yk Ym

1

Z1

X1 Xi Xn

Zj Zp

1

……

……

……


(28)

berbeda, bahkan dapat juga memiliki transfer function/ activation function (fungsi aktivasi) yang berbeda pula.

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

. . .

Σ

f

1

n11 a 1

1

b11

1

Σ

f

1

n12 a 1

2

b12

1

Σ

f

1

a1s1

1 n1s1

b1s1

. . . . . . . . .

Σ

f

2

n21 a 2

1

b21

1

Σ

f

2

n22 a 2

2

b22

1

Σ

f

2

a2s2

1 n2s2

b2s2

. . . . . .

Σ

f

3

n31 a 3

1

b31

1

Σ

f

3

n32 a 3

2

b32

1

Σ

f

3

a3s3

1 n3s1

b3s3

. . . . . .

w11,1 w3

1,1

w21,1

p1

p2

p3

pR

w1S1,R w

2

S2,S1 w3

S3,S2

Masukan Lapis Pertama Lapis Kedua Lapis Ketiga

a1=f1(W1p+b1) a2=f2(W2a1+b2) a3=f3(W3a2+b3)


(29)

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.


(30)

Setelah semua faktor

δ

ditentukan, bobot untuk semua lapisan dapat disesuaikan secara bersamaan. Penyesuaian bobot wjk (dari unit tersembunyi Zjke unit keluaran Yk) dilakukan berdasarkan faktor

δ

jdan aktivasi xidari 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 wjk 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 vij 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.

v0j Bias (prasikap) pada unit tersembunyi j. Zj Unit tersembunyi j :


(31)

Net input pada Zj dilambangkan dengan Z_inj :

=

+

i ij i j

j

v

x

v

in

z

_

0

Sinyal keluaran (aktivasi) dari Zjdilambangkan dengan zj: zj=f(z_inj).

w0k Prasikap pada unit keluaran k Yk Unit keluaran k :

Net input pada Yk dilambangkan dengan y_ink :

=

+

j jk j k

k

w

z

w

in

y

_

0

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, j=1,..,p) menjumlah sinyal

input terbobot :

=

+

=

n

i ij i j

j

v

x

v

in

z

1 0

_


(32)

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

j

jk j k

k

w

z

w

in

y

1 0

_

Dan aplikasikan fungsi aktivasinya untuk menghitung sinyal output

y

k

=

f

(

y

_

in

k

)

Tahap Perambatan balik dari galat

Langkah 6 Tiap unit keluaran (Yk, k=1,…,m) menerima pola target

yang sesuai dengan pola masukan pelatihan, 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) :

w

0k

=

αδ

k

Kirimkan δk ke unit pada lapisan sebelumnya.

Langkah 7 Tiap unit tersembunyi (Zj, j=1,….,p) menjumlahkan delta


(33)

=

=

m

k

jk k

j

w

in

1

_

δ

δ

Kalikan dengan turunan dari fungsi aktivasinya untuk menghitung informasi galat :

δ =

j

δ

_

in

j

f

'

(

z

_

in

j

)

Hitung koreksi bobot (yang akan digunakan untuk penyesuaian vij) :

v

ij

=

αδ

j

x

i

Hitung koreksi prasikap (untuk penyesuaian v0j) :

v

0j

=

αδ

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

)

+

v

ij

Langkah 9 Pengetesan kondisi berhenti.

3.2. F ungsi 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 :


(34)

)

exp(

1

1

)

(

1

x

x

f

+

=

(2.35)

dengan turunannya adalah :

[

1

(

)

]

)

(

)

(

1 1

'

1

x

f

x

f

x

f

=

(2.36)

Gambar (2.3) memperlihatkan fungsi sigmoid biner.

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 :

1

)

exp(

1

2

)

(

2

=

+

x

x

f

(2.37)

dengan turunannya adalah :

[

1

(

)

][

1

(

)

]

2

1

)

(

2 2

'

2

x

f

x

f

x

f

=

+

(2.38)

Gambar 2.4 Fungsi sigmoid bipolar, dengan rentang nilai (-1,1)

x F(x)

x F(x)


(35)

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


(36)

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

)

1n

=

0

,

7

n

p

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

)

=

v

1j

(

lama

)

2

+

v

2j

(

lama

)

2

+

...

+

v

nj

(

lama

)

2

Inisialisasikan kembali bobot :

)

(

)

(

lama

v

lama

v

v

j ij ij

β

=

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


(37)

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 :

e

W

P

e

P

W

=

=

atau

,

(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


(38)

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 L MS (L east 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 :

{

p

1

,

t

1

} {

,

p

2

,

t

2

} {

,....,

p

k

,

t

k

}

(2.40)

dengan pk 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


(39)

meminimalkan galat rata-rata kuadrat. Galat yang merupakan fungsi bobot yang akan diminimalkan adalah sebagai berikut :

(

)

=

k k k

y

t

E

0

.

5

2 (2.41)

Dengan aturan rantai, diperoleh gradien dari galat pada lapisan keluaran sebagai berikut :

(

)

(

)

[

]

[

]

(

)

[

]

(

)

_

'

_

_

5

0

5

.

0

2 2 J K K K K JK K K K K JK k k k JK JK

z

in

y

f

y

t

in

y

f

w

y

t

in

y

f

t

.

w

y

t

w

w

E

=

=

=

=

(2.42)

Kemudian, informasi error

δ

K didefinisikan :

[

K K

]

(

K

)

K

=

t

y

f

'

y

_

in

δ

(2.43)

Dengan cara yang sama, dapat dicari gradien pada lapisan tersembunyi sebagai berikut :

[

]

[

]

(

)

(

)

[ ]

I k J Jk k k J IJ Jk k k k IJ k k k IJ k k k k k IJ k k IJ

x

in

z

f

w

z

v

w

in

y

v

in

y

v

in

y

f

y

t

y

v

y

t

v

E

=

=

=

=

=

_

'

_

_

_

'

δ

δ

δ

(2.44)


(40)

(

J

)

k

JK k

J

=

δ

w

f

'

z

_

in

δ

(2.45)

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).


(41)

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.


(42)

30

III. CARA PE NE LITIAN

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 :

--#--

-###-

-###-

----#

#####

-##--

#---#

#---#

---##

#---#--

----#

----#

--#-#

#---#--

---#-

--##-

-#--#

####---#--

--#--

----#

#####

----#

--#--

-#---

#---#

----#

----#

-###-

#####

-###-

----#

####--####

#####

-###-

-###-

-###-#----

----#

#---#

#---#

#---#

#----

---#-

#---#

#---#

#---#

####-

---#-

-###-

-####

#---#

#---#

--#--

#---#

----#

#---#

#---#

--#--

#---#

----#

#---#

-###-

-#---

-###-

####-


(43)

-###-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 pseudo-code(algoritma) dari kedua algoritma pelatihan yang akan dibuat programnya yaitu algoritma pelatihan perambatan balik standar dan algoritma pelatihan perambatan balik dengan conjugate gradient.


(44)

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 :

[

]

=

k

k

k

y

t

E

0

.

5

2 (3.1)

Bila dinyatakan sebagai fungsi galat, menjadi :

( )

=

[

( )

]

k

k

k

y

w

t

w

F

0

.

5

2 (3.2)

Maka galat untuk keseluruhan pola dihitung dengan rata-rata galat sebagai berikut :

[

]

∑∑

=

n k

n k

k

y

t

N

E

0

.

5

2 (3.4)

dengan N adalah jumlah pola pelatihan. Fungsi galatnya :

( )

=

∑∑

[

( )

]

n k

n k

k

y

w

t

N

w

F

0

.

5

2 (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


(45)

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 a1 pada gambar 3.1. Titik ini merupakan nilai bobot dan prasikap jaringan saat itu. Dengan kata lain, yang dihitung adalah :

F

( )

w

0


(46)

Langkah selanjutnya adalah mengevaluasi galat pada titik kedua, dalam gambar 3.1. dilambangkan dengan b1, yang berjarak

ε

dari titik awal, sepanjang arah pencarian pertama p0. Dengan kata lain, dievaluasi nilai :

(

x

0

p

0

)

F

+

ε

Kemudian dilanjutkan dengan mengevalusai fungsi galat pada titik baru bi, 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 b3 ke b4. Pada titik ini , diketahui bahwa titik minimum berada antara titik a5 dan b5. Sehingga tidak diperlukan lagi untuk memperlebar selang , karena titik minimum kemungkinan berada pada selang [a4,b4] atau selang [a3,b3]. Kedua kemungkinan ini ditunjukkan pada gambar 3.2.a.

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 [a5,b5] yang merupakan hasil dari langkah lokasi selang akan dievaluasi.

a1 b1

a2 b2

a3 b3

a4 b4

b5

a5

ε

x F(x)


(47)

a. 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)< F(d), maka titik minimum pasti berada pada selang [a,d]. Di sini diasumsikan bahwa terdapat sebuah minimum saja yang terletak pada selang awal.

Selanjutnya adalah menentukan lokasi dari titik internal c dan d. Penelitian ini akan menggunakan metode Golden Section Search, yang dirancang untuk mengurangi banyaknya fungsi yang dievaluasi. Pada tiap iterasi, dibutuhkan satu evaluasi fungsi baru. Pada kasus pada gambar 3.2.b., titik a akan dibuang dan titik c akan menjadi titik luar. Kemudian titik c baru diletakkan antara titik c lama dan titik d. Golden section search akan meletakkan titik baru sehingga selang dari ketidakpastian akan berkurang secepat mungkin.

F(x)

x

a b c

F(x)

x


(48)

Algoritma Golden Section Search : τ=0,618

Tentukan :

(

)(

)

( )

(

)(

1 1

)

( )

1 1 1 1 1 1 1 1

,

1

,

1

d

F

F

a

b

b

d

c

F

F

a

b

a

c

d c

=

=

=

+

=

τ

τ

Untuk k=1,2,….kerjakan :

Jika Fc<Fd, kerjakan :

Tentukan :

(

)(

)

( )

1

1 1 1 1 1 1 1

;

1

;

;

+ + + + + + + +

=

=

+

=

=

=

=

k c c d k k k k k k k k k k

c

F

F

F

F

a

b

a

c

c

d

d

b

a

a

τ

jika tidak, kerjakan : Tentukan :

(

)(

)

( )

1

1 1 1 1 1 1 1

;

1

;

;

+ + + + + + + +

=

=

+

=

=

=

=

k d d c k k k k k k k k k k

d

F

F

F

F

a

b

b

d

d

c

b

b

c

a

τ

selesai

selesai sampai

b

k+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.


(49)

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

i ij i j

j

v

x

v

in

z

1 0

_

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).


(50)

masukan terbobot :

=

+

=

p

j

jk j k

k

w

z

w

in

y

1 0

_

Dan aplikasikan fungsi aktivasinya untuk menghitung sinyal output :

y

k

=

f

(

y

_

in

k

)

Tahap Perambatan balik dari galat

Langkah 6 Tiap unit keluaran (Yk, k=1,…,m) menerima pola target

yang 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):

G

2

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

k

jk k

j

w

in

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):

G

1

ij

=

δ

j

x

i


(51)

gradien (j=0,…,p):

(

)

N

polaN

G

pola

G

rata

rata

G

2

jk

=

2

jk

(

1

)

+

....

+

2

jk

(

)

Tiap unit tersembunyi (Zj, j=1,…,p) menghitung rata-rata

gradien (i=0,…,n):

(

)

N

polaN

G

pola

G

rata

rata

G

1

ij

=

1

ij

(

1

)

+

....

+

2

ij

(

)

dengan N adalah jumlah pola pelatihan.

Penyesuaian Bobot dan Prasikap (Conjugate Gradient)

Langkah 9 Tentukan q=1

Langkah 10 Hitung arah pencarian lapis tersembunyi :

p

1

ij

=

G

1

ij

(

rata

rata

)

Hitung arah pencarian lapis keluaran :

p

2

jk

=

G

2

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 :

=

∑∑

(

)

n k

k

k

y

w

t

N

w

f

(

)

2

2

1

)

(

Langkah 12 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, j=1,…,p) menyesuaikan

prasikap dan bobotnya (i=0,…,n) :

v

ij

(

baru

)

=

v

ij

(

lama

)

+

(

α

1

)(

p

1

ij

)


(52)

Jika galat<toleransi, perhitungan berhenti. Jika galat >=toleransi, ke langkah 14

Langkah 14 Tentukan :

)

(

)

(

baru

v

v

baru

w

w

ij ij jk jk

=

=

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, maka

lanjutkan ke langkah: a. Tentukan q=q+1

b. Lakukan langkah 2 sampai dengan langkah 8 untuk menghitung gradien.

c. Hitung arah pencarian baru :

( )

( )

jk jk jk ij ij ij

p

G

baru

p

p

G

baru

p

2

)

2

(

2

)

(

2

1

)

1

(

1

)

(

1

β

β

+

=

+

=

Dengan β1 dan β2 menggunakan metode dari Polak dan

Ribiere seperti persamaan (2.34) :

(

)

(

)

)

(

2

)

(

2

2

)

(

2

2

2

)

(

1

)

(

1

1

)

(

1

1

1

lama

G

lama

G

G

lama

G

G

lama

G

lama

G

G

lama

G

G

jk kj jk kj kj ij ji ij ji ji

=

=

β

β

d. Lanjutkan ke langkah 11

Tahap selanjutnya adalah pembuatan program yang meliputi langkah-langkah sebagai berikut penulisan program (coding). Program ditulis berdasarkan pseudo-code/algoritma yang telah dibuat. Program dilengkapi dengan dokumentasi yang


(1)

{

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(); }


(2)

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;


(3)

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;


(4)

}

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 : "<<iterasi<<endl; cout<<"Galat rerata : "<<fError<<endl; iterasi++;

while (!CheckError()) {

BackupOld(); Init();

GradientAvg();

if (q+1 > ((n+1)*p+(p+1)*m)) {

q=1;

SearchDirectionSteepestDescent(); }

else {

q++;

SearchDirectionPolakRibiere(); }

GoldenSectionSearch(); WeightUpdate();

cout<<"Iterasi ke : "<<iterasi<<endl; cout<<"Galat rerata : "<<fError<<endl; iterasi++;


(5)

if (iterasi == MaxIterasi) break;

} }

void CGBackP_All::PrintWeight() {

cout<<"iterasi ke- : "<<iterasi<<endl; cout<<"galat rerata : "<<fError<<endl; for (int j=1;j<=p;j++)

{

for (int i=0;i<=n;i++) {

cout<<"Bias dan Bobot lapisan tersembunyi W1["<<i<<"]["<<j<<"] = " << w1[i][j]<<endl;

} }

for (int k=1;k<=m;k++) {

for (int j=0;j<=p;j++) {

cout<<"Bobot lapisan output W2["<<j<<"]["<<k<<"] = " << w2[j][k]<<endl;

} }

cout<<"\nJumlah iterasi : "<<iterasi<<endl; }

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();


(6)

*/

return 0;