Elemen Penting dalam Deep Learning for Computer Vision yang Harus Diketahui Sebelum Membuat Model Pertamamu!

Kristian Wilianto
Data Folks Indonesia
10 min readOct 8, 2021

--

Pendahuluan

Machine learning (ML) adalah salah satu jenis Kecerdasan Buatan (Artificial Intelligence) yang tujuan utamanya adalah mengembangkan mesin atau komputer untuk bisa belajar dengan sendirinya tanpa arahan dari penggunanya. ML juga dapat mempelajari data yang ada dan data yang ia peroleh sehingga bisa melakukan tugas tertentu. Tugas yang dapat dilakukan oleh ML pun sangat beragam, tergantung dari apa yang ia pelajari. Selain itu ML juga memiliki beberapa cabang lagi seperti : Computer Vision, Natural Language Processing, Reinforcement Learning, dan masih banyak lagi.

Untuk Computer Vision sendiri salah satu metode yang paling sering dan cukup umum digunakan adalah dengan menggunakan Convolutional Neural Network (CNN). Dengan arsitektur CNN kita dimudahkan untuk melakukan tugas-tugas Computer Vision dikarenakan CNN memiliki Convolutional Network yang dapat mengekstraksi fitur dari gambar inputnya dan juga memiliki Fully Connected Layer yang bisa mengklasifikasikan output dari Convolutional Network yang berupa feature map dari gambar yang diinput. Berikut adalah gambaran dari arsitektur CNN.

https://www.researchgate.net/figure/Schematic-diagram-of-a-basic-convolutional-neural-network-CNN-architecture-26_fig1_336805909

Untuk membuat serta merancang model CNN seperti di atas, sudah banyak tools yang dapat kita gunakan seperti Pytorch, Tensorflow, Keras, Darknet, dan lainnya. Dengan tools-tools tersebut kita bahkan dapat membuat model yang lebih kompleks lagi atau yang biasa disebut dengan Deep Learning. Tentunya dalam ketika membangun model kita akan menemukan situasi dimana kita harus memilih komponen-komponen yang akan digunakan untuk membangun modelnya seperti layers, optimizers, loss functions, activation functions, dan yang terakhir dan tidak kalah penting, hyperparameters. Berikut saya akan menjelaskan beberapa komponen tersebut sebagai bahan pertimbangan kita nantinya agar tidak hanya asal memilih ketika akan membuat model CNN-nya.

Jenis — Jenis Layer

Berikut adalah layer-layer yang umum digunakan untuk membangun sebuah model CNN.

1. Convolutional Network

Convolutional Network adalah jenis layer penting dalam CNN. Penggunaannya yang paling umum adalah untuk mengekstraksi fitur dalam gambar, di mana ia menggunakan filter untuk memindai gambar, beberapa piksel sekaligus, dan menghasilkan feature map yang mengklasifikasikan setiap fitur yang ditemukan.

Filter sendiri adalah suatu matriks dua dimensi dengan ukuran tertentu, seperti 1x1, 3x3, dan seterusnya, yang digunakan sebagai operasi perhitungan terhadap citra masukan. Filter harus selalu memiliki ukuran yang ganjil, dikarenakan filter harus memiliki koordinat tengah.

Dasar Visi Komputer

2. Pooling Layer

Pooling Layer merupakan layer yang biasanya digunakan untuk mengurasi kompleksitas dari komputasi tanpa menghilangkan fitur utamanya. Dengan kata lain, layer ini menggabungkan nilai piksel untuk mengurangi kompleksitas dan ini tidak mempengaruhi kinerja model. Pooling ini dapat dipilih didasarkan pada pemilihan jumlah maksimum, rata-rata, atau total nilai piksel. Metode pooling yang paling populer adalah MaxPooling, yang dapat dicontohkan sebagai berikut:

https://towardsdatascience.com/top-5-layers-you-can-always-come-across-in-any-convolutional-neural-network-c03acdc52bd7

3. Flatten Layer

Flatten Layer berguna seperti jembatan yang menghubungkan antara Convolutional Network dan Fully Connected Layer. Layer ini biasa dipakai dikarenakan gambar dan output dari Convolutional Network berupa 2 dimensi, sedangkan di sisi lain Fully Connected Layer hanya menerima 1 dimensi input. Oleh karena itu Flatten Layer dipakai untuk mengubah data 2 dimensi menjadi 1 dimensi berupa vektor. Ilustrasinya sebagai berikut.

