Pengenalan Pola Citra Tulisan Tangan Huruf A, B, dan C dengan Back-Propagation Neural Network

Salah satu “Hello World” yang baik dalam pengenalan pola dengan machine learning adalah pengenalan tulisan tangan, khususnya huruf alfabet. Dalam paper ini, akan dibahas tentang pengenalan huruf menggunakan Back-Propagation Neural Network. Akan dijelaskan juga tentang bagaimana data citra huruf dinormalisasi, arsitektur jaringannya dan beberapa parameter yang digunakan. Dari hasil pengujian, didapati bahwa metode ini rata-rata 99.14% dapat mengenali huruf A, B dan C. Serta dengan nilai kekeliruan sebesar 0.0015333%.

Pendahuluan

Huruf A, B, dan C merupakan 3 huruf pertama dalam 26 deretan alfabet latin yang setiap hari kita jumpai. Dalam kehidupan sehari-hari kita menemui huruf tersebut dalam berbagai bentuk dan kualitas. Kualitas huruf ditentukan oleh jenis tipografi yang digunakan. Ukuran spasi antar huruf, tebal-tipis garis, dan kemiringan huruf bervariasi berdasarkan jenis tipografinya. Ada banyak penggolongan dari tipografi, seperti misalnya sans, sans-serif, script, atau cursive. Beberapa huruf yang kita jumpai memiliki bentuk yang konsisten seperti pada sans atau sans-serif. Namun, ada pula yang ukurannya tidak konsisten seperti tulisan tangan / cursive.

Tulisan tangan huruf A misalnya, yang ditulis dengan tangan kita sendiri setidaknya selalu sedikit berbeda antara satu sama lain. Namun, otak kita juga selalu dengan mudah mengenali huruf tersebut. Ketika huruf tersebut ditulis pada ukuran sekecil 25 x 25 piksel, huruf tersebut juga masih dengan mudah dikenali oleh otak kita. Padahal jika dilihat lebih teliti, nilai spesifik pada tiap pikselnya berbeda, antara satu huruf dengan huruf lainnya.

Otak manusia tidak secara otomatis bisa mengenali huruf tersebut. Manusia di abad ke-6 misalnya, tentu belum bisa mengenali huruf alfabet latin. Karena mungkin menggunakan sistem huruf yang lainnya. Jika kita ingat kembali, bagaimana kita bisa mengenali huruf tersebut, dikarenakan sewaktu kecil kita memang dikenalkan oleh orang tua atau guru kita.

Manusia dikenalkan polanya, mengenali pola tentu butuh waktu. Seperti huruf C adalah garis melengkung, huruf A adalah gabungan dari 3 garis dan berbentuk lancip diatasnya. Tidak jarang dalam proses belajar juga pasti manusia pernah salah menebak huruf C dengan huruf G, atau b dengan d misalnya. Namun dengan waktu yang cukup dan pengalaman yang cukup, manusia tentu dengan cepat dan yakin bisa mengenali huruf-huruf tersebut.

Proses pembelajaran inilah yang menjadi inspirasi bagaimana algoritma dari machine learning bekerja. Algoritma adalah serangkaian proses yang dijalankan. Bagaimana algoritma manusia mengenali pola tersebut dapat diwakili dengan salah satu metode yaitu Back-Propagation Neural Network. Tentu jika tanpa dilakukan pengenalan pola, menulis program untuk membedakan citra huruf A, B dan C sangatlah sulit. Karena tidak terbayang berapa kali kita harus menulis blok if-elseif-else pada program secara manual. Disinilah kita akan belajar pentingnya machine learning, manfaatnya untuk hari ini dan kedepan melalui pengenalan sederhana, yaitu citra huruf A, B dan C saja. Tentang bagaimana metode yang digunakan dan penjelasan mengenai apa saja metode tersebut akan dijelaskan pada bab-bab selanjutnya.

Dasar Teori

