Mengenal Convolutional Layer Dan Pooling Layer

Richard Dharmadi
Nodeflux
Published in
4 min readApr 4, 2018

Disclaimer: Tulisan ini merupakan lanjutan dari tulisan sebelumnya yang menjelaskan konsep dasar dan intuisi dari Convolutional Neural Network (CNN). Tulisan ini tidak membahas implementasi dari CNN menggunakan framework tertentu.

Part of CNN series:
Part I: Mengenal Convolutional Neural Network
Part II: Mengenal Convolutional Layer dan Pooling Layer (you are reading it)

Mesin melihat sebuah gambar sebagai kumpulan angka-angka dalam sebuah matriks, yang setiap angkanya menandakan intensitas cahaya pada titik tersebut, atau biasa disebut pixel.

Sebuah gambar hitam putih direpresentasikan menjadi sebuah matrix. Image by Adam Geitgey via Medium

Gambar hitam-putih direpresentasikan menjadi sebuah matriks, sedangkan gambar berwarna memiliki tiga buah matriks. Satu matriks untuk representasi cahaya merah, satu matriks untuk cahaya hijau, dan terakhir untuk representasi cahaya biru (RGB).

Dengan kata lain, bagi sebuah mesin, sebuah gambar memiliki 3 parameter yang perlu diperhatikan, yaitu tinggi (height), lebar (width), dan tebal/jumlah kanal (depth).

1. Convolutional Layer

Proses konvolusi memanfaatkan apa yang disebut sebagai filter. Seperti layaknya gambar, filter memiliki ukuran tinggi, lebar, dan tebal tertentu. Filter ini diinisialisasi dengan nilai tertentu (random atau menggunakan teknik tertentu seperti Glorot), dan nilai dari filter inilah yang menjadi parameter yang akan di-update dalam proses learning.

Gambar input CNN selalu berbentuk kotak. Proses untuk gambar non-rectangular masih belum diketahui [1]. Filter pun mengikuti karakteristik kotak tersebut.

Proses pada Convolutional Layer

Pada setiap posisi gambar, dihasilkan sebuah angka yang merupakan dot product antara bagian gambar tersebut dengan filter yang digunakan. Dengan menggeser (convolve) filter di setiap kemungkinan posisi filter pada gambar, dihasilkan sebuah activation map.

Ilustrasi proses konvolusi dengan dua filter, W0 dan W1. Image by CS231n[1]

Ukuran spasial dari output proses diatas dapat dihitung berdasarkan formula:
(N-F +2P)/S +1
dimana N adalah ukuran spasial (tinggi H1 = lebar W1) dari gambar input, F merupakan ukuran spasial filter, P adalah jumlah penambahan angka (umumnya nol) untuk menyesuaikan ukuran gambar, dan S adalah besaran pergeseran filter di setiap proses komputasi.

Contoh (seperti ilustrasi diatas):
Input gambar 5 x 5 x 3. Filter (F) 3 x 3 x 3. Dengan S = 2 dan P = 1, maka output (activation map) yang dihasilkan berukuran (5–3+2)/2 +1 = 3.

Proses ini diulang dengan beberapa filter berbeda, hingga menghasilkan “gambar” baru yang merupakan kumpulan dari activation maps.

Hasil dari Convolutional Layer

Across space, sharing the weight (parameter sharing). Across depth, sharing the input patch (local connectivity)

Beberapa hal yang perlu diperhatikan pada convolutional layer:

  • Ukuran ketebalan dari sebuah filter selalu mengikuti ketebalan/volume dari gambar input yang digunakan.
  • Tinggi (dan lebar) filter (F) pada umumnya berukuran ganjil. Secara intuisi, filter berukuran ganjil memberikan representasi yang lebih baik karena mencakup bagian kiri dan kanan yang “seimbang”.
  • Dalam sebuah convolutional layer, filter-filter yang digunakan berukuran sama, untuk kemudahan proses komputasi.
  • Jumlah filter (K) yang digunakan dalam sebuah convolutional layer adalah kelipatan 2 (powers of 2). Beberapa library memiliki subroutine khusus untuk komputasi kernel/dimensi berkelipatan 2 yang dapat meningkatkan efisiensi.
  • Besaran zero padding (P) umumnya menyesuaikan agar ukuran spasial dari output yang dihasilkan tetap sama dengan ukuran spasial input.
    (P= F-1/2)

Secara keseluruhan, bila input sebuah convolutional layer adalah gambar dengan ukuran W1 x H1 x D1, output dari layer tersebut adalah sebuah “gambar” baru dengan ukuran W2 x H2 x D2, dimana:

W2 = (W1-F + 2P) / S + 1 = H2

D2 = K

dimana:

  • K adalah jumlah filter yang digunakan.
  • F adalah ukuran spasial dari filter (lebar/tinggi).
  • S adalah stride, atau besar pergeseran filter dalam konvolusi.
  • P adalah padding, jumlah penambahan nol pada gambar.

2. Pooling Layer

Bagian berikutnya dari CNN adalah pooling layer. Fungsi dari pooling ini adalah untuk mereduksi input secara spasial (mengurangi jumlah parameter) dengan operasi down-sampling. Umumnya, metode pooling yang digunakan adalah max pooling atau mengambil nilai terbesar dari bagian tersebut. Namun terdapat metode pooling lain yang dapat digunakan seperti average pooling atau L2-norm pooling.

Image by Harsh Pokharna via Medium

Mirip seperti convolutional layer diatas, bila input ke pooling layer memiliki ukuran W1 x H1 x D1, maka ukuran output dari pooling layer tersebut adalah:

W2 = (W1-F) / S + 1 = H2

D2 = D1

*padding tidak umum dilakukan pada pooling layer, namun mungkin ditemukan.

Convolutional Neural Network

Secara umum, CNN adalah kumpulan dari convolutional layer, activation function, dan pooling layer. Seperti yang telah disampaikan di post sebelumnya, tidak ada aturan khusus mengenai letak maupun ukuran dari parameter yang digunakan.

Image by CS231n [1]

Semoga penjelasan diatas cukup memberikan gambaran tentang convolutional neural network. Sebagai referensi lanjutan, penulis menyarankan Andrej Karpathy’s CS231n Winter 2016 lectures. Selain itu, sebuah talk dari Fei Fei Li terkait perkembangan CNN dan aplikasinya pada tahun 2015 ini tetap menarik untuk ditonton dan dapat membuatmu tetap tertarik pada computer vision :)

References

  1. CS231n Convolutional Neural Networks [link]

--

--

Richard Dharmadi
Nodeflux

Operational-type product leader @ Pinhome, part-time PM instructor @ RevoU, ex-AI Research Scientist & Test Engineer.