Deep Learning untuk mengenali Gambar



Image result for deep learning

Deep Learning atau sering dikenal dengan istilah Pembelajaran Struktural Mendalam (Deep Structured Learning) atau Pembelajaran Hierarki (Hierarchical learning) adalah salah satu cabang dari ilmu pembelajaran mesin (Machine Learning) yang terdiri algoritma pemodelan abstraksi tingkat tinggi pada data menggunakan sekumpulan fungsi transformasi non-linear yang ditata berlapis-lapis dan mendalam. Teknik dan algoritma dalam Pembelaran dalam dapat digunakan baik untuk kebutuhan pembelajaran terarah (supervised learning), pembelajaran tak terarah (unsupervised learning) dan semi-terarah (semi-supervised learning) dalam berbagai aplikasi seperti pengenalan citra, pengenalan suara, klasifikasi teks, dan sebagainya[4]. Deep Learning disebut sebagai Deep (dalam) karena struktur dan jumlah jaringan saraf pada algoritmanya sangat banyak bisa mencapai hingga ratusan lapisan.

Deep Learning adalah salah satu jenis algoritma jaringan saraf tiruan yang menggunakan metadata sebagai input dan mengolahnya menggunakan sejumlah lapisan tersembunyi (hidden layer) transformasi non linier dari data masukan untuk menghitung nilai output. Algortima pada Deep Learning memiliki fitur yang unik yaitu sebuah fitur yang mampu mengekstraksi secara otomatis. Hal ini berarti algoritma yang dimilikinya secara otomatis dapat menangkap fitur yang relevan sebagai keperluan dalam pemecahan suatu masalah. Algortima semacam ini sangat penting dalam sebuah kecerdasan buatan karena mampu mengurangi beban pemrograman dalam memilih fitur yang eksplisit. Dan, algortima ini dapat digunakan untuk memecahkan permasalahan yang perlu pengawasan (supervised), tanpa pengawasan (unsupervised), dan semi terawasi (semi supervised).
Dalam jaringan saraf tiruan tipe Deep Learning setiap lapisan tersembunyi bertanggung jawab untuk melatih serangkaian fitur unik berdasarkan output dari jaringan sebelumnya. Algortima ini akan menjadi semakin komplek dan bersifat abstrak ketika jumlah lapisan tersembunyi (hidden layer) semakin bertambah banyak. Jaringan saraf yang dimiliki oleh Deep Learning terbentuk dari hirarki sederhana dengan beberapa lapisan hingga tingkat tinggi atau banyak lapisan (multi layer). Berdasarkan hal itulah Deep Learning dapat digunakan untuk memecahkan masalah kompleks yang lebih rumit dan terdiri dari sejumlah besar lapisan transformasi non linier.
Jenis Deep Learning
·         Deep Learning untuk Pembelajaran Tanpa Pengawasan (Unsupervised Learning): Deep Learning tipe ini digunakan pada saat label dari variabel target tidak tersedia dan korelasi nilai yang lebih tinggi harus dihitung dari unit yang diamati untuk menganalisis polanya.
·         Hybrid Deep Networks (Deep Learning gabungan): Pendekatan tipe ini bertujuan agar dapat dicapai hasil yang baik dengan menggunakan pembelajaran yang diawasi untuk melakukan analisis pola atau dapat juga dengan menggunakan pembelajaran tanpa pengawasan.
Seberapa banyak jumlah lapisan tersembunyi (Hidden Layer) yang harus dipakai pada Deep Learning?
Deep Learning bekerja berdasarkan pada arsitektur jaringan dan prosedural optimal yang digunakan pada arsitektur. Setiap output dari lapisan per lapisan yang tersembunyi dapat dipantau dengan menggunakan grafik khusus yang dirancang untuk setiap output neuron. Kombinasi dan rekombinasi dari setiap neuron yang saling terhubung dari semua unit lapisan tersembunyi dilakukan menggunakan gabungan dari fungsi aktivasi. Prosesdur-prosedur tersebut dikenal sebagai Transformasi Non Linier yang digunakan untuk prosedur optimal untuk menghasilkan bobot optimal pada setiap unit lapisan guna mendapatkan nilai target yang dibutuhkan.