Pada bab kedua ini akan dibahas umumnya mengenai Artificial Neural Network yaitu tentang Perceptron, dan Back-Propagation Neural Network. Neural network dalam machine learning adalah sebuah model yang terinspirasi bagaimana otak manusia bekerja. Sama halnya seperti Pesawat yang merupakan model yang terinspirasi dari burung. Sama-sama memiliki badan, sayap dan ekor, namun bagaimana cara pesawat bekerja tidak sama persis dengan burung. Begitu juga dengan Neural network.

Perceptron

Seperti namanya, Neural Network adalah jaringan antar neuron. Satu bagian kecil dari neural network yaitu neuron, disebut dengan Perceptron. Perceptron sama dengan neuron secara biologis, yaitu memiliki beberapa komponen seperti akson, dendrit, dan sel bodi. Namun komponen tersebut dapat dimodelkan secara matematis seperti pada gambar perceptron.

$${x_n}{w_n}$$

Perceptron menerima nilai masukan dan mengeluarkan nilai keluaran dengan akson. Karena jika perceptron tersebut memiliki banyak layer, nilai masukan adalah nilai keluaran dari perceptron di layer sebelumnya. Nilai masukan dari perceptron adalah $x_0$ sampai $x_n$ . Terdapat bobot pada penghubung antara akson dan dendrit yaitu sinapsis dengan $w_0$ sampai $w_n$. Tiap nilai $x$ dan $w$ dikalikan seperti pada rumus pertama, menghasilkan nilai pada dendrit.

$$\sum_{n} {x_n}{w_n} + b$$

Pada sel bodi, dilakukan penjumlahan keseluruhannya atau disebut juga dengan weighted sum lalu ditambah dengan nilai bias seperti pada rumus kedua. Bias ditambahkan untuk mencegah nilainya tidak nol. Untuk Nilai keluaran pada sel bodi, digunakan fungsi aktivasi. Fungsi aktivasi berfungsi untuk menentukan apakah neuron tersebut harus aktif atau tidak berdasarkan dari weighted sum. Terdapat banyak fungsi aktivasi baik yang linear maupun non linear. Salah satu contoh fungsi non-linear yang digunakan pada paper ini adalah Sigmoid. Bentuk rumus fungsi sigmoid dapat dilihat pada rumus ketiga.

$$f(x) = \dfrac{1}{1 + e^{-x}}$$

Fungsi sigmoid, logsig atau $\sigma$ mempunyai rentang nilai keluaran antara 0 sampai 1. Jika menggunakan fungsi aktivasi lainnya, nilainya tidak 0 sampai 1 saja. Ada yang 0 sampai tidak terhingga untuk ReLu, ada -1 hingga 1 untuk tanh dan berbagai macam lainnya. Jadi jika dirangkum, untuk menentukan nilai keluaran dari satu perceptron saja, dapat menggunakan rumus keempat.

$$\sigma(\sum_{n} {x_n}{w_n} + b)$$

Namun bagaimana jika kita membutuhkan nilai keluaran yang lebih dari satu? karena jika kita lihat pada rumus keempat, hasil nilai keluarannya hanya satu. Untuk itu dirangkailah perceptron ini menjadi suatu jaringan yang bernama multilayer perceptron. Multilayer perceptron ini, bisa memiliki beragam arsitektur jaringan. Seperti misalnya 625 layer input, 16 hidden layer dan 3 buah neuron pada layer bagian akhir. Sehingga pada multilayer perceptron ini bisa memiliki nilai keluaran berupa 3 angka. Multilayer perceptron dapat digunakan untuk mengklasifikasikan lebih dari 2 obyek.

Multilayer perceptron adalah tipe neural network yang feed-forward atau forward pass dimana koneksi antar node tidak membentuk sebuah siklus. Proses ini akan mengalirkan data nilai masukan melewati tiap neuron, pada hidden layer sampai kepada output layer lalu dihitung errornya. Berbeda dengan {backward pass} yang akan dilanjutkan pada subseksi selanjutnya.

Sebuah Perceptron dan model matematisnya