https://towardsdatascience.com/top-5-layers-you-can-always-come-across-in-any-convolutional-neural-network-c03acdc52bd7

4. Fully Connected Layer

https://towardsdatascience.com/four-common-types-of-neural-network-layers-c0d3bb2a966c

Fully Connected Layer adalah layer yang menghubungkan setiap neuron dalam satu layer ke layer berikutnya. Layer ini dapat ditemukan di berbagai jenis Neural Nets, mulai dari yang biasa hingga Convolutional Neural Networks (CNN). Biasanya layer ini digunakan untuk eksperimen ML dan juga biasanya menjadi pengklasifikasi gambar pada CNN.

Pada Fully Connected Layer juga terdapat satu fungsi yang dapat kita gunakan beserta hyperparameter yang dapat digunakannya, berikut fungsinya :

Dense/Linear layer

Dense/Linear layer merupakan layer yang paling sering digunakan pada Fully Connected Layer karena merupakan regular deeply connected neural network layer. Kita juga dapat menentukan hyperparameter dari fungsi ini, pada fungsi ini kita dapat menentukan berapa jumlah neuron dalam satu layer dan juga berapa jumlah hidden layer yang akan dibuat.

5. Dropout Layer

Dropout adalah teknik regularisasi jaringan syaraf dimana beberapa neuron akan dipilih secara acak dan tidak dipakai selama pelatihan. Dropout mengacu kepada menghilangkan neuron yang berupa hidden mapun layer yang visible di dalam jaringan. Salah satu kegunaan dari Dropout sendiri adalah untuk mengatasi overfit, karena dengan menggunakan Dropout terkadang model akan melihat fitur-fitur yang belum dilihat dikarenakan neuron-neuron yang menjadi fitur utamanya dihilangkan dengan Dropout layer.

Dropout neuron untuk mengurangi overfitting

Fungsi Aktivasi

Fungsi aktivasi adalah fungsi yang digunakan pada jaringan saraf untuk mengaktifkan atau tidak mengaktifkan neuron. Berikut adalah beberapa fungsi aktivasi yang umum digunakan.

  1. ReLU

ReLU merupakan fungsi aktivasi linier yang diperbaiki mengeluarkan input secara langsung jika menerima input positif tetapi jika menerima input negatif, fungsi mengembalikan output nol. Secara matematis, ini didefinisikan sebagai

Fungsi aktivasi ini mengatasi masalah gradien yang hilang, dan juga efisien secara komputasi.

2. Leaky ReLU

Leaky ReLU adalah modifikasi dari ReLU karena memungkinkan nilai negatif kecil ketika input kurang dari nol. Ini lebih baik daripada fungsi aktivasi ReLU dan dapat direpresentasikan sebagai:

  1. ReLU

ReLU merupakan fungsi aktivasi linier yang diperbaiki mengeluarkan input secara langsung jika menerima input positif tetapi jika menerima input negatif, fungsi mengembalikan output nol. Secara matematis, ini didefinisikan sebagai

Fungsi aktivasi ini mengatasi masalah gradien yang hilang, dan juga efisien secara komputasi.

  1. Leaky ReLU

Leaky ReLU adalah modifikasi dari ReLU karena memungkinkan nilai negatif kecil ketika input kurang dari nol. Ini lebih baik daripada fungsi aktivasi ReLU dan dapat direpresentasikan sebagai:

3. Softmax

Softmax mengubah vektor nyata menjadi vektor probabilitas kategorikal. Elemen vektor keluaran berada dalam range (0, 1) dan berjumlah 1. Softmax sering digunakan sebagai aktivasi untuk lapisan terakhir dari jaringan klasifikasi karena hasilnya dapat diartikan sebagai distribusi probabilitas, terutama jika kita melakukan tugas yang berupa multi-class.

4. Sigmoid