Ketika dalam proses perancangan, apabila jumlah saraf yang ditambahkan sangat banyak, hal tersebut tidak akan pernah cocok untuk menyelesaikan setiap masalah. Persoalan terpenting dalam Deep Learning adalah jaringan sarafnya dilatih dengan cara penurunan gradien secara sederhana. Pada saat kita menambahkan lapisan jaringan yang semakin banyak, maka sebaliknya penurunan dari gradien semakin berkurang sehingga dapat mempengaruhi nilai outpunya.
Perbedaan yang dimiliki oleh Jaringan Saraf Tiruan biasa dengan Deep Learning
Jaringan Saraf Tiruan adalah jaringan saraf yang biasanya menggunakan jaringan seperti umpan maju (feed forward) atau recurrent network yang hanya memiliki 1 atau 2 lapisan tersembunyi. Tetapi, jika lapisan jaringan sarafnya lebih dari 2 layer ke atas atau bahkan mencapai ratusan lapisan itulah yang disebut sebagai Deep Learning. Pada Jaringan Syaraf Tiruan arsitektur jaringan yang dimilikinya kurang kompleks dan membutuhkan lebih banyak informasi tentang data input sehingga dapat menentukan algortima mana yang dapat digunakan. Dalam Jaringan Saraf Tiruan terdiri dari beberapa algoritma yaitu Model Hebb, Perceptron, Adaline, Propagasi Maju, dll. Sedangkan pada algortima jaringan saraf Deep Learning tidak memerlukan informasi apapun terhadap data yang akan dipelajarinya, dan algoritmanya dapat secara mandiri melakuan tuning (penyetelan) dan pemilihan model yang paling optimal.



Neural Network

Unit dasar untuk komputasi dalam otak adalan neuron. Terdapat sekitar 86 juta neuron yang ada pada sistem syaraf manusia dan semuanya terhubung dengan 1014  sampai 1015 sinapsis. Tiap neuron menerima input dari dendrit dan output yang dihasilkan dikirim melalui axon. Lalu, masing-masing axon akan terhubung dengan dendrit dari neuron lain.
Dalam model komputasi neuron, sinyal yang melewati axon berinteraksi beberapa kali dengan dendrit milik neuron lain berdasarkan kekuatan sinapsis. Dengan kata lain, sinapsis dapat belajar dan mempengaruhi neuron satu atau yang lainnya.
Dari struktur neuron pada otak manusia, maka konsep dasar pembangunan neural network buatan (Artificial Neural Network) terbentuk. Ide dasar dari artificial neural network (ANN) adalah mengadopsi cara berpikir sebuah sistem yang menyerupai otak manusia, baik dalam memroses berbagai sinyal elemen yang diterima dan toleransi terhadap kesalahan.
Karakteristik dari ANN dilihat dari pola hubungan antar neuron, metode penentuan kekuatan sinapsis (bobot) dari tiap koneksi, dan perhitungan pada sinapsis (aktivasi).
ANN dibangun dari banyak neuron (unit) yang dihubungkan dengan sinapsis (link) secara langsung. Link tersebut digunakan untuk melakukan propagasi aktivasi dari unit pertama ke unit selanjutnya. Setiap link memiliki bobot numerik. Bobot ini merupakan kekuatan hubungan antar unit. Proses pada ANN dimulai dari input yang diterima neuron beserta dengan nilai bobot dari tiap input yang ada.
Setelah masuk ke dalam neuron, nilai input akan dijumlahakan oleh suatu fungsi perambatan dan hasilnya akan diporses oleh fungsi aktivasi untuk mengaktifkan unit. Setelah aktif, unit akan mengirim nilai output ke seluruh unit yang terhubung dengannya. Proses ini akan terus berulang pada input selanjutnya.
Tiap unit pada ANN dikelompokkan ke dalam beberapa lapisan (layer). Unit yang terdapat pada tiap layer dihubungkan dengan unit pada layer lainnya. Informasi yang diterima di layer input dilanjutkan ke layer selanjutnya satu persatu hingga mencapai layer output. Layer yang terletak di antara layer input dan output disebut sebagai hidden layer. Namun, tidak semua ANN memiliki hidden layer, ada juga yang hanya terdapat layer input dan output saja.

Tensorflow
Tensorflow merupakan framework machine learning yang dikembangan oleh Google. Pada tahun 2015, Google membuat Tensorflow open-source di bawah lisensi Apache 2.0. Sebelumnya, Tensorflow adalah hak milik Google dan digunakan oleh Google untuk mengembangkan speech recognition, Search, Photos dan Gmail.
Library ini diimplementasikan menggunakan C++ dan memiliki API Python yang mudah digunakan. Dikarenakan ketergantungan yang sederhana, Tensorflow dapat dengan cepat diterapkan untuk arsitektur yang beragam.
Komputasi pada Tensorflow dideskripsikan menggunakan flowchart, ini memisahkan desain dari implementasi.  Hal ini membuat desain yang sama dapat diimplementasi pada sistem berskala besar, tetapi juga pada perangkat mobile.
Salah satu keunggulan yang dimiliki Tensorflow adalah kemampuan automatic differentiation. Automatic differentiation membuat komputasi yang membutuhkan perhitungan besar menjadi lebih mudah diterapkan.
Pembuatan prototype pada Tensorflow pun lebih mudah dan cepat karena library sudah pre-compiled. Ini membuat seluruh komputasi dapat digunakan tanpa melakukan perhitungan ulang.
Tensorflow juga terdokumentasi dengan baik dan didukung oleh Google. Sehingga, untuk mengembangkan aplikasi machine learning yang cenderung sulit Tensorflow menjadi lebih nyaman.

Contoh studi kasus
Contoh kasus yang akan dipahami adalah penggunaan tensorflow untuk mengenali gambar.
Metode yang digunakan adalah Pengolahan data, membangun strutur neural network, melakukan optimasi pada neutal network, kemudian melakukan visualisasi.

·        Pengolahan data
Karena machine learning membutuhkan data untuk menyelesaikan suatu masalah, data tersebut perlu diolah terlebih dahulu agar ciri-ciri yang dimiliki dapat dipelajari dengan baik. Data yang digunakan adalah citra huruf latin, hiragana dan hangul. Pada modul ini hanya dijelaskan penggunaan data citra huruf latin. Untuk penerapan menggunakan citra huruf lainnya, tidak jauh berbeda.
Citra huruf latin diambil dari dataset Chars74K. Dataset ini terdiri atas 26 kelas huruf kapital dan huruf kecil, serta 10 kelas angka. Tiap kelas terdiri atas 27 citra PNG berukuran 1200x900 pixel.
Pengolahan data yang dilakukan hanya pengubahan ukuran citra (scaling) menjadi 30x30 dan konversi citra RGB ke grayscale. Proses ini menggunakan modul opencv-python.



Kemudian, proses pengambilan data dimodelkan ke dalam bentuk fungsi yang menerima parameter direktori tempat data tersebut disimpan dan mengembalikan dua buah array, yaitu array kumpulan citra dan array kumpulan label.



Selanjutnya adalah memanggil fungsi tersebut untuk mendapatkan citra dan label dari direktori yang sudah ditentukan

Potongan program di atas merupakan fungsi load_data dengan parameter data_directory. Kemudian fungsi tersebut akan mencari direktori di dalam data_directory dan disimpan ke dalam array directories. Lalu, inisiasi dua buah array kosong yaitu labels dan images. Selanjutnya, fungsi akan melakukan perulangan sebanyak jumlah direktori pada array directories untuk mencari file PNG. Kemudian, seluruh file PNG yang ditemui dibaca dengan fungsi imread pada modul cv2 dan hasilnya disimpan ke dalam array images, serta nama direktori pun disimpan ke dalam array labels. Setelah semua proses dilakukan, fungsi akan mengembalikan nilai array images dan labels.



citra-citra tersebut perlu dilakukan proses scaling dan konversi ke grayscale. Berikut adalah potongan kodenya.

·        Membangun Neural Network

Proses membangun neural network melibatkan modul Tensorflow



Kemudian, placeholder dibutuhkan agar data yang sudah diload dapat diproses oleh mesin Tensorflow. Ada dua placeholder yang dibutuhkan, yaitu placeholder untuk input citra dan input label.



Setelah placeholder dibuat, kemudian dibuatlah neural network yang terdiri dari 2 layer, yaitu layer input dan layer output. Berikut adalah potongan program untuk membuat neural network.



images_flat merupakan layer input. Pada layer tersebut, citra yang diinput akan diubah menjadi vektor atau matriks satu dimensi. Hal tersebut dilakukan karena neuron pada tiap layer disusun menjadi vektor. Layer images_flat menerima input dari placeholder x.
Layer selanjutnya adalah logits. Layer ini merupakan layer output dengan jenis fully connected. Maksudnya adalah, seluruh neuron terkoneksi secara penuh pada layer ini. Layer ini menerima input dari layer images_flat, kemudian terdapat 26 neuron, dan neuron diaktifkan menggunakan Rectified Linear Unit (ReLU). Fungsi aktivasi ini akan menghasilkan nilai 0 jika input bernilai negatif. Jika input bernilai positif, fungsi akan menghasilkan nilai input tersebut.
Kemudian, untuk mengetahui apakah neural network yang dibangun dapat mempelajari data yang diinput, perlu ditambahkan fungsi error atau fungsi loss. Fungsi loss menunjukan tingkat error network yang dibangun. Semakin kecil nilai yang dihasilkan fungsi loss, semakin bagus network tersebut belajar. Maka dari itu, fungsi loss harus diminimalkan. Salah satu caranya adalah menggunakan algoritma Stochastic Gradient Descent. Berikut adalah implementasinya dalam program.



Pada potongan kode di atas, fungsi loss yang digunakan adalah softmax. Fungsi ini akan menghasilkan nilai probabilitas terhadap label dari citra input. Fungsi ini menerima dua parameter, yaitu logits dan labels.
Lalu, baris berikutnya adalah implementasi algoritma Stochastic Gradient Descent. Algoritma tersebut menerima parameter learning rate. Learning rate adalah tingkat kecepatan algoritma dalam meminimalisir nilai fungsi loss. Semakin tinggi nilai learning rate, semakin cepat algoritma dalam meminimalisir nilai fungsi loss.
Terakhir adalah implementasi perhitungan tingkat akurasi neural network dalam mengenali huruf. Berikut potongan programnya.



correct_pred akan digunakan untuk menyimpan prediksi benar. Kemudian, dari nilai yang ada di dalam correct_pred, dihitung reratanya dan hasilnya disimpan ke variabel accuracy.
Terakhir adalah mencetak semua variabel Tensorflow untuk melihat apakah variabel tersebut sudah benar diinisiasi. Berikut adalah potongan kodenya.




·         Optimasi pada Neural Network
Algoritma optimasi digunakan untuk melakukan training pada neural network yang kita miliki dari cara algoritma optimasi yang tradisional hingga cara-cara lainnya. Algoritma optimasi untuk training pada neural network biasanya mencakup beberapa spesialisasi pada struktur spesifik dari fungsi dan tujuan machine learning tersebut. Berikut ini ada beberapa algoritma optimasi, di antaranya:
Stochastic Gradient Descent, Momentum Nesterov, Adam.

Kali ini akan membuat menggunakan adam optimizer



Jika dijalankan akan menampilkan output berupa



·        Visualisasi

Kita akan mencoba memberikan visualisasi data set yang kita miliki dengan manampilkan 10 data set yang kita miliki dan kita ambil secara acak.



Yang akan menampilkan output seperti gambar dibawah ini




Comments

Popular posts from this blog

Tutor: FL Studio / Fruity Loops Studio

AT&T sebagai provider sedunia