Jika disederhanakan lagi, pada aplikasi nyata rumus keempat, dapat dilakukan perkalian dot produk antara matriks nilai masukan dan matriks beban sehingga menghindari looping berkali-kali. Matriks memiliki kolom dan baris. Pada matriks nilai masukan, banyaknya kolom adalah banyaknya nilai input dan baris adalah banyaknya data. Pada matriks beban, banyaknya baris menentukan berapa buah neuron yang digunakan setelah input, dan banyaknya kolom adalah banyaknya nilai input.

Back-Propagation Neural Network

Back-Propagation Neural Network sebenarnya adalah multilayer perceptron (jika dilihat secara arsitektur jaringan), namun memanfaatkan forward pass dan juga backward pass. Pada backward pass, nilai kesalahan yang dapat didapat dari forward pass akan digunakan kembali untuk mengubah setiap bobot di tiap-tiap neuron. Kegiatan mengubah-ubah nilai bobot ini disebut dengan training. Training bertujuan untuk mendapatkan nilai bobot yang optimal untuk mengklasifikasikan sesuatu berdasarkan input dan bentuk jaringannya. Secara umum dapat digambarkan pada gambar backpro.

Bagan Back-Propagation Neural Network

Pada gambar backpro, bagian nilai masukan, neural network dan prediksi nilai keluaran sudah dijelaskan pada subseksi sebelumnya. Pada Bagian ini akan dijelaskan pada bagian Loss/Error dan Weight Update. Terdapat banyak cara untuk menghitung nilai kesalahan (error), ada yang menggunakan Root Mean Square Error, ada yang menggunakan Mean Average Error ataupun L2 Loss seperti pada rumus keenam.

$$Loss = \dfrac{{(Prediction - Target)}^{2}}{2}$$

Untuk menentukan tiap bobot dapat dikurangi ataupun ditambah dengan nilai tertentu, secara umum cara menentukannya menggunakan gradient descent. Gradient adalah nama lain dari turunan namun untuk fungsi yang memiliki banyak variabel seperti $x_0 x_1 x_2 … x_n$. Ketika sebuah turunan dari fungsi bernilai 0 atau ${f}^{‘}(x) = 0$ berarti nilai $x$ tersebut sudah sampai pada nilai minimum atau maksimum (puncak/lembah). Pada ketika training, ketika nilai tersebut sudah tidak berubah berarti turunan nilai errornya sudah mendekati 0. Pada back-propagation neural network digunakan metode chain rule untuk menghitung nilai selisih untuk memperbarui bobot.

$$\dfrac{Loss}{w} = \dfrac{Loss}{o out} \times \dfrac{o out}{o in} \times \dfrac{o in}{w}$$

Dalam mengperbarui parameter bobot terdapat 2 metode, yaitu Stochastic Gradient Descent / SGD dan Batch Gradient Descent / BGD. Pada SGD, memperbarui bobot dilakukan tiap 1 kali forward pass. Sedangkan pada BGD, memperbarui bobot dilakukan ketika semua data sudah dimasukkan. Untuk memperbarui bobot digunakan rumus ke tujuh.

$$weight = weight + (learningRate \times chainRule)$$

Back-Propagation Neural Network ini sebenarnya adalah mencari nilai $w_0$ sampai $w_n$ untuk menyelesaikan masalah yang spesifik. Jadi apapun metodenya baik menggunakan Loss Function, Cross Entropy, SGD, BGD, menggunakan banyak layer, menggunakan fungsi aktivasi yang berbeda-beda antara Sigmoid-ReLu-TanH-SoftMax tujuannya adalah mencari nilai $w_0$ sampai $w_n$ seefisien mungkin. Atau lebih spesifik lagi, mencari fungsi $f(x)$ yang jika diberi nilai masukan yang seperti dataset, hasil nilai keluarannya sesuai dengan yang diharapkan.

Metodologi

Pada bagian metodologi akan dibahas mengenai metode yang digunakan pada paper ini termasuk, Normalisasi data dari citra huruf, arsitektur jaringan sampai parameter-parameter yang digunakan.

Normalisasi Data