Aktivasi sigmoid menghasilkan nilai dalam (0, 1), yang berguna dalam melakukan komputasi yang harus ditafsirkan sebagai probabilitas. Selain itu, ini menormalkan data dan juga membantu dalam membuat keluaran probabilistik dan membangun fungsi kerugian yang diturunkan dari model kemungkinan maksimum. Fungsi aktivasi ini juga biasa digunakan pada lapis terakhir dari jaringan klasifikasi, terutama jika kita menjalankan tugas yang berupa binary. Sebenarnya kita juga dapat menggunakan Softmax untuk binary tetapi Sigmoid lebih efisien karena hanya menggunakan 1 neuron pada layer terakhirnya di mana softmax tetap menggunakan 2 neuron pada kasus binary classification.

5. tanh

Fungsi tanh memiliki bentuk yang mirip dengan fungsi sigmoid, kecuali bahwa fungsi tersebut diskalakan ulang secara horizontal dan diskalakan ulang secara vertikal menjadi [−1, 1]. Fungsi tanh dan sigmoid terkait sebagai berikut:

tanh (x) = 2 sigmoid (2x) — 1

Fungsi tanh lebih disukai daripada sigmoid ketika keluaran dari perhitungan diinginkan menjadi positif dan negatif. Selain itu, gradien pemusatan rata-rata dan gradien yang lebih besar (karena peregangan) sehubungan dengan sigmoid membuatnya lebih mudah untuk dilatih.

Loss Function

Loss Function secara sederhana dapat dianalogikan seperti nilai ujian kita ketika kita sekolah dulu. Jadi loss function berguna untuk menilai seberapa baik model tersebut ketika proses training. Mungkin ketika mendengar loss kita berpikir juga tentang metrics. Memang sekilas loss dan metrics cukup mirip tetapi sebenarnya kedua hal tersebut berbeda. Secara kasar, Metrics datang dari perspektif bisnis, sedangkan Loss adalah fungsi obyektif bahwa algoritma pembelajaran (pengoptimal) mencoba untuk meminimalkan dari perspektif matematika. Jadi berikut adalah beberapa Loss Function yang ada dan cukup umum digunakan.

1. Cross-Entropy

Cross entropy adalah salah satu loss function yang cukup sering digunakan pada Deep Learning. Pada teori informasi, cross-entropy memiliki persamaan sebagai berikut.

https://stackoverflow.com/questions/41990250/what-is-cross-entropy/41990932

Biar lebih mudah dipahami bayangkan kita ingin menentukan loss function dari dua class misalnya kucing dan anjing. Kemudian didapatkan output dari neuron terakhir model kita 0.67 untuk kucing dan (1–0.67) = 0.33 untuk anjing (anggapan neuron terakhir menggunakan aktivasi Sigmoid). Kemudian label atau ground truth dari satu gambar tersebut adalah kucing. Maka persamaannya menjadi seperti ini.

Sedangkan jika kita ubah ground truthnya menjadi di anjing, maka persamaannya dan lossnya menjadi seperti ini.

Bisa dilihat jika model memiliki probabilitas yang lebih tinggi untuk class yang benar maka hasil lossnya menjadi rendah, sedangkan jika model salah memprediksi nilai lossnya akan menjadi tinggi.

Seperti yang sudah dibahas biasa loss function ini digunakan untuk tugas klasifikasi. Tetapi terkadang kita akan menghadapi situasi berbeda seperti binary dan multi-class klasifikasi. Pada binary classification biasanya digunakan aktivasi Sigmoid pada layer terakhirnya dan untuk perhitungannya seperti contoh di atas. Sedangkan pada kondisi multi-class classification biasanya menggunakan aktivasi Softmax pada layer terakhirnya yang outputnya merupakan probabilitas dari setiap classnya (yang mana jumlah neuronnya akan sesuai jumlah classnya).

2. Hinge Loss

Alternatif untuk cross-entropy untuk masalah klasifikasi biner adalah fungsi hinge loss, terutama dikembangkan untuk digunakan dengan model Support Vector Machine (SVM).

Ini dimaksudkan untuk digunakan dengan klasifikasi biner di mana nilai target berada di set {-1, 1}. Oleh karena itu juga fungsi aktivasi yang biasanya digunakan pada layer terakhirnya adalah tanh dikarenakan output tanh yang juga memiliki range antara -1 dan 1.

Optimizer

Optimizer adalah metode yang digunakan untuk meminimalisasi loss dan meningkatkan performa modelnya.Optimizer adalah fungsi matematika yang bergantung pada parameter model yang dapat dipelajari, yaitu Weights & Bias. Optimizer membantu mengetahui cara mengubah weights dan learning rate untuk mengurangi lossnya. Berikut adalah beberapa optimizer yang umum digunakan.

1. Gradient Descent

Gradient Descent adalah algoritma pengoptimalan yang didasarkan pada fungsi convex dan mengubah parameternya secara iteratif untuk meminimalkan fungsi yang diberikan ke minimum lokalnya. Gradient Descent secara iteratif mengurangi fungsi loss dengan bergerak ke arah yang berlawanan dengan pendakian paling curam. Hal ini tergantung pada turunan dari fungsi kerugian untuk menemukan minima. Berikut adalah persamaannya dan visualisasinya.

Pada optimizer terdapat juga hyperparameter penting yang disebut Learning Rate. Learning rate adalah seberapa besar langkah yang akan dilakukan oleh Gradient Descent untuk menuju ke minima. Learning Rate yang kecil akan memperlambat proses training tapi akan membuat model converges dengan baik, sedangkan Learning Rate yang tinggi akan mempercepat training tapi belum tentu model akan converges seperti pada ilustrasi berikut.

2. Stochastic Gradient Descent (SGD)

SGD adalah varian dari Gradient Descent biasa. Perbedaannya SGD mengupdate modelnya satu-persatu. Jika train datanya berjumlah 100 maka model juga akan diupdate 100 kali. SGD juga dapat dilakukan per-batch tergantung dari batch size yang kita atur atau biasa disebut dengan Mini-batch Gradient Descent.

3. SGD + Momentum

SGD dengan Momentum adalah modifikasi dari SGD biasa yang ditambahkan dengan momentum. Secara singkat momentum berguna untuk memberi momentum untuk lossnya dengan cara menggunakan weighted average sehingga lossnya dapat melewati local minima. Berikut adalah ilustrasinya.

4. Nesterov Accelerated Gradient

Nesterov Momentum dapat mengatasi gradien descent ketika hampir sampai ke local minima agar momentumnya tidak terlalu tinggi dan terjadinya osilasi. Contohnya dapat dilihat pada ilustrasi berikut.

5. AdaGrad (Adaptive Gradient Descent)

Pada optimizer-optimizer sebelumnya learning ratenya akan tetap konstan setiap iterasinya. Nanti learning ratenya akan dibagi dengan akumulasi dari gradien kuadrat sebelumnya sehingga neuron yang sering diupdate semakin lama learning ratenya akan semakin kecil dan berlaku sebaliknya untuk yang jarang diupdate. Berikut perbandingannya dengan SGD.

6. RMSProp (Root Mean Square Propagation)

RMSProp adalah optimizer yang didasarkan dari kelemahan AdaGrad. AdaGrad mengatur learning rate berdasarkan akumulasi dari gradien kuadrat sebelumnya. Tetapi terdapat kelemahan pada AdaGrad, yaitu ketika neuron akan semakin sering diupdate maka learning ratenya akan semakin kecil dan lama-kelamaan akan mendekati nol sehingga update weightsnya menjadi tidak signifikan. Oleh karena itu RMSProp menambahkan gradien kuadratnya dengan weighted average gradien sebelumnya sehingga pembaginya akan menyesuaikan dan mengatasi kekurangan dari AdaGrad.

7. Adam

Adam adalah salah satu optimizer yang terkenal dan cukup sering digunakan untuk membangun model Deep Learning. Adam juga secara singkat adalah gabungan dari RMSProp yang ditambah dengan momentum yang juga memiliki bias correction. Kelebihan dari optimizer ini adalah mudah diimplementasikan, efisien, serta hemat memori. Berikut adalah persamaan dari Adam optimizer.

Final Notes

Tadi adalah beberapa elemen penting yang akan kita temui nanti saat kita hendak membuat model CNN. Jika ingin mengetahui lebih lanjut tentang hal-hal tersebut, mungkin bisa membaca paper menarik yang memberi info tentang trik-trik pada CNN yang berjudul Bag of Tricks for Image Classification with Convolutional Neural Networks. Tentunya informasi yang saya berikan tadi juga berdasarkan beberapa literatur dan tidak lepas juga dari pengalaman pribadi saya sendiri. Oleh karena itu saya meminta maaf jika mungkin ada informasi yang tidak sesuai. Semoga bermanfaat and thanks for reading!

Referensi

--

--