PENGENALAN POLA ANGKA DENGAN MENGGUNAKAN ALGORITMA HOPFIELD
SKRIPSI
ZULKARNAIN HARUN NIM : 041421008
DEPARTEMEN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA MEDAN 2008
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
PENGENALAN POLA ANGKA DENGAN MENGGUNAKAN ALGORITMA HOPFIELD
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Sains
ZULKARNAIN HARUN 041421008
DEPARTEMEN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA MEDAN 2008
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
ABSTRAK
Kajian tentang pengenalan pola telah banyak digunakan dalam pencarian kata-kata maupun angka dalam dokumen dengan jumlah volume yang besar, kemudian penyortiran secara otomatis surat-surat pos, serta kemudahan dalam pengeditan dokumen-dokumen yang telah dicetak. Pada skripsi ini dibahas pengenalan pola angka dengan menggunakan algoritma Hopfield, mengenai algoritma serta implementasinya ke dalam program komputer. Hasil pengenalan ditampilkan dalam bentuk java applet. Dari proses pengenalan diperoleh bahwa algoritma Hopfield dapat mengenali pola angka dari 0 sampai 9, namun setelah diuji dengan pola yang memiliki bentuk hampir sama, diperoleh hasil pengenalan yang belum konsisten.
i Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
NUMERIC PATTERN RECOGNITION USING HOPFIELD ALGORITHM
ABSTRACT
Studies of pattern recognition have been used abilities such as searching for words or numbers in large volumes of documents, then automatic posting of postal mail, and convenient editing of previously printed documents. This paper discusses numeric pattern recognition using Hopfield algorithm, about the algorithm and its implementation in computer program. Results of recognition are shown with java applet. Result of recognition shows that Hopfield algorithm can recognize numeric pattern from 0 to 9, but after testing patterns with almost identical shape, there were inconsistency in recognitions.
ii Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
DAFTAR ISI Hal ABSTRAK DAFTAR ISI DAFTAR GAMBAR DAFTAR TABEL
BAB I
i iii v vii
Pendahuluan 1.1 Latar Belakang 1.2 Rumusan Masalah 1.3 Batasan Masalah 1.4 Tujuan Penelitian 1.5 Kontribusi Penelitian 1.6 Metode Penelitian 1.7 Tinjauan Pustaka
1 3 3 3 3 4 4
BAB II Landasan Teori 2.1 Pengertian Umum Jaringan Syaraf Tiruan 2.1.1 Sejarah Jaringan Syaraf Tiruan 2.1.2 Konsep Dasar Jaringan Syaraf Tiruan 2.1.3 Definisi Jaringan Syaraf Tiruan 2.1.4 Karakteristik Jaringan Syaraf Tiruan 2.1.5 Kelebihan Jaringan Syaraf Tiruan 2.2 Model Neuron 2.2.1 Single-Layer Neural Network 2.2.2 Multilayer Perceptron Neural Network 2.2.3 Recurrent Neural Network 2.3 Proses Pembelajaran pada Jaringan Syaraf Tiruan 2.3.1 Supervised Learning 2.3.2 Unsupervised Learning 2.4 Model Jaringan Hopfield 2.5.1 Input (Masukan) 2.5.2 Proses Pembelajaran 2.5.3 Proses Perhitungan Saat Pembelajaran 2.5.4 Output (Keluaran) 2.6 Algoritma Hopfield 2.7 Flowchart Algoritma Hopfield
5 6 6 8 10 10 12 13 14 15 15 16 16 16 17 19 20 20 20 26
BAB III Analisis dan Perancangan Aplikasi 3.1 Analisis Kebutuhan 3.2 Aplikasi Algoritma Hopfield 3.3 Kondisi Konvergen 3.4 Rancangan Tampilan 3.5 Rancangan Masukan dan Keluaran
27 28 31 31 32
iii Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
3.5.1 Rancangan Masukan 3.5.2 Rancangan Keluaran 3.6 Analisis Kebutuhan Perangkat Keras
32 33 33
BAB IV Pembahasan 4.1 Perangkat Lunak 4.2 Struktur Data 4.3 Pengenalan Pola dengan Matlab 4.4 Aplikasi Algoritma ke dalam Program Java
34 35 36 38
BAB V Kesimpulan dan Saran 4.1 Kesimpulan 4.2 Saran
50 50
DAFTAR PUSTAKA
51
LAMPIRAN
iv Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
DAFTAR GAMBAR
Hal Gambar 1. Bentuk dasar neuron jaringan syaraf
5
Gambar 2. Arsitektur dasar Jaringan Syaraf Tiruan
13
Gambar 3. Single Layer Neural Network
13
Gambar 4. Multilayer Perceptron Neural Network
14
Gambar 5. Recurrent Neural Network
15
Gambar 6. Sekumpulan titik membentuk pola x pada bidang gambar
18
Gambar 7. Flowchart Algoritma Hopfield
26
Gambar 8. Struktur Jaringan Hopfield
26
Gambar 9. Rancangan Tampilan Program Applet Pada Browser
32
Gambar 10. Pola aplikasi algoritma Hopfield untuk mengenali pola pada Matlab 36 Gambar 11. Pola angka 3 yang diacak
36
Gambar 12. Pola angka pada iterasi ke-10
37
Gambar 13. Pola angka pada iterasi ke-30
37
Gambar 14. Pola angka pada iterasi ke-45
38
Gambar 15. Contoh pola angka satu pada bidang gambar yang akan dipelajari komputer
38
Gambar 16. Pola angka 1 yang akan dikenali komputer
39
Gambar 17. Pola angka 0
43
Gambar 18. Pola angka 1
43
Gambar 19. Pola angka 2
43
Gambar 20. Pola angka 3
44
Gambar 21. Pola angka 4
44
Gambar 22. Pola angka 5
44
Gambar 23. Pola angka 6
45
Gambar 24. Pola angka 7
45 v
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 25. Pola angka 8
45
Gambar 26. Pola angka 9
46
Gambar 27. Pola angka yang telah diacak
46
Gambar 28. Pola yang telah dikenali oleh program
47
Gambar 29. Pola angka 0 yang diacak mendekati bentuk angka 8
47
Gambar 30. Pola yang dikenali sebagai angka 8
48
Gambar 31. Pola angka 1 yang telah diacak
48
Gambar 32. Pola angka acak yang dikenali sebagai angka 1
49
vi Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
DAFTAR TABEL TABEL 1
JUDUL Koneksi pada jaringan syaraf Hopfield
vii Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
HAL 23
BAB 1
PENDAHULUAN
1.1 Latar Belakang
Artificial Intelligence (Kecerdasan Buatan) adalah salah satu bidang dalam ilmu komputer yang membuat agar mesin (komputer) dapat mengerjakan hal-hal menuntut kecerdasan. Penelitian mengenai Kecerdasan Buatan adalah suatu usaha untuk menemukan dan menjabarkan aspek-aspek dari kecerdasan manusia yang dapat disimulasikan oleh mesin. Sebagai contoh, pada saat ini terdapat mesin-mesin yang dapat melakukan hal-hal sebagai berikut: 1. Memainkan permainan yang membutuhkan strategi (seperti permainan catur, kartu) dan belajar untuk bermain lebih baik dari lawannya (dalam hal ini manusia). 2. Belajar untuk mengenali pola-pola visual atau suara. 3. Menemukan bukti-bukti untuk teorema matematika. 4. Menyelesaikan
beragam
bentuk
permasalahan
yang
diformulasikan
sedemikian rupa. 5. Memroses informasi-informasi yang diekspresikan dalam bahasa manusia.
Kemampuan mesin dalam melakukan hal-hal independen semacam ini seperti manusia masih terbatas; mesin-mesin menunjukkan perilaku hanya dengan tingkat kecerdasan mendasar. Namun demikian, ada kemungkinan-kemungkinan bahwa mesin dapat dikembangkan untuk menunjukkan kecerdasan yang sebanding dengan manusia, atau bahkan melebihi manusia (Jackson, Philip C., 1949).
Dengan kata lain, penelitian Kecerdasan Buatan dapat dilihat sebagai suatu usaha mengembangkan teori matematis untuk menjabarkan kemampuan-kemampuan
1 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
dan tindakan-tindakan (baik yang natural atau buatan manusia) yang menunjukkan suatu kecerdasan.
Salah satu pengembangan lebih lanjut dari Kecerdasan Buatan adalah Artificial Neural Network (Jaringan Syaraf Tiruan disingkat JST). Jaringan Syaraf Tiruan adalah salah satu representasi buatan dari otak manusia yang selalu mencoba untuk mensimulasikan proses pembelajaran pada otak manusia tersebut. Istilah buatan digunakan karena
jaringan syaraf ini diimplementasikan dengan menggunakan
program komputer yang mampu menyelesaikan sejumlah proses perhitungan selama proses pembelajaran.
Ada beberapa tipe jaringan syaraf, namun hampir semuanya memiliki komponen-komponen yang sama. Seperti otak manusia, jaringan syaraf juga terdiri dari beberapa neuron yang saling terhubung. Neuron-neuron tersebut akan mentransformasikan informasi yang diterima melalui sambungan keluarnya menuju neuron-neuron yang lain. Pada jaringan syaraf hubungan ini dikenal dengan nama bobot. Informasi yang diterima, disimpan pada suatu nilai tertentu pada bobot tersebut (Kusumadewi, 2003).
Model Jaringan Neural ditunjukkan dengan kemampuannya dalam emulasi, analisa, prediksi, dan asosiasi. Berdasarkan kemampuan yang dimiliki, Artificial Neural Network dapat digunakan untuk belajar dan menghasilkan aturan, atau operasi dari beberapa contoh, untuk menghasilkan output yang diinginkan dari contoh input yang dimasukkan, dan membuat prediksi tentang kemungkinan output yang akan muncul atau menyimpan karakteristik dari input yang disimpan.
Komputerisasi
Artificial
Neural
Network
dapat
dilakukan
dengan
menggunakan berbagai algoritma yang akan diterjemahkan ke kode program kemudian di compile menggunakan compiler dan selanjutnya diterjemahkan ke bahasa instruksi mesin. Penggunaan algoritma untuk menyelesaikan proses komputerisasi suatu permasalahan akan sangat membantu.
2 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
1.2 Rumusan Masalah
Permasalahan dalam tulisan ini adalah bagaimana komputer dapat mengenali serta membandingkan pola angka dalam bentuk grafis yang telah diinput, dengan menggunakan algoritma Hopfield.
1.3 Batasan Masalah
Dalam penelitian ini penulis membuat batasan lingkup tentang bagaimana algoritma tersebut diimplementasikan untuk mengenali pola angka. Batasan implementasi algoritma Hopfield sebagai berikut: 1. Penggambaran pola angka menggunakan tetikus. 2. Output yang diperoleh ditampilkan dengan Matlab dan Java Applet. 3. Program dibuat dengan bahasa Java.
1.4 Tujuan Penelitian
Tujuan dari penulisan tugas akhir ini adalah bagaimana algoritma Hopfield dapat mengenali pola angka dan bagaimana komputer dapat belajar mengenal dan membandingkan pola angka.
1.5 Kontribusi Penelitian
Dengan mengimplementasikan algoritma Hopfield dalam Artificial Neural Network untuk pengenalan pola angka dapat bermanfaat dalam pengembangan Artificial Neural Network lebih lanjut dengan penerapan komputerisasi dalam bidang simulasi pengenalan lainnya.
3 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
1.6 Metode Penelitian
Adapun metode penelitian yang penulis gunakan adalah sebagai berikut: 1. Studi pustaka tentang algoritma Hopfield. 2. Menganalisa Algoritma Hopfield dalam pengenalan pola angka. 3. Mengimplementasikan algoritma Hopfield dalam program komputer. 4. Mengambil kesimpulan dari hasil yang diperoleh.
1.7 Tinjauan Pustaka
Sri Kusumadewi dalam bukunya Artificial Intelligence (Teknik dan Aplikasinya), menjelaskan tentang berbagai macam tipe jaringan syaraf tiruan serta aplikasinya yang diantaranya adalah pengenalan pola.
Dan Morris dalam artikelnya pada http://techhouse.brown.edu/dmorris/JOHN/ StinterNet.html membahas tentang pengenalan pola dengan menggabungkan beberapa algoritma jaringan syaraf tiruan serta menampilkannya ke dalam java applet. Dan Morris juga membahas beberapa kekurangan pada algoritma jaringan syaraf tiruan yang ada sekarang ini.
4 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
BAB 2
LANDASAN TEORI
2.1. Pengertian Umum Jaringan Syaraf Tiruan
Jaringan Syaraf Tiruan (JST) adalah suatu jaringan dari sekelompok unit pemroses yang melakukan pendistribusian secara besar-besaran dan dimodelkan berdasarkan jaringan syaraf manusia, yang memiliki kecenderungan alami untuk menyimpan suatu pengenalan yang pernah dialaminya. Dengan kata lain JST memiliki kemampuan untuk dapat melakukan pembelajaran dan pendeteksian terhadap sesuatu pola.
Secara mendasar, sistem pembelajaran merupakan proses penambahan pengetahuan pada JST yang sifatnya kontinu sehingga pada saat digunakan pengetahuan tersebut akan dieksploitasi secara maksimal dalam mengenali suatu pola. Neuron adalah bagian dasar dari pemrosesan suatu jaringan syaraf. Di bawah ini merupakan bentuk dasar dari suatu neuron[1].
Input dari neuronneuron yang lain
Weight
Weight
Fungsi aktivasi
Output
Processing Unit Gambar 1. Bentuk dasar neuron jaringan syaraf
5 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Output dari neuronneuron yang lain
1. Input merupakan masukan yang digunakan baik saat pembelajaran maupun dalam mengenali suatu pola. 2. Weight, beban yang selalu berubah setiap kali diberikan input sebagai proses pembelajaran. 3. Processing Unit merupakan tempat berlangsungnya proses pengenalan suatu pola berdasarkan pembebanan yang diberikan. 4. Output, keluaran dari hasil pengenalan suatu pola.
2.1.1 Sejarah Jaringan Syaraf Tiruan Saat ini bidang kecerdasan buatan dalam usahanya menirukan intelegensi manusia, belum mengadakan pendekatan dalam bentuk fisiknya melainkan dari sisi yang lain. Pertama-tama diadakan studi mengenai teori dasar mekanisme proses terjadinya intelegensi. Bidang ini disebut „Cognitive Science‟. Dari teori dasar ini dibuatlah suatu model untuk disimulasikan pada komputer, dan dalam perkembangannya yang lebih lanjut dikenal berbagai sistem kecerdasan buatan yang salah satunya adalah jaringan syaraf tiruan. Dibandingkan dengan bidang ilmu yang lain, jaringan syaraf tiruan relatif masih baru. Sejumlah literatur menganggap bahwa konsep jaringan syaraf tiruan bermula pada makalah Waffen McCulloch dan Walter Pitts pada tahun 1943. Dalam makalah tersebut mereka mencoba untuk memformulasikan model matematis sel-sel otak. Metode yang dikembangkan berdasarkan sistem syaraf biologi ini, merupakan suatu langkah maju dalam industri komputer.[ Hermawan, Arief, 2006]
2.1.2 Konsep Dasar Jaringan Syaraf Tiruan Tidak ada otak manusia yang sama antara satu dengan lainnya. Ada perbedaan dalam ketajaman, ukuran dan pengorganisasiannya. Salah satu cara untuk memahami cara otak bekerja adalah dengan mengumpulkan informasi dari sebanyak mungkin scan otak manusia dan memetakannya. Hal tersebut merupakan upaya untuk menemukan cara kerja rata-rata otak manusia itu. Peta otak manusia diharapkan dapat menjelaskan
6 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
misteri mengenai cara otak mengendalikan setiap tindak-tanduk manusia, mulai dari penggunaan bahasa hingga gerakan. Walaupun demikian kepastian cara kerja otak manusia masih merupakan suatu misteri. Meski beberapa aspek dari prosesor yang menakjubkan ini telah diketahui tetapi itu tidaklah banyak. Beberapa aspek-aspek tersebut, yaitu: a. Tiap bagian pada otak manusia memiliki alamat, dalam bentuk formula kimia, dan sistem syaraf manusia berusaha untuk mendapatkan alamat yang cocok untuk setiap akson (syaraf penghubung) yang dibentuk. b. Melalui pembelajaran, pengalaman dan interaksi antara sistem struktur dari otak itu sendiri akan mengatur fungsi-fungsi dari setiap bagiannya. c. Akson-akson pada daerah yang berdekatan akan berkembang dan mempunyai bentuk fisik mirip, sehingga terkelompok dengan arsitektur tertentu pada otak. d. Akson berdasarkan arsitekturnya bertumbuh dalam urutan waktu, dan terhubung pada struktur otak yang berkembang dengan urutan waktu yang sama. Berdasarkan ke empat aspek tersebut di atas dapat ditarik suatu kesimpulan bahwa otak tidak seluruhnya terbentuk oleh proses genetis. Terdapat proses lain yang ikut membentuk fungsi dari bagian-bagian otak, yang pada akhirnya menentukan suatu informasi diproses oleh otak. Elemen yang paling mendasar dari jaringan syaraf adalah sel syaraf. Sel-sel syaraf inilah membentuk bagian kesadaran manusia yang meliputi beberapa kemampuan umum. Pada dasarnya sel syaraf biologi menerima masukan dari sumber yang lain dan mengkombinasikannya dengan beberapa cara, melaksanakan suatu operasi yang non-linear untuk mendapatkan hasil dan kemudian mengeluarkan hasil akhir tersebut. Dalam tubuh manusia terdapat banyak variasi tipe dasar sel syaraf, sehingga proses berpikir manusia menjadi sulit untuk direplikasi secara elektrik. Sekalipun demikian, semua sel syaraf alami mempunyai empat komponen dasar yang sama. Keempat komponen dasar ini diketahui berdasarkan nama biologinya yaitu, dendrit, 7 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
soma, akson, dan sinapsis. Dendrit merupakan suatu perluasan dari soma yang menyerupai rambut dan bertindak sebagai saluran masukan. Saluran masukan ini menerima masukan dari sel syaraf lainnya melalui sinapsis. Soma dalam hal ini kemudian memproses nilai masukan menjadi sebuah output yang kemudian dikirim ke sel syaraf lainnya melalui akson dan sinapsis. Penelitian terbaru memberikan bukti lebih lanjut bahwa sel syaraf biologi mempunyai struktur yang lebih kompleks dan lebih canggih daripada sel syaraf buatan yang kemudian dibentuk menjadi jaringan syaraf buatan yang ada sekarang ini. Ilmu biologi menyediakan suatu pemahaman yang lebih baik tentang sel syaraf sehingga memberikan keuntungan kepada para perancang jaringan untuk dapat terus meningkatkan sistem jaringan syaraf buatan yang ada berdasarkan pada pemahaman terhadap otak biologi. Sel syaraf-sel syaraf ini terhubung satu dengan yang lainnya melalui sinapsis. Sel syaraf dapat menerima rangsangan berupa sinyal elektrokimiawi dari sel syaraf-sel syaraf yang lain. Berdasarkan rangsangan tersebut, sel syaraf akan mengirimkan sinyal atau tidak berdasarkan kondisi tertentu. Konsep dasar semacam inilah yang ingin dicoba para ahli dalam menciptakan sel tiruan.[ Kristanto, Andri, 2004]
2.1.3 Defenisi Jaringan Syaraf Tiruan Suatu jaringan syaraf tiruan memproses sejumlah besar informasi secara paralel dan terdistribusi, hal ini terinspirasi oleh model kerja otak biologis. Beberapa definisi tentang jaringan syaraf tiruan adalah sebagai berikut di bawah ini. Hecht-Nielsend (1988) mendefinisikan sistem syaraf buatan sebagai berikut: "Suatu neural network (NN), adalah suatu struktur pemroses informasi yang terdistribusi dan bekerja secara paralel, yang terdiri atas elemen pemroses (yang memiliki memori lokal dan beroperasi dengan informasi lokal) yang diinterkoneksi bersama dengan alur sinyal searah yang disebut koneksi. Setiap elemen pemroses memiliki koneksi keluaran tunggal yang bercabang (fan out) ke sejumlah koneksi 8 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
kolateral yang diinginkan (setiap koneksi membawa sinyal yang sama dari keluaran elemen pemroses tersebut). Keluaran dari elemen pemroses tersebut dapat merupakan sebarang jenis persamaan matematis yang diinginkan. Seluruh proses yang berlangsung pada setiap elemen pemroses harus benar-benar dilakukan secara lokal, yaitu keluaran hanya bergantung pada nilai masukan pada saat itu yang diperoleh melalui koneksi dan nilai yang tersimpan dalam memori lokal". Menurut Haykin, S. (1994), Neural Networks: A Comprehensive Foundation, NY, Macmillan, mendefinisikan jaringan syaraf sebagai berikut: “Sebuah jaringan syaraf adalah sebuah prosesor yang terdistribusi paralel dan mempuyai kecenderungan untuk menyimpan pengetahuan yang didapatkannya dari pengalaman dan membuatnya tetap tersedia untuk digunakan. Hal ini menyerupai kerja otak dalam 2 (dua) hal yaitu: 1. Pengetahuan diperoleh oleh jaringan melalui suatu proses belajar. 2. Kekuatan hubungan antar sel syaraf yang dikenal dengan bobot sinapsis digunakan untuk menyimpan pengetahuan. Menurut Zurada, J.M. (1992), Introduction To Artificial Neural Systems, Boston: PWS Publishing Company, mendefinisikan sebagai berikut: “Sistem syaraf tiruan atau jaringan syaraf tiruan adalah sistem selular fisik yang dapat memperoleh, menyimpan dan menggunakan pengetahuan yang didapatkan dari pengalaman”. DARPA Neural Network Study (1988, AFCEA International Press, p. 60) mendefinisikan jaringan syaraf buatan sebagai berikut: Sebuah jaringan syaraf adalah sebuah sistem yang dibentuk dari sejumlah elemen pemroses sederhana yang bekerja secara paralel di mana fungsinya ditentukan oleh struktur jaringan, kekuatan hubungan, dan pengolahan dilakukan pada komputasi elemen atau node.
9 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
2.1.4 Karakteristik Jaringan Syaraf Tiruan Jaringan syaraf tiruan di defenisikan sebagai sistem pemrosesan informasi yang mempunyai karakteristik menyerupai jaringan syaraf manusia. Jaringan syaraf tiruan tercipta sebagai suatu generalisasi model matematis dari pemahaman manusia (human cognition) yang didasarkan atas asumsi sebagai berikut: 1. Pemrosesan informasi terjadi pada elemen sederhana yang disebut neuron. 2. Isyarat mengalir di antara sel syaraf (neuron) melalui suatu sambungan penghubung. 3. Setiap sambungan penghubung memiliki bobot yang bersesuaian. Bobot ini akan digunakan untuk menggandakan/mengalikan isyarat yang dikirim melaluinya. 4. Setiap sel syaraf akan menerapkan fungsi aktivasi terhadap isyarat hasil penjumlahan berbobot yang masuk kepadanya untuk menentukan isyarat keluarannya.
Karakteristik jaringan syaraf tiruan ditentukan oleh: 1. Pola hubungan antar neuron (disebut dengan arsitektur jaringan) 2. Metode penentuan bobot-bobot sambungan (disebut dengan pelatihan atau proses belajar jaringan) 3. Fungsi aktivasi.[ Hermawan, Arief, 2006]
2.1.5 Kelebihan Jaringan Syaraf Tiruan Sistem jaringan syaraf tiruan disebut juga brain metaphor, computational neuroscience atau parallel distributed processing serta connection. Jaringan syaraf tiruan tersusun dari sejumlah besar elemen yang melakukan kegiatan analog dengan fungsi-fungsi biologis neuron yang paling elementer. Elemen–elemen ini terorganisasi sebagaimana layaknya anatomi otak, walaupun tidak persis. Jaringan syaraf tiruan dapat belajar dari pengalaman, melakukan generalisasi atas contoh–contoh yang 10 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
diperoleh dan mengabstraksi karakteristik essensial input bahkan untuk data yang tidak relevan. Jaringan syaraf tiruan memiliki sejumlah besar kelebihan dibandingkan dengan metode perhitungan lainnya, yaitu: 1. Kemampuan mengakusisi pengetahuan walaupun dalam kondisi ada gangguan dan ketidakpastian. Hal ini karena jaringan syaraf tiruan mampu melakukan generalisasi, abstraksi, dan ekstraksi terhadap property statistic dari data. 2. Kemampuan
merepresentasikan pengetahuan secara fleksibel. Jaringan
syaraf tiruan dapat menciptakan sendiri representasi melalui pengaturan diri sendiri atau kemampuan belajar (Self Organizing). 3. Kemampuan untuk memberikan toleransi atas suatu distorsi (error/fault), dimana gangguan kecil pada data dapat dianggap hanya sebagai noise (guncangan) belaka. 4. Kemampuan memproses pengetahuan secara efisien karena memakai ssstem parallel, sehingga waktu yang diperlukan untuk mengoperasikan menjadi lebih singkat. Sedangkan keuntungan penggunaan Jaringan Syaraf Tiruan dalam hal pengenalan pola: 1. Perangkat yang mampu untuk mengenali suatu pola secara non-linier. 2. Mempermudah pemetaan input menjadi suatu hasil tanpa mengetahui proses sebenarnya. 3. Mampu melakukan pengadaptasian terhadap pengenalan suatu pola 4. Perangkat yang memiliki toleransi terhadap suatu kesalahan dalam pengenalan suatu pola. 5. Neural Network mampu diimplementasikan pada suatu Hardware atau perangkat keras. 6. Perangkat yang mampu diimplementasikan secara parallel.
Dengan tingkat kemampuan yang sangat baik, beberapa aplikasi jaringan syaraf tiruan sangat cocok untuk diterapkan pada: 11 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
1. Klasifkasi, memilih suatu input data kedalam satu kategori tertentu yang diterapkan. 2. Asosiasi, menggambarkan suatu objek secara keseluruhan hanya dengan sebuah bagian dari objek lain. 3. Self Organizing, kemampuan untuk mengelola data input tanpa harus memiliki data sebagai target. 4. Optimasi, menemukan suatu jawaban atau solusi yang paling baik sehingga seringkali dengan meminimalisasikan suatu fungsi biaya (optimizer). (Hermawan, Arief, 2006)
2.2 Model Neuron Neuron adalah unit pemroses informasi yang menjadi dasar dalam pengoperasian jaringan syaraf tiruan. Neuron terdiri dari 3 (tiga) elemen pembentuk: 1. Himpunan unit-unit yang dihubungkan dengan jalur koneksi. Jalur-jalur tersebut memiliki bobot/kekuatan yang berbeda-beda. Bobot yang bernilai positif akan memperkuat sinyal dan yang bernilai negatif akan memperlemah sinyal yang dibawanya. Jumlah, struktur dan pola hubungan antar unit-unit tersebut akan menentukan arsitektur jaringan (dan juga model jaringan yang dibentuk). 2. Suatu unit penjumlah yang akan menjumlahkan input-input sinyal yang sudah dikalikan dengan bobotnya. Misalkan x1,x2, .. , xm adalah unit-unit input dan wj1, wj2, ... , wjm adalah bobot penghubung dari unit-unit tersebut ke unit keluaran Yj, dengan demikian unit penjumlah akan memberikan keluaran sebesar uj = xjwj1 + x2wj2 + ... + xmwjm 3. Fungsi aktivasi yang akan menentukan apakah sinyal dari input neuron akan diteruskan ke neuron lain atau tidak.(Siang, Jong Jek, 2005) Bentuk dasar arsitektur suatu neural network adalah sebagai berikut: 12 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Input
Output
Gambar 2. Arsitektur dasar Jaringan Syaraf Tiruan
Secara umum, terdapat 3 (tiga) jenis jaringan syaraf yang sering digunakan berdasarkan jenis jaringannya (network), yaitu: 1. Single-Layer Neural Network 2. Multilayer Perceptron Neural Network 3. Recurrent Neural Networks
2.2.1 Single-Layer Neural Network
Neural network jenis ini memiliki koneksi pada inputnya secara langsung ke jaringan output.
b(1) p(1) a(1) p(2) a(S) p(R) w(S,R) Input
Output
Gambar 3. Single Layer Neural Network Jenis neural network ini sangatlah terbatas, hanya digunakan pada kasus-kasus yang sederhana.
13 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
2.2.2 Multilayer Perceptron Neural Network Jenis neural network ini memiliki layer (lapisan) yang dinamakan “hidden”, ditengah layer input dan output. Hidden ini bersifat berubah-ubah, dapat digunakan lebih dari satu hidden layer. b1(1)
b2(1)
p(1) a1(1) p(2)
a2(1)
a1(S1)
p(R)
w(S1,R) Input
Hidden
a2(S2) w(S2,S1) Output
Gambar 4. Multilayer Perceptron Neural Network
14 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
2.2.3 Recurrent Neural Network
Neural network jenis ini memiliki ciri, yaitu adanya koneksi umpan balik dari output ke input.
b(1)
p(1)
a(1) p(2) a(S)
p(R)
w(S,R)
Input
Output
Gambar 5. Recurrent Neural Network
Salah satu yang termasuk dalam jenis network ini adalah Hopfield Network.
2.3. Proses Pembelajaran pada Jaringan Syaraf Tiruan
Proses pembelajaran merupakan suatu metoda untuk proses pengenalan suatu pola yang sifatnya kontinu yang selalu direspon secara berbeda dari setiap proses pembelajaran tersebut. Tujuan dari pembelajaran ini sebenarnya untuk memperkecil tingkat suatu error (kesalahan) dalam pengenalan suatu pola. Secara mendasar, jaringan syaraf tiruan memiliki sistem pembelajaran yang terdiri atas beberapa jenis berikut: 1. Supervised Learning 2. Unsupervised Learning
15 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
2.3.1. Supervised Learning
Sistem pembelajaran pada metoda Supervised Learning adalah sistem pembelajaran yang mana, setiap pengetahuan yang akan diberikan kepada sistem, pada awalnya diberikan suatu acuan untuk memetakan suatu masukan menjadi suatu keluaran yang diinginkan. Proses pembelajaran ini akan terus dilakukan selama kondisi kesalahan atau kondisi yang diinginkan belum tercapai. Adapun setiap perolehan kesalahan akan dikalkulasikan untuk setiap pemrosesan hingga data atau nilai yang diinginkan telah tercapai.
2.3.2. Unsupervised Learning
Sistem pembelajaran pada jaringan syaraf tiruan, yang mana sistem ini memberikan sepenuhnya pada hasil komputasi dari setiap pemrosesan, sehingga pada sistem ini tidak membutuhkan adanya acuan awal agar perolehan nilai dapat dicapai. Meskipun secara mendasar, proses ini tetap mengkalkulasikan setiap langkah pada setiap kesalahannya dengan mengkalkulasikan setiap nilai bobot yang didapat.
2.4. Model Jaringan Hopfield
Algoritma Artificial Neural Network Hopfield diperkenalkan pada tahun 1982 di California Institute of Technology. Dalam jaringan Hopfield semua neuron saling berhubungan penuh. Neuron yang satu mengeluarkan output dan kemudian menjadi input bagi semua neuron lain. Proses ini terus berulang sampai output yang diinginkan tercapai.
Model Diskrit jaringan Hopfield dalam bobot sinaptiknya menggunakan vektor biner dimensi n atau dapat dituliskan a{0,1}n. Model ini berisi n neural dan jaringan terdiri dari n(n-1) interkoneksi dua jalur.
16 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Model Jaringan Hopfield secara matematis dapat disajikan dalam matriks simetris NxN dengan diagonal utamanya bernilai 0. Pemberian nilai 0 pada diagonal utama dimaksudkan agar setiap neuron tidak memberi input pada dirinya sendiri. Dengan demikian jaringan Hopfield merupakan suatu jaringan dengan bobot simetrik, bahwa: wij = wji dan wii = 0. Perubahan data pada jaringan terjadi secara asinkron (unit berubah satu persatu, tergantung pada sinyal yang diterima). Perubahan yang terjadi memiliki sebuah fungsi yang berguna untuk melihat apakah sebuah jaringan sudah dalam kondisi stabil. Dalam hal ini Hopfield menggunakan fungsi Lyapunov. Jaringan dikatakan sudah stabil jika terjadi konvergen pada aktivasi yang ada.
2.5.1. Input (Masukan)
Proses ini merupakan bagian dari sistem kerja secara keseluruhan, karena proses masukan digunakan untuk menunjang pada proses pembelajaran serta proses pengujian. Pada proses ini, masukan berupa grafis berupa piksel yang di representasikan sebagai nilai logic atau bilangan biner (1 dan 0, atau dalam bentuk bipolar menjadi 1 dan -1). Pola grafis kemudian diubah ke dalam bentuk matriks.
17 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Contoh bidang yang sudah diisi dengan pola x
Gambar 6. Sekumpulan titik membentuk pola x pada bidang gambar
Dari bidang tersebut diperoleh bentuk matriks yang bersesuaian:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Dari matriks di atas kemudian diubah ke dalam bentuk bipolar sehingga diperoleh:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Matriks di atas kemudian diolah menjadi matriks bobot yang akan digunakan sebagai media penyimpan pola, sekaligus menandakan dimulainya proses pembelajaran.
2.5.2. Proses Pembelajaran
Pada bagian ini merupakan sisi kelebihan dari metoda Jaringan Syaraf Tiruan, dimana setiap permasalahan yang akan dihadapi dapat dipecahkan dengan melalui tahapan pembelajaran, seperti halnya otak manusia yang secara sifat biologis, memiliki kemampuan untuk mempelajari hal-hal yang baru. Memang pada dasarnya, jaringan syaraf tiruan ini dibuat untuk dapat mempelajari sesuatu hal yang baru sehingga mampu melakukan penganalisaan tanpa menggunakan suatu rumusan yang baku.
Proses pembelajaran ini sangat mempengaruhi sensitifitas kemampuan dalam melakukan penganalisaan. Jika semakin banyak bahan atau masukan sebagai pembelajaran, maka akan semakin mudah dan sensitif dalam melakukan analisa.
19 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
2.5.3. Proses Perhitungan Saat Pembelajaran
Proses ini melibatkan 2 (dua) faktor penting, yaitu masukan dan keluaran yang ditentukan. Keluaran tersebut merupakan bagian dari sistem atau metoda pembelajaran yang dinamakan “Supervised Learning”, dengan demikian setiap masukan memiliki keluaran yang nantinya akan dijadikan sebagai acuan pembelajaran. Hal inilah yang membuat Neural Network melakukan penganalisaan, selain banyaknya masukan yang diberikan, proses pembelajaran yang dilakukan secara berulang pun akan menunjang kemampuan Neural Network saat menganalisa.
2.5.4. Output (Keluaran)
Bagian ini merupakan proses yang digunakan untuk mengetahui seberapa besar pengaruh pembelajaran terhadap keluaran yang diinginkan. Jika hasil yang diinginkan kurang sesuai, maka kemungkinan yang terjadi adalah:
Variabel masukan (informasi yang diberikan) kurang menunjang
Kurangnya layer pada rancangan keseluruhan
Jumlah neuron yang terlalu sedikit
Namun tidak menutup kemungkinan karena ketidaksesuaian penerapan saat proses pembelajaran dilakukan juga dapat mempengaruhi proses pembelajaran.
2.6. Algoritma Hopfield
Terdapat beberapa versi algoritma dari jaringan Hopfield. Pada penjelasan pertama Hopfield (1982) menggunakan input vektor biner. Untuk menyimpan suatu pola biner S(p), p = 1,…, p, dimana S(p) = (S1(p),…, Si(p), …, Sn(p)), untuk matriks bobotnya W = {wij} diperoleh dengan 20 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
untuk i ≠ j dan
Pada penjelasan lainnya Hopfield (1984) menggunakan input bipolar. Untuk menyimpan pola bipolar, matriks bobot yang digunakan W = {wij}, diperoleh dengan
dan
Proses pembelajaran terjadi pada saat neuron yang saling terhubung aktif pada saat yang bersamaan. Jika ini terjadi, maka nilai bobot harus berubah. Dalam proses perubahan bobot Hopfield menggunakan aturan Hebb, yang mana:
Aplikasi dari algoritma jaringan Hopfield dapat dilihat: Langkah 1. Inisialisasi bobot untuk menyimpan pola dengan menggunakan aturan Hebb. Jika aktivasi jaringan belum mencapai konvergen ulangi langkah 2 sampai 8. Langkah 2. Untuk setiap input vektor x, lakukan langkah 3 sampai 7. Langkah 3. Tentukan aktivasi awal jaringan sama dengan input eksternal vektor x.
Langkah 4. Lakukan langkah 5 sampai 7 untuk setiap Yi, perubahan unit adalah acak.
21 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Langkah 5. Hitung jaringan input:
Langkah 6. Tentukan aktivasi (sinyal output)
Untuk ambang,
, biasanya bernilai nol.
Langkah 7. Masukkan nilai yi ke dalam unit-unit lainnya. (terjadi perubahan vektor aktivasi).
Langkah 8. Uji apakah terjadi konvergensi Analisa pada fungsi Lyapunov (biasa juga disebut sebagai fungsi energi) untuk jaringan Hopfield adalah bagian penting yang akan menunjukkan bahwa telah terjadi konvergensi, dimana sebelumnya bobot telah berubah secara asinkron dan nilai 0 pada diagonalnya (Fausett, L, 1994).
Adapun Algoritma Hopfield dalam penerapan pola angka 0 sampai angka 9 adalah sebagai berikut: 1. Menciptakan vektor pola yang ke – p, yang merupakan himpunan n simpul untuk pola yang ke- p. S(p) = (S1(p), S2(p), …, Si(p), …, Sn(p)) Keterangan: P = Jumlah Pola Angka 2. Menciptakan matriks koneksi sebagai tempat pola contoh yaitu angka 0 sampai pola angka 9 yang disimpan dalam suatu konstanta.
22 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Koneksi pada jaringan syaraf Hopfield dapat dilihat pada tabel berikut: Tabel 1. Koneksi pada jaringan syaraf Hopfield Neuron 1 (N1)
Neuron 2 (N2)
Neuron 3 (N3) Neuron 4 (N4)
Neuron 1 (N1)
Tidak Ada
N2>N1
N3>N1
N4>N1
Neuron 2 (N2)
N1>N2
Tidak Ada
N3>N2
N4>N2
Neuron 3 (N3)
N1>N3
N2>N3
Tidak Ada
N4>N3
Neuron 4 (N4)
N1>N4
N2>N4
N3>N4
Tidak Ada
3.
Keterangan: P
= jumlah bobot
Wij = bobot koneksi dari simpul i ke simpul j Si(p) = elemen in dari pola s yang hanya memiliki nilai +1 atau -1 Sj(p) = elemen in dari pola s yang hanya memiliki nilai +1 atau -1 Untuk membentuk matriks bobot dimulai dengan matriks koneksi bobot kosong:
Misalkan ingin menerima nilai 0101, untuk ini terlebih dahulu dibentuk matriks koneksi dari 0101. Matriks koneksinya kemudian ditambahkan ke dalam matriks koneksi bobot. Saat nilai dimasukkan, matriks koneksi bobot berada dalam proses pengenalan pola baru.
23 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Langkah berikutnya adalah mengubah nilai 0101 menjadi bipolar, sehingga menjadi: 0 = -1 1=1 0 = -1 1=1
Sehingga diperoleh sebuah array -1, 1, -1, 1. Array ini kemudian digunakan untuk membangun matriks kontribusi 0101 dengan cara mengalikan dengan transposenya. Hasilnya dapat dilihat sebagai berikut:
Langkah selanjutnya adalah membuat 0 secara diagonal nilai dari sudut kiri atas sampai sudut kanan bawah. Hal ini dilakukan karena neuron pada jaringan Hopfield tidak terhubung pada dirinya sendiri, sehingga matriks diatas menjadi:
Matriks di atas dapat ditambahkan ke dalam matriks koneksi bobot yang sudah ada. Jika pola yang ingin dikenali hanya 0101, maka matriks di atas menjadi matriks bobotnya.
4. Kerjakan langkah-langkah ini selama pola belum konvergen. Langkah a: Untuk tiap vektor x (x1, x2, …, xn). Langkah b: Inisialisasi pola input yang tidak diketahui. Yi = Xi dengan (i = 1 … n) Langkah c: Kerjakan langkah b sampai semua pola diuji. 24 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Langkah d:
Langkah e: Determinitive Activation (Sinyal Output). 1 untuk y_ini 0 yi = -1 untuk y_ini < 0
Keterangan: 0i selalu berharga 0 Langkah f: Hasil dari output Yi berlaku untuk semua pola lain. Langkah g: Uji pola sampai konvergen.
25 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
2.7. Flowchart Algoritma Hopfield
Mulai
Tentukan Matriks Bobot
Proses Kalkulasi
Bangun JST Hopfield
Jalankan JST Hopfield Sampai Keadaan Stabil
Proses Pembelajaran
Cek Solusi
Cek Kondisi Konvergen
Terpenuhi
Tidak Terpenuhi
Pola Angka Dikenali
Selesai
Gambar 7. Flowchart Algoritma Hopfield
26 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
BAB 3
ANALISIS DAN PERANCANGAN APLIKASI
3.1 Analisis Kebutuhan
Tulisan tangan sangat penting dalam komunikasi antar manusia. Baik dalam kebutuhan komunikasi pribadi seperti surat menyurat, catatan, maupun dalam komunikasi bisnis seperti surat berharga bank, pajak, perjanjian kerja dan lain-lain. Tulisan tangan adalah hasil penggabungan kerja otak dan tubuh seseorang, sehingga menjadikannya berbeda antar setiap pribadi sebagaimana wajah dan sifatnya.
Interaksi dan ketergantungan manusia akan komputer semakin meningkat. Komputer semakin dibutuhkan untuk mempermudah pekerjaan. Pengenalan pola tulisan tangan secara otomatis sangat dibutuhkan apabila dokumen-dokumen tersikulasi berada pada jumlah yang besar.
Angka-angka pada kartu pos, cek bank, pajak akan lebih mudah untuk disortir apabila pendataan dapat dilakukan secara otomatis. Beberapa penelitian telah berhasil menghasilkan penerapan dari pengenalan pola angka. Dengan menggunakan Optical Characters Recognition (OCR), Salim Ouchtati menunjukkan pengenalan pola yang sudah mengalami kerusakan pada tampilannya.
Dengan dasar penelitian jurnal di atas, penulis mencoba untuk mengenali pola angka dengan algoritma yang berbeda yakni dengan menggunakan algoritma Hopfield.
Berdasarkan landasan teori, secara umum bentuk struktur jaringan syaraf tiruan Hopfield dapat digambarkan sebagai berikut:
27 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 8. Struktur Jaringan Hopfield
Keterangan:
x 0..N = input y0...N = output w00…ij = bobot
3.2 Aplikasi Algoritma Hopfield
Misalkan dalam sebuah vektor biner tersimpan pola 1, 1, 1, 0 atau ekuivalen dengan bipolar yaitu pola 1, 1, 1, -1 dan dimasukkan ke dalam sebuah network. Misalkan pola yang tersimpan dirusak dan diberi derau ataupun polanya diacak sehingga berubah menjadi 0, 0, 1, 0, oleh karena itu dengan menggunakan algoritma Hopfield dapat diperoleh kembali pola semula yaitu 1, 1, 1, 0. Output dari pola misalkan disimpan dalam bentuk acak yaitu Y1, Y4, Y3, dan Y2. Penyelesaian dari masalah pada halaman sebelumnya adalah sebagai berikut:
Langkah 1: Inisialisasi bobot untuk menyimpan pola, yaitu:
28 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
W=
Langkah 2: Vektor input yang sudah diacak adalah X=(0, 0, 1, 0), dengan X1=0, X4=0, X3=1, dan X2=0. Dari vektor input, akan dimasukkan ke dalam jaringan.
Langkah 3: Tentukan nilai output Y awal yaitu vektor input x yang diacak (0, 0, 1, 0). Langkah a: Pilihlah unit Y1 untuk melakukan perubahan aktivasi.
=0+1 =1 Langkah b: y_in1 > 0 → y1 = 1 Karena nilai y_in1 lebih besar dari 0, maka aktivasi berubah dan menjadikan nilai Y1=1. Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau dalam bentuk vektor (1, 0, 1, 0).
Langkah 4: Langkah a: Pilihlah unit Y4 untuk melakukan perubahan aktivasi.
= 0 + (-2) = -2 Langkah b: y_in4 > 0 → y4 = 0 Karena nilai y_in4 kurang dari 0, maka aktivasi tetap dan menjadikan nilai Y4 tetap bernilai = 0. 29 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau dalam bentuk vektor (1, 0, 1, 0).
Langkah 5: Langkah a: Pilihlah unit Y3 untuk melakukan perubahan aktivasi.
=1+1 =2 Langkah b: y_in3 > 0 → y3 = 1 Karena nilai y_in1 lebih besar dari 0, maka aktivasi berubah dan menjadikan nilai Y3 = 1. Langkah c: Nilai output sementara adalah: Y1=1, Y4=0, Y3=1, dan Y2=0, atau dalam bentuk vektor (1, 0, 1, 0).
Langkah 6: Langkah a: Pilihlah unit Y2 untuk melakukan perubahan aktivasi.
=0+2 =2 Langkah b: y_in2 > 0 → y2 = 1 Karena nilai y_in2 lebih besar dari 0, maka aktivasi berubah dan menjadikan nilai Y1=1. Langkah c: Nilai output terakhir adalah: Y1=1, Y4=0, Y3=1, dan Y2=1, atau dalam bentuk vektor (1, 1, 1, 0).
Langkah 7: Lakukan pengujian sampai output konvergen. Karena iterasi terakhir output sudah menunjukkan kondisi konvergen, maka output tersebut akan dijadikan output jaringan syaraf tiruan. 30 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
3.3. Kondisi Konvergen
Hopfield (1984) melalui penelitiannya membuktikan bahwa jaringan syaraf tiruannya akan konvergen pada nilai batas stabil dengan menggunakan fungsi Lyapunov (fungsi energi). Fungsi energi pada jaringan Hopfield sebagai berikut:
Jika aktivasi jaringan berubah berdasarkan yi, maka energi akan berubah menjadi
Pada saat aktivasi neuron Yi, jika yi positif maka akan berubah menjadi nol. Dengan demikian
untuk yi negatif, maka akan menjadi positif yaitu
Dalam penelitiannya Hopfield menemukan bahwa pola biner yang dapat disimpan dan dipanggil kembali dalam sebuah jaringan, dengan ketepatan yang baik adalah sebesar
dimana n adalah jumlah neuron dalam suatu jaringan.
3.4 Rancangan Tampilan
Perangkat lunak pengenalan pola angka akan ditampilkan dalam halaman situs web dengan menggunakan Java applet. Pilihan menu dari masing-masing perintah akan ditampilkan dengan sistem menu icon. Tombol menu akan disusun sesuai dengan urutan perintah pengenalan pola, antara lain: 31 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
1. Tombol menu Clear Display, digunakan untuk membersihkan bidang gambar dari pola-pola. 2. Tombol menu Randomize, digunakan untuk menggambar pola acak. 3. Tombol menu Memorize, digunakan menyimpan pola yang sudah digambar ke dalam memori komputer. 4. Tombol menu Test, digunakan untuk mencoba membandingkan pola-pola yang sudah tersimpan dengan pola yang baru. 5. Tombol menu Clear Memory, digunakan untuk membersihkan data yang tersimpan dalam memori komputer. 6. Tombol First Pattern, digunakan untuk menampilkan pola pertama yang sudah disimpan terlebih dahulu pada bidang gambar. 7. Tombol Last Pattern, digunakan untuk menampilkan pola yang terakhir disimpan pada bidang gambar.
Gambar 9. Rancangan Tampilan Program Applet Pada Browser
3.5 Rancangan Masukan Dan Keluaran
3.5.1 Rancangan Masukan
Untuk memasukkan data hanya digunakan piranti tetikus, yang digunakan untuk memilih menu yang ada serta menggambar pola pada bidang yang telah disediakan. 32 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Pola dapat digambar pada bidang dengan cara menekan tombol kiri atau kanan sehingga bidang gambar akan berubah warna menandakan sebuah variabel telah terbentuk, dalam hal ini piksel. Pola dapat dihapus dengan cara yang sama seperti cara menggambar pola.
3.5.2 Rancangan Keluaran
Pola yang sudah disimpan dapat ditampilkan kembali dengan tombol menu yang ada pada bagian atas bidang gambar. Pola akan ditampilkan dalam bidang yang sama dengan masukan. Selain pola akan ditampilkan juga grafik garis pada bidang sebelah gambar yang berfungsi untuk melihat perbandingan antar pola yang satu dengan yang lainnya.
3.2 Analisis Kebutuhan Perangkat Keras
Selain dengan Java, untuk mengetahui bagaimana proses pengenalan pola angka juga dapat digunakan perangkat lunak yang dapat mempermudah proses komputasi dalam penelitan bidang jaringan syaraf tiruan, dalam hal ini yang digunakan adalah perangkat lunak Matlab 7.1 release 14, The MathWorks, Inc..
Kecepatan pemrosesan data pada Matlab bergantung pada sistem komputer yang digunakan. Semakin baik spesifikasi komputer yang digunakan, hasil perhitungan akan ditampilkan lebih cepat. Spesifikasi sistem yang digunakan dalam percobaan: 1. Prosesor Intel Pentium D 3 GHz. 2. Memori RAM 4 GB. 3. Harddisk 80 GB. 4. O/S Windows XP Profesional SP3.
33 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
BAB 4
PEMBAHASAN
4.1 Perangkat Lunak
Untuk membangun sebuah perangkat lunak diperlukan pemahaman tentang teknik pemrograman komputer. Sebuah perangkat lunak pada dasarnya terdiri atas sekumpulan perintah-perintah dalam bahasa komputer, yang bertujuan agar sebuah komputer dapat mengerjakan suatu pekerjaan sesuai dengan keinginan pemakainya. Dewasa ini sudah banyak berkembang beragam jenis bahasa pemrograman yang memiliki metode pemrograman yang berbeda-beda. Salah satu bahasa pemrograman yang banyak dipakai dewasa ini adalah bahasa pemrograman Java. Java adalah sebuah bahasa pemrograman yang dikembangkan oleh perusahaan Sun Microsystems. Bahasa pemrograman ini memiliki keunggulan dimana perangkat lunak yang dibuat dapat dijalankan pada hampir semua sistem operasi seperti Windows, UNIX, dan Macintosh. Hal ini dimungkinkan karena hampir semua sistem operasi dewasa ini sudah memiliki penerjemah dan pengolah Java, yang dinamakan Java Virtual Machine (JVM). Bahasa pemrograman Java dapat menghasilkan perangkat lunak yang fleksibel, mulai dari perangkat lunak berukuran kecil yang dapat dijalankan pada sebuah halaman situs web, sampai perangkat lunak berukuran besar yang dapat menjalankan beberapa fungsi sekaligus. Hal ini dimungkinkan karena karakteristik pemrograman Java yang berorientasi objek. Dengan kemampuannya ini Java dapat dijalankan dalam beragam keadaan komputer, terutama yang berhubungan dengan antarmuka yang sifatnya grafis.
34 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
4.2 Struktur Data
Sebuah perangkat lunak yang bertujuan untuk mengenali sebuah pola memerlukan sebuah struktur data, yang nantinya akan menentukan bagaimana data yang berupa sekumpulan piksel disimpan ke dalam memori komputer dan kemudian dipanggil kembali sebagai data pembanding. Data yang dimasukkan nantinya berupa matriks yang diperoleh dari piksel-piksel yang telah terlebih dahulu ditentukan bidang gambarnya. Pola-pola angka yang dibandingkan nantinya akan memiliki bentuk yang berbeda-beda sehingga diperlukan record yang berfungsi untuk menyimpan serangkaian data dalam satu variabel. Untuk pola yang pertama sekali dimasukkan sebagai pembanding perlu diberikan nama yang berbeda dengan pola akhir yang digunakan sebagai penguji sehingga perubahan piksel dapat dibandingkan. Adapun deklarasi applet dalam Java adalah sebagai berikut:
public class HopfieldApp extends Applet { HopMem mem; Pattern current_pattern; Pattern first_pattern; Pattern last_pattern; int xsize; int ysize; Color bgrnd; boolean erase; boolean first; boolean changed; double overlap1[]; double overlap2[]; int overlap; HopCanvas hopCanvas;
Dari type data di atas dapat ditampung data yang berupa piksel dari pola-pola yang dibentuk dari 10x10 node.
35 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
4.3 Pengenalan Pola dengan Matlab
Aplikasi algoritma Hopfield ke dalam applet tidak menampilkan perubahan yang terjadi pada bobot jaringan. Untuk melihat perhitungan bobot dapat digunakan aplikasi Matlab. Dalam penulisan ini penulis menggunakan Matlab versi 7. Adapun pola yang penulis gunakan dalam Matlab sebagai berikut:
Gambar 10. Pola aplikasi algoritma Hopfield untuk mengenali pola pada Matlab
Dalam penelitian pada Matlab, pola dibentuk dari matriks berukuran 10x12 dan jumlah pola yang akan disimpan dalam jaringan sebanyak 8 buah. Setelah pola dipilih selanjutnya adalah mengacaknya sehingga diperoleh bentuk:
Gambar 11. Pola angka 3 yang diacak
36 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Dengan menggunakan perhitungan algoritma Hopfield, diharapkan pola yang telah diacak dapat dikenali sebagai angka 3. Pada percobaan jumlah iterasi yang penulis gunakan dalam menampilkan kondisi pembaruan jaringan adalah 10. Pada kondisi iterasi ke-10, pola angka menjadi:
Gambar 12. Pola angka pada iterasi ke-10
Pola mulai dapat dikenali pada iterasi ke-30 dengan kondisi pola menjadi:
Gambar 13. Pola angka pada iterasi ke-30
37 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Pada iterasi ke-45 pola dikenali sebagai angka 3 dimana kondisi pola menjadi:
Gambar 14. Pola angka pada iterasi ke-45
4.4 Aplikasi Algoritma ke dalam Program Java
Sebuah gambar atau pola merupakan sekumpulan titik-titik yang disusun sehingga menghasilkan suatu bentuk. Pada komputer gambar atau pola disusun oleh sekumpulan titik yang dinamakan piksel. Untuk mengenali pola terlebih dahulu piksel diubah ke dalam bentuk matriks, kemudian disimpan ke dalam komputer.
Gambar 15. Contoh pola angka satu pada bidang gambar yang akan dipelajari komputer
38 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Untuk pola angka satu pada halaman sebelumnya, matriks yang bersesuaian:
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Pola angka 1 (satu) pada halaman sebelumnya akan dipelajari dan disimpan ke dalam komputer. Misalkan ada pola angka 1 yang memiliki bentuk berbeda dengan pola pada halaman sebelumnya langkah-langkah pengenalannya dapat dilihat sebagai berikut. Misal gambar pola angka 1 yang baru:
Gambar 16. Pola angka 1 yang akan dikenali komputer
39 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
4.3.1. Algoritma Pengenalan Pola pada Komputer
Untuk mengenali pola angka yang dimasukkan ke dalam program, komputer akan menjalankan langkah-langkah berikut: Langkah 1: Ubah piksel menjadi bentuk bipolar dengan perintah: int i = parent.xsize; int j = parent.ysize; int k = mouseevent.getX(); int l = mouseevent.getY(); Pattern pattern = parent.current_pattern;
Penekanan tetikus akan memanggil perintah yang berfungsi sebagai deteksi apakah pada bidang telah terjadi suatu input. Jika komputer mendeteksi penekanan, maka piksel dengan warna merah akan ditampilkan sekaligus memberikannya nilai. Dari pola angka Gambar 10 diperoleh vektor bipolar: -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 1,1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
Langkah 2: Setelah konversi piksel, jika ada perintah untuk menyimpan pola maka komputer akan mulai menjalankan algoritma Hopfield, dimulai dari inisialisasi bobot. Untuk memperoleh matriks bobot dari Gambar 10, matriks kontribusi dikalikan dengan transposenya sehingga diperoleh matriks:
40 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 1 1 1 1 1 1 1 -1 -1 -1 1 1 1 1 1 1 -1 1 -1 -1 1 1 -1 1 1 -1 -1-1 -1 -1 -1 -1 -1 1 1 -1 -1 -1-1 -1 -1 -1 -1 1 1 1 1 1 -1 -1 1 1 -1 1 1 1 1 1 -1 -1 1 1 1 1 1 1 1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1
Perintah yang digunakan untuk menghitung bobot sebagai berikut:
weights[i][j] = weights[i][j] + pattern.pattern[i] * pattern.pattern[j];
Selanjutnya nilai diagonal akan diubah menjadi 0 sehingga diperoleh matriks bobotnya:
0 1 1 1 1 1 1 1 1 1 1 0 1 1 -1 -1 1 1 1 1 1 1 0 -1 -1 -1 1 1 1 1 1 1 -1 0 -1 -1 1 1 -1 1 1 -1 -1-1 0 -1 -1 -1 -1 1 1 -1 -1 -1-1 0 -1 -1 -1 1 1 1 1 1 -1 -1 0 1 -1 1 1 1 1 1 -1 -1 1 0 1 1 1 1 1 -1 -1 -1 -1 1 0 1 1 1 1 1 1 1 1 1 1 0
Langkah 3: Matriks bobot di atas kemudian disimpan ke dalam komputer sebagai pola awal angka. 41 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Langkah 4: Proses pengenalan pola akan dimulai ketika pola angka yang baru dimasukkan. Komputer kemudian menghitung bobot pola baru, menghitung aktivasi, dan melakukan perhitungan hingga terjadi konvergen. Input pola baru sebagai berikut:
0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0
Langkah 5: Pada langkah ini komputer akan melakukan iterasi hingga tercapai kondisi stabil dari jaringan. Pada penelitian iterasi yang dilakukan adalah sampai 10.
Langkah 6: Setelah tercapai kondisi stabil pada jaringan, komputer kemudian akan memanggil pola awal untuk ditampilkan beserta hasil iterasi pada bidang program.
4.4 Implementasi dalam Program Java dengan Applet
Berikut ditampilkan pola angka yang akan dikenali dengan algoritma Hopfield, mulai dari angka 0 sampai 9.
42 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 17. Pola angka 0.
Gambar 18. Pola angka 1
Gambar 19. Pola angka 2 .
43 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 20. Pola angka 3.
Gambar 21. Pola angka 4.
Gambar 22. Pola angka 5.
44 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 23. Pola angka 6.
Gambar 24. Pola angka 7.
Gambar 25. Pola angka 8.
45 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 26. Pola angka 9.
Setelah pola angka disimpan perlu diadakan pengecekan oleh program apakah pola-pola tersebut dapat dibedakan antar satu dengan lainnya. Selain itu penulis juga akan melakukan perbandingan antar pola yang memiliki bentuk yang hampir sama atau perbandingan dengan bentuk yang telah diacak. Hal ini perlu dilakukan karena pola angka bisa saja memiliki nilai yang sama namun berbeda dalam penampilan bentuknya. Gambar pada halaman berikut menunjukkan pola yang mengalami pengacakan mendekati pola angka 2 dan angka 7.
Gambar 27. Pola angka yang telah diacak.
Dari hasil percobaan pada halaman sebelumnya program mengenali pola tersebut sebagai angka 2. Dapat dilihat dari grafik garis berwarna merah, yakni angka 2 sebagai pola pertama. 46 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 28. Pola yang telah dikenali oleh program.
Selanjutnya yang memiliki bentuk hampir sama adalah 0 dan 8. Angka 0 yang diacak memiliki kemungkinan menjadi angka 8 apabila pada bagian tengahnya terdapat tambahan piksel. Pola berikut akan dicoba apakah program akan mengenalinya sebagai pola angka 0 atau 8.
Gambar 29. Pola angka 0 yang diacak mendekati bentuk angka 8.
Dari hasil percobaan, program lebih mengenal pola sebagai angka 8. Dari gambar berikut dapat dilihat dari hasil grafik garis warna biru sebagai pola terakhir yakni angka 8.
47 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 30. Pola yang dikenali sebagai angka 8.
Berikutnya akan dicoba pengenalan pola dengan cara mengacak pola angka satu sehingga diperoleh bentuk sebagai berikut:
Gambar 31. Pola angka 1 yang telah diacak.
Setelah dijalankan program masih bisa mengenali bahwa pola yang diacak di atas merupakan pola angka 1. Dapat dilihat dari grafik garis warna biru yang mendekati aktifasi 1.
48 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Gambar 32. Pola angka acak yang dikenali sebagai angka 1.
49 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
BAB 5
KESIMPULAN DAN SARAN
5.1 Kesimpulan
Adapun kesimpulan yang didapat dari algoritma Hopfield antara lain: 1. Setelah beberapa percobaan pengenalan pola dengan jaringan Hopfield, menunjukkan pola dapat dikenali pada iterasi ke-45 dengan tingkat probabilitas 0,3. 2. Dari hasil percobaan, algoritma Hopfield dapat digunakan untuk mengenali pola-pola angka namun keakuratan dalam mengenali pola akan berkurang seiring bertambahnya jumlah pola angka dan tingkat kerusakan dari pola angka tersebut. 3. Kesalahan pengenalan pola angka mungkin terjadi pada pola angka yang hampir mirip, seperti pada angka 1 dan 7, 8 dan 0, 5 dan 6.
5.2 Saran
Sebagai saran untuk mengenali pola angka secara lebih baik: 1. Sistem dapat dikembangkan menjadi lebih kompleks sehingga pola yang akan ditampilkan dan dikenali bisa lebih terperinci. 2. Pengembangan sistem juga dapat menggunakan media optik sehingga pola tidak hanya diinput dengan tetikus tetapi juga dapat melalui media foto.
50 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
DAFTAR PUSTAKA
Desiani, Anita dan Muhammad Arhami. 2005. Konsep Kecerdasan Buatan. Edisi ke-1. Yogyakarta: Penerbit ANDI.
Fausett, L. 1994. Fundamentals of Neural Networks: Architectures, Algorithms, and Applications. Englewood Cliffs, New Jersey: Prentice-Hall, Inc. Hermawan, Arief, 2006, “Jaringan Syaraf Tiruan Teori dan Aplikasi”, Yogyakarta: Penerbit ANDI. Hopfield, J. J. 1982. “Neural networks and physical systems with emergent collective computational abilities”. Proceedings of the National Academy of Sciences: 79: 2554-2558 . Hopfield, J. J. 1984. “Neurons with graded response have collective computational properties like those of two-state neurons”. Proceedings of the National Academy of Sciences: 81: 3088-3092 . Imada, A. dan Araki, K. “Hopfield model of associative memory as a test function of evolutionary computations”. Kristanto, Andri, 2004, “Jaringan Saraf Tiruan (Konsep Dasar, Algoritma dan Aplikasinya )”, Yogyakarta: Gava Media.
Kusumadewi, Sri. 2003. Artificial Intelligence (Teknik dan Aplikasinya). Edisi ke-1. Yogyakarta: Graha Ilmu.
Morris, Dan. http://techhouse.brown.edu/dmorris/JOHN/StinterNet.html. Diakses tanggal 13 April, 2006.
51 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Ouchtati, S., Redjimi, M., Bedda, M. dan Bouchareb, F. “A new offline system for handwritten digits recognition”. Asian Journal of Information Technology: 620-626, 2006. Puspitaningrum, Diyah, 2006, “Pengantar Jaringan Syaraf Tiruan”, Yogyakarta: Penerbit ANDI. Seung, Sebastian. 2002. “The Hopfield model”. Siang, Jong Jek, 2002, “Matematika Diskrit dan Aplikasinya pada Ilmu Komputer” , Penerbit ANDI Yogyakarta. Siang,
Jong
Jek,
2005,
“Jaringan
Syaraf
Tiruan
&
Pemrogramannya
Menggunakan Matlab”, Penerbit ANDI Yogyakarta. Sulehria, H. K. dan Ye Zhang. 2007. “Hopfield neural network–a survey”. Proceedingsof the 6th WSEAS Int. Conf. on Artificial Intelligenc: hal. 125-130. Greece.
AI-Junkie. www.ai-junkie.com. Diakses tanggal 20 Januari, 2007.
Citeseer. http://citeseerx.ist.psu.edu. Diakses tanggal 10 Desember 2007.
Find Articles. www.findarticles.com. Diakses tanggal 13 April, 2006.
Heaton Research. www.heatonresearch.com. Diakses tanggal 15 Mei, 2007.
Neural Networks. www.doc.ic.ac.uk. Diakses tanggal 5 Agustus, 2007.
Wikipedia. www.wikipedia.com. Diakses tanggal 13 April, 2006.
52 Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
LAMPIRAN Tabel perubahan bobot jaringan W11 sampai W120,120 :
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
listing dari HopCanvas.class: import java.awt.*; import java.awt.event.*; class HopCanvas extends Canvas implements MouseListener, MouseMotionListener { HopfieldApp parent; public HopCanvas(HopfieldApp hopfieldapp) { parent = hopfieldapp; setSize(680, 200); addMouseListener(this); addMouseMotionListener(this); } public void mouseClicked(MouseEvent mouseevent) { int i = parent.xsize; int j = parent.ysize; int k = mouseevent.getX(); int l = mouseevent.getY(); Pattern pattern = parent.current_pattern; int i1 = k / pattern.blocksize + (l / pattern.blocksize) * (i / pattern.blocksize); if(k < i && l < j) { pattern.toggle(i1); Graphics g = getGraphics(); if(pattern.pattern[i1] > 0) { parent.erase = false; g.setColor(Color.red); } else { parent.erase = true; g.setColor(Color.blue); } g.fillRect((k - k % pattern.blocksize) + 1, (l - l % pattern.blocksize) + 1, pattern.blocksize - 2, pattern.blocksize - 2); parent.changed = true; } } public void mouseDragged(MouseEvent mouseevent) { int i = parent.xsize; int j = parent.ysize;
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
int k = mouseevent.getX(); int l = mouseevent.getY(); Pattern pattern = parent.current_pattern; boolean flag = parent.erase; int i1 = k / pattern.blocksize + (l / pattern.blocksize) * (i / pattern.blocksize); if(k < i && l < j) { Graphics g = getGraphics(); if(flag) { if(pattern.pattern[i1] > 0) { pattern.toggle(i1); } g.setColor(Color.blue); } else { if(pattern.pattern[i1] < 0) { pattern.toggle(i1); } g.setColor(Color.red); } g.fillRect((k - k % pattern.blocksize) + 1, (l - l % pattern.blocksize) + 1, pattern.blocksize - 2, pattern.blocksize - 2); parent.changed = true; } } public void mouseEntered(MouseEvent mouseevent) { } public void mouseExited(MouseEvent mouseevent) { } public void mouseMoved(MouseEvent mouseevent) { } public void mousePressed(MouseEvent mouseevent) { } public void mouseReleased(MouseEvent mouseevent) { }
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
public void paint(Graphics g) { paintRectangles(); paintGraph(); } public void paintGraph() { Graphics g = getGraphics(); Pattern pattern = parent.current_pattern; int l = parent.xsize; int i1 = parent.ysize; double ad[] = parent.overlap1; double ad1[] = parent.overlap2; int j1 = parent.overlap; setBackground(Color.white); g.setColor(Color.black); g.drawRect(0, 0, l - 1, i1 - 1); g.drawLine(l + 20, 10, l + 20, i1 - 20); g.drawLine(l + 20, 10, l + 15, 20); g.drawLine(l + 20, 10, l + 25, 20); g.drawLine(l + 18, i1 - 100, l + 380, i1 - 100); g.drawLine(l + 380, i1 - 100, l + 370, i1 - 105); g.drawLine(l + 380, i1 - 100, l + 370, i1 - 95); g.drawString("Iteration", l + 340, i1 - 108); g.drawString("Overlap", l + 28, 20); g.drawString("0", l + 9, i1 - 96); g.drawString("First Pattern", l + 322, 20); g.drawString("Last Pattern", l + 322, 40); g.drawString("1", l + 9, i1 - 166); g.drawString("1", l + 9, i1 - 26); g.drawLine(l + 18, i1 - 30, l + 22, i1 - 30); g.drawLine(l + 18, i1 - 170, l + 22, i1 - 170); for(int i = 1; i < 10; i++) { g.drawLine(l + 20 + i * 34, i1 - 98, l + 20 + i * 34, i1 - 102); } g.setColor(Color.red); g.drawLine(l + 300, 16, l + 320, 16); if(j1 == 1) { g.drawRect(l + 21, i1 - 100 - (int)(ad[0] * 70D), 1, 1); } else { for(int j = 0; j < j1 - 1; j++) { g.drawLine(l + 21 + j * 34, i1 - 100 - (int)(ad[j] * 70D), l + 21 + (j + 1) * 34, i1 - 100 - (int)(ad[j + 1] * 70D));
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
} } g.setColor(Color.blue); g.drawLine(l + 300, 36, l + 320, 36); if(j1 == 1) { g.drawRect(l + 21, i1 - 100 - (int)(ad1[0] * 70D), 1, 1); } else { for(int k = 0; k < j1 - 1; k++) { g.drawLine(l + 21 + k * 34, i1 - 100 - (int)(ad1[k] * 70D), l + 21 + (k + 1) * 34, i1 - 100 - (int)(ad1[k + 1] * 70D)); } } } public void paintRectangles() { Graphics g = getGraphics(); Pattern pattern = parent.current_pattern; int i = parent.xsize; int j = parent.ysize; setBackground(Color.white); for(int k = 0; k < parent.current_pattern.length; k++) { int i1 = (k / (i / pattern.blocksize)) * pattern.blocksize; int l = (k % (i / pattern.blocksize)) * pattern.blocksize; if(pattern.pattern[k] > 0) { g.setColor(Color.red); } else { g.setColor(Color.blue); } g.fillRect(l + 1, i1 + 1, pattern.blocksize - 2, pattern.blocksize - 2); } } } listing dari HopfieldApp.class: import java.applet.Applet; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
public class HopfieldApp extends Applet { HopMem mem; Pattern current_pattern; Pattern first_pattern; Pattern last_pattern; int xsize; int ysize; Color bgrnd; boolean erase; boolean first; boolean changed; double overlap1[]; double overlap2[]; int overlap; HopCanvas hopCanvas; public HopfieldApp() { bgrnd = Color.lightGray; erase = false; first = true; changed = false; } public void init() { current_pattern = new Pattern(); mem = new HopMem(); String s = getParameter("wid"); String s1 = getParameter("ht"); String s2 = getParameter("size"); if(s != null && s1 != null) { xsize = Integer.parseInt(s); ysize = Integer.parseInt(s1); } else { xsize = 200; ysize = 200; } if(s2 != null) { current_pattern.blocksize = Integer.parseInt(s2); } current_pattern.init(xsize, ysize); mem.init(current_pattern); mem.happ = this;
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
overlap1 = new double[10]; overlap2 = new double[10]; for(int i = 0; i < 10; i++) { overlap1[i] = 0.0D; overlap2[i] = 0.0D; } overlap = 0; first_pattern = current_pattern.clone_it(); last_pattern = current_pattern.clone_it(); hopCanvas = new HopCanvas(this); Panel panel = new Panel(); panel.setLayout(new FlowLayout()); Button button = new Button("Clear Display"); ActionListener actionlistener = new ActionListener() { public void actionPerformed(ActionEvent actionevent) { current_pattern.init(); changed = true; hopCanvas.paintRectangles(); } }; button.addActionListener(actionlistener); Button button1 = new Button("Randomize"); ActionListener actionlistener1 = new ActionListener() { public void actionPerformed(ActionEvent actionevent) { current_pattern.randomize(); changed = true; hopCanvas.paintRectangles(); } }; button1.addActionListener(actionlistener1); Button button2 = new Button("Memorize"); ActionListener actionlistener2 = new ActionListener() { public void actionPerformed(ActionEvent actionevent) { mem.impose(current_pattern); changed = true; if(first) { first_pattern = current_pattern.clone_it(); first = false;
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
} last_pattern = current_pattern.clone_it(); } }; button2.addActionListener(actionlistener2); Button button3 = new Button("Test"); ActionListener actionlistener3 = new ActionListener() { public void actionPerformed(ActionEvent actionevent) { current_pattern = mem.iterate(current_pattern); } }; button3.addActionListener(actionlistener3); Button button4 = new Button("Clear Memory"); ActionListener actionlistener4 = new ActionListener() { public void actionPerformed(ActionEvent actionevent) { mem.init(current_pattern); first_pattern = current_pattern.clone_it(); last_pattern = current_pattern.clone_it(); changed = true; } }; button4.addActionListener(actionlistener4); Button button5 = new Button("First Pattern"); ActionListener actionlistener5 = new ActionListener() { public void actionPerformed(ActionEvent actionevent) { current_pattern = first_pattern.clone_it(); hopCanvas.paintRectangles(); } }; button5.addActionListener(actionlistener5); Button button6 = new Button("Last Pattern"); ActionListener actionlistener6 = new ActionListener() { public void actionPerformed(ActionEvent actionevent) { current_pattern = last_pattern.clone_it(); hopCanvas.paintRectangles(); }
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
}; button6.addActionListener(actionlistener6); panel.add(button); panel.add(button1); panel.add(button2); panel.add(button3); panel.add(button4); panel.add(button5); panel.add(button6); add("Top", panel); add("Center", hopCanvas); } } listing dari HopMem.class import java.awt.Component; import java.io.PrintStream; class HopMem { boolean settling; int size; int weights[][]; HopfieldApp happ; HopMem() { } public void debug(Pattern pattern) { for(int i = 0; i < pattern.length; i++) { System.out.println(i + ": " + pattern.pattern[i]); } System.out.println("Weights: "); for(int j = 0; j < pattern.length; j++) { for(int k = 0; k < pattern.length; k++) { System.out.print(j + "," + k + ": " + weights[j][k] + "\t"); } System.out.println(""); } }
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
public int ham(Pattern pattern, Pattern pattern1) { int j = 0; for(int i = 0; i < pattern.length; i++) { if(pattern.pattern[i] * pattern1.pattern[i] <= 0) { j++; } } return j; } public void impose(Pattern pattern) { for(int i = 0; i < pattern.length; i++) { for(int j = 0; j < pattern.length; j++) { if(i != j) { weights[i][j] = weights[i][j] + pattern.pattern[i] * pattern.pattern[j]; } } } } public void init(Pattern pattern) { settling = false; size = pattern.length; weights = new int[pattern.length][pattern.length]; } public Pattern iterate(Pattern pattern) { if(happ.changed) { happ.changed = false; happ.overlap1[0] = 0.0D; happ.overlap2[0] = 0.0D; for(int i = 0; i < pattern.length; i++) { happ.overlap1[0] += happ.first_pattern.pattern[i] * pattern.pattern[i]; happ.overlap2[0] += happ.last_pattern.pattern[i] * pattern.pattern[i];
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
} happ.overlap1[0] /= pattern.length; happ.overlap2[0] /= pattern.length; happ.overlap = 1; } Pattern pattern1 = new Pattern(); pattern1.init(pattern); for(int j = 0; j < pattern1.length; j++) { for(int l = 0; l < pattern1.length; l++) { pattern1.pattern[j] = pattern1.pattern[j] + pattern.pattern[l] * weights[j][l]; } } pattern1 = pattern1.normalize(); happ.overlap1[happ.overlap] = 0.0D; happ.overlap2[happ.overlap] = 0.0D; for(int k = 0; k < pattern1.length; k++) { happ.overlap1[happ.overlap] += happ.first_pattern.pattern[k] * pattern1.pattern[k]; happ.overlap2[happ.overlap] += happ.last_pattern.pattern[k] * pattern1.pattern[k]; } happ.overlap1[happ.overlap] /= pattern1.length; happ.overlap2[happ.overlap] /= pattern1.length; happ.overlap++; if(happ.overlap == 10) { happ.overlap = 0; } happ.current_pattern = pattern1; happ.hopCanvas.repaint(); return pattern1; } } listing dari Pattern.class class Pattern { int length; int blocksize; int xsize; int ysize; int pattern[];
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
Pattern() { } public Pattern clone_it() { Pattern pattern1 = new Pattern(); pattern1.pattern = new int[length]; for(int i = 0; i < length; i++) { pattern1.pattern[i] = pattern[i]; } pattern1.length = length; pattern1.blocksize = blocksize; pattern1.xsize = xsize; pattern1.ysize = ysize; return pattern1; } public void init() { for(int i = 0; i < length; i++) { pattern[i] = -1; } } public void init(int i, int j) { xsize = i / blocksize; ysize = j / blocksize; length = (i / blocksize) * (j / blocksize); pattern = new int[length]; init(); } public void init(Pattern pattern1) { length = pattern1.length; blocksize = pattern1.blocksize; pattern = new int[length]; init(); } public Pattern normalize() {
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009
for(int i = 0; i < length; i++) { if(pattern[i] != 0) { pattern[i] = pattern[i] / Math.abs(pattern[i]); } } return this; } public void randomize() { for(int i = 0; i < length; i++) { pattern[i] = (int)(2L * Math.round(Math.random()) - 1L); } } public void toggle(int i) { if(i < length) { pattern[i] = pattern[i] * -1; } } }
Zulkarnain Harun : Pengenalan Pola Angka Dengan Menggunakan Algoritma Hopfield, 2008. USU Repository © 2009