Data sebagai nilai masukan yang digunakan untuk paper ini adalah citra tulisan tangan saya berupa huruf A, B, C. Citra 2 dimensi tersebut berukuran 25 piksel kali 25 piksel seperti pada gambar data. Tentu saja neural network tidak bisa langsung membaca citra 2 dimensi sebagai nilai masukan. Oleh karena itu harus dilakukan normalisasi data. Tujuan dilakukan normalisasi data agar, data tersebut dapat langsung dimasukkan ke neural network. Dalam hal ini tujuannya menjadikan citra 2 dimensi menjadi 1 baris array saja.

Salah satu contoh dataset

Jika dilihat pada citra original dari data tersebut, pada tiap piksel diwakili oleh 3 nilai yang mewakili nilai RGB berentang 0 sampai 255. Oleh karena itu diubah menjadi black and white sehingga nilai pada tiap pikselnya adalah 0 atau 1 saja. Selanjutnya dilakukan invert untuk membalikkan nilai 0 menjadi 1. Agar bagian yang berwarna hitam menjadi putih. Sehingga garis hurufnya menjadi bernilai 1 sedangkan lainnya menjadi 0. Matriks 2 dimensi tersebut selanjutnya dibuat 1 baris saja.

Selanjutnya adalah pemberian label. Huruf A diwakili dengan array 1, 0, 0. Huruf B dengan array 0, 1, 0. Serta huruf C dengan array 0, 0, 1. Tiap data tersebut dijadikan object dengan format JSON agar data lebih mudah dibaca. Proses ini digambarkan pada gambar flowchart.

Flowchart normalisasi data

Arsitektur Jaringan

Arsitektur jaringan yang digunakan berupa 3 layer yaitu input layer, hidden layer dan output layer dengan layer pertama berjumlah 625, layer kedua berjumlah 16 saja. Pada layer terakhir berjumlah 3 karena label yang digunakan berjumlah 3 untuk mengenali huruf A, B, C. Bentuk jaringan ini dapat digambarkan pada gambar architecture.

Arsitektur yang digunakan

Parameter

Beberapa parameter digunakan pada paper ini antara lain jumlah epoch 30.000, learning rate yaitu 0,0013 , target error yaitu 0,0013 jadi ketika nilai error sudah lebih kecil dari target error, iterasi diberhentikan. Untuk bobot pertama dan kedua menggunakan nilai acak antara -1 sampai 1.

Hasil Percobaan

Pada bagian ini akan diberikan hasil percobaan dari metode dan data yang dijelaskan pada bab sebelumnya. Untuk training, rata-rata berhenti pada epoch ke 1900 - 2000. Dengan rata-rata error yaitu 0.00153 pada 30 kali percobaan. Sedangkan untuk prediksi huruf A, B dan C pada masing-masing 10 kali hasil percobaan dijelaskan pada tabel berikut.

Huruf AHuruf BHuruf C
99,79%98,5%99,14

Pekerjaan Selanjutnya

Jika model telah dilakukan training dan dapat melakukan prediksi dengan baik dan error yang kecil, maka pekerjaan kedepan adalah mencoba memperbanyak dataset tidak hanya A,B,C namun sampai Z. Tidak lupa juga menerapkannya di aplikasi nyata. Hal ini dapat diraih dengan melakukan menyimpan nilai masing-masing bobot dan menyimpan bentuk arsitektur jaringannya. Lalu dibuatkan sebuah web service untuk menyediakan API dengan nilai keluaran dari forward pass. Sehingga API tersebut dapat digunakan pada web, mobile-apps atau perangkat lain dan perangkat-perangkat tersebut dapat melakukan pengenalan pola.

Kesimpulan

Metode Back-Propagation Neural Network sudah cukup baik memprediksi huruf tulisan dari citra 2 dimensi berukuran 25 piksel kali 25 piksel hitam-putih. Dengan menggunakan node yang layer yang tidak terlalu banyak, hanya 3 layer dan 16 node sebagai hidden layernya, metode ini sudah cukup baik dalam mengenali pola citra huruf A, B dan C. Karena dengan semakin banyaknya layer ataupun jumlah node tentu komputasi yang dilakukan lebih banyak dan bobot yang disimpan juga lebih banyak.

kamu di halaman ini selama .