🤔Dasar Teori
Last updated
Last updated
Convolutional Neural Network (CNN) atau sering juga dikenal sebagai ConvNet, merupakan tipe khusus dari dari Artificial Neural Network (ANN) yang dapat melakukan generalisasi data secara baik. Hal ini berkaitan dengan kemampuan CNN dalam mengenali fitur abstrak secara bertingkat sehingga dapat mengidentifikasi objek dengan lebih baik. Proses tersebut dikarenakan pada CNN, data akan diproses menggunakan topologi grid. Sebagai contoh, pada data timeseries, akan dipelajari dengan menggunakan 1 dimensi (1D) grid pada rentang waktu tertentu, atau pada sebuah gambar, gambar akan dipelajari dengan menggunakan grid 2 dimensi (2D).
Pada praktiknya, model CNN akan terdiri dari beberapa layer yang dalam (deep CNN) untuk mempelajari sebuah data (misalnya gambar). Kondisi ini memungkinkan CNN dapat mempelajari fitur-fitur pada data dengan tingkatan abstraksi yang berbeda-beda (multi-level abstraction). Biasanya, pada layer awal CNN, layar akan mempelajari fitur tingkat tinggi (high level features) namun dengan tingkat abstraksi yang rendah. Namun selanjutnya, pada layer-layer yang lebih dalam, layer akan mempelajari fitur tingkat rendah (low level features) tetapi dengan tingkat abstrasksi yang tinggi. Gambar 1 ini merupakan contoh sederhana dari arstektur CNN.
CNN sangat sering digunakan sebagai salah model untuk kasus klasifikasi citra. Tentunya hal ini juga dipengaruhi oleh awal diperkenalkannya konsep CNN secara utuh oleh Yann LeCun. Pertanyaannya adalah, mengapa CNN menjadi algoritma yang sangat populer untuk kasus klasifikasi citra secara khusus dan kasus visi komputer secara umum?
CNN menggunakan konsep weight sharing pada jaringannya. Dengan demikian, jumlah parameter yang dilihat dalam jaringan CNN dapat dikurangi. Kondisi ini berdampak pada pengurangan potensi overfitting dan menjadikan CNN dapat mengeneralisasi data dengan lebih baik dibandingkan dengan ANN.
Pada CNN, proses ekstraksi fitur dan klasifikasi dilakukan pada layer yang berurutan. Arsitektur ini memungkinkan proses ekstraski fitur dan klasifikasi dapat melakukan pembelajaran secara bersamaan. Lebih lanjut lagi, teknik ini akan berdampak pada output yang akan bergandung dengan fiturnya.
Implementasi pada arsitektur yang kompleks (besar) akan lebih rumit diimplementasikan pada ANN dibandingkan dengan CNN.
Meskipun CNN sangat populer pada kasus klasifikasi citra. Akan tetapi, saat ini CNN juga telah banyak digunakan pada bidang lain tentunya dengan berbagai penyesuaian, khususnya berkaitan dengan data yang digunakan. Contohnya adalah Natural Language Processing (NLP) dan speech recognition.
Secara umum, arsitektur CNN terdiri dari,
Blok Konvolusi (The Convolutional Block) --> Terdiri dari dua layer yaitu convolutional layer dan pooling layer. Pada bagian ini, proses ekstraksi fitur akan dilakukan.
Blok Jaringan Saraf Tiruan (The Fully Connected Block) --> Merupakan blok yang berisi ANN yang digunakan untuk proses klasifikasi. Input dari ANN pada blok ini merupakan fitur yang dihasilkan dari blok konvolusi.
Convolutional layer merupakan bagian penting dari CNN. Telah dijelaskan sebelumnya, layer ini akan bertugas sebagai bagian dari proses ekstraksi fitur. Layer ini terdiri dari kernel (atau filter) yang akan dikonvolusikan dengan data input. Untuk lebih memahami convolutional layer, kita harus memahami apa itu kernel atau filter dan operasi konvolusi.
Kernel atau filter adalah sebuah grid nilai yang dapat merepresentasikan fitur dari sebuah data. Anda dapat membayangkan kernel seperti filter pada proses pengolahan citra seperti mean filter, sharpening filter, ataupun edge filter. Gambar 2 dan Gambar 3 merupakan ilustrasi kernel / filter pada pengolahan citra.
Dikarenakan kernel dan filter pada konteks CNN merujuk pada proses yang sama. Sehingga, kedua istilah ini sering dipertukar gunakan. Pada job sheet ini kita akan menggunakan istilah kernel. Kernel sendiri tidak harus berukuran 2 dimensi. Selain itu ukuran dari kernel juga dapat fleksibel sesuai dengan kebutuhan. Tentunya kondisi ini bergantung dengan data yang digunakan dan proses ektraksi fitur seperti apa yang diinginkan. Setelah mengetahui tentang kernel, langkah selanjutnya adalah melakukan proses konvolusi dengan menggunakan kernel yang dipilih.
Bagiamana memilih kernel yang tepat?
Jika kita mengetahui secara pasti permasalahan apa yang akan diselesaikan, seperti noise removal pada Gambar 3, maka kita dapat melakukan proses ini secara manual (hand engineered filter). Akan tetapi, pada kasus yang lebih kompleks dengan data yang sangat beragam, mungkin kita akan sulit mendefinisikan kernal yang tepat. Oleh karena itu, dengan menggunakan CNN, proses pencarian filter yang tepat dapat dilakukan secara otomatis oleh perangkat komputasi.
Jika Anda telah mempelajari kernel pada pengolahan citra digital, maka Anda telah familiar dengan proses konvolusi. Konvolusi adalah proses khusus linier pada matriks yang mengkalikan nilai pada setiap sel matriks data pada baris dan kolom tertentu dengan sel kernel pada baris dan kolom yang sama. Proses ini dilakukan untuk setiap nilai pada sel matriks data (dengan jarak tertentu) dan dijumlahkan untuk mendapatkan nilai akhir.
Sebagai contoh, kita memiliki data A adalah [ 2 5 17] dan kernel filter B adalah [1 0 1] maka,
Untuk memudahkan pemahaman, perhatikan ilustrasi berikut,
Perhatikan pula, ukuran output dari proses konvolusi akan serupa dengan ukuran kernel yang digunakan.
Pada ilustrasi diatas, proses bergesernya kernal pada data lebih sering disebut sebagai proses sliding window. Jika kita perhatikan pada ilustrasi diatas, maka kita dapat menyadari bahwa data pada bagian luar (baris / kolom pertama dan terakhir) mungkin saja tidak terfilter dengan baik oleh kernel. Hal ini dipengaruhi oleh jumlah pergeseran kernel yang kita gunakan. Apabila pergeseran kernel menyebabkan kernel bergerak melebihi ukuran dari data, maka diperlukan padding untuk mengatasi hal tersebut. Selain itu, jumlah pergeseran window kernel pada data, kita sebut sebagai stride. Oleh karena itu, dalam mempelajari konsep konvolusi pada CNN, kita juga harus mempelajari konsep padding dan striding.
Padding merupakan teknik yang digunakan untuk memungkinkan output dari kernel berukuran sama dengan ukuran dari data. Hal ini dikarenakan kernel dapat bergerak melebihi ukuran dari data yang digunakan dengan memberikan padding sehingga kernel dapat memfilter data secara penuh. Padding umumnya dapat diberi nilai 0, 1, atau sama dengan bagian luar (edge) dari data. Gambar 3 merupakan ilustrasi dari padding.
Proses filter dengan menggunakan padding dapat dilihat pada ilustrasi berikut.
Ukuran padding juga dapat disesuaikan seberapa besar data pada edge yang ingin di filter dengan ukuran kernel yang digunakan. Gambar 4 merupakan ilustrasi padding dengan berbagai macam ukuran padding.
Striding adalah proses pergeseran kernel pada data. Pada ilustrasi sebelumnya Anda telah melihat kernel bergeser setiap 1 data atau 1 sel dalam matriks. Akan tetapi, besaran pergeseran data yang dilakukan tidak harus sebesar 1 data.
Setelah melalui proses filter dengan menggunakan kernel, dalam proses konvolusi, setiap nilai data atau sel dalam matriks akan melalui fungsi aktivasi. Fungsi aktivasi yang digunakan dapat beragam, akan tetapi yang biasa digunakan adalah fungsi aktivasi Rectified Linear Unit (ReLU). Nilai hasil aktiviasi ReLU dapat dilihat pada ilustrasi Gambar 5.
Ide dasar mengapa ReLU digunakan adalah jika hasil dari konvolusi bernilai 0 atau negatif maka dapat diasumsikan bahwa fitur tidak muncul pada hasil konvolusi. Sehingga, setiap nilai 0 dan negatif akan dianggap tidak ada (nilai 0) dan nilai selain 0 akan sesuai dengan nilai hasil konvolusi (fitur dianggap ada).
Akan tetapi, Anda juga dapat menggunakan fungsi aktivasi lain sesuai dengan kebutuhan kasus yang akan diselesaikan dan data yang digunakan.
Pada pooling layer, akan dilakukan proses ekstraksi nilai dari hasil convolutional layer. Proses ini juga menggunakan kernel untuk mengekstrasi nilai. Proses pooling akan mengambil fitur yang diperlukan sesuai dengan teknik pooling yang digunakan. Gambar 6 merupakan ilustrasi dari proses pooling. Operasi pooling tidak sama dengan konvolusi. Proses ektraksi tidak dilakukan dengan menggunakan operasi konvolusi, namun dengan mengambil nilai dalam area kernel pooling sesuai dengan metode pooling yang digunakan.
Terdapat beberapa jenis kernel yang sering digunakan, diantaranya adalah,
Max Pooling --> Mengekstrak nilai maksimal dari kernel pooling.
Average Pooling --> Mengekstrak nilai rata-rata dari kernel pooling.
Min Pooling --> Mengekstrak nilai minimal dari kernel pooling.
Mixed Pooling --> Mengekstrak nilai dengan kombinasi fungsi max pooling dan average pooling. Hasil akhir mempertimbangkan bobot dari kedua fungsi tersebut.
Dan sebagainya.
Flattening adalah proses mengubah dimensi data hasi dari proses hasil konvolusi dan pooling menjadi data 1 dimensi (array 1 dimensi). Proses ini merupakan proses diantara Convolutional Block dan Fully Connected Block. Flattening akan mempersiapkan bentuk dari data sehingga dapat dipelajari oleh ANN dalam fully connected block. Gambar 7 merupakan ilustrasi dari proses flattening.
Fully connected block pada CNN terdiri dari ANN yang akan melakukan proses pembalajaran dari fitur yang dihasilkan oleh blok konvolusi. Arsitektur ANN yang digunakan tidak berbeda dengan ANN yang telah dipelajari sebelumnya. Kita dapat menggunakan beberapa hidden layer dan node pada blok ini. Fungsi aktiviasi yang digunakan juga dapat disesuiakan dengan kasus dan data yang digunakan. Akan tetapi, jumlah input harus sama dengan jumlah data dari proses flatten dan jumlah output sesuai dengan jumlah output (label) yang diinginkan.
Pada proses pembelajarannya, CNN juga menggunakan konsep pembelajaran yang sama dengan ANN yaitu melalui BACKPROPAGATION dan LOSS FUNCTION. Perbedaan mendasar terjadi pada blok konvolusi. Jika pada ANN pembelajar dilakukan dengan memperbarui bobot, maka pada blok konvoluasi, pembelajaran dilakukan dengan memperbarui nilai kernel yang digunakan untuk setiap layer konvolusi.
Kita telah mempelajari bagian-bagian dan proses utama dari CNN. Jika seluruh layer disatukan, maka arsitektur CNN secara umum akan seperti pada Gambar 8.