CNN sering dijelaskan lewat gambar. Ada kernel kecil yang menyapu piksel, lalu muncullah feature map. Intuisinya bagus, tetapi untuk benar-benar memahami CNN, kita perlu melihat angka-angkanya. Artikel ini mengikuti satu forward propagation dengan dataset CIFAR-10.
Kenapa perlu melihat matematikanya
Setiap layer CNN sebenarnya menjalankan operasi sederhana. Ada perkalian, penjumlahan, pemilihan nilai maksimum, dan perkalian matriks. Ukuran tensor di setiap tahap juga bisa dihitung. Setelah kita terbiasa menghitungnya, kita tidak lagi melihat CNN sebagai kotak hitam, melainkan rangkaian transformasi yang jelas asal dan tujuannya.
Contoh: CIFAR-10 dan arsitektur CNN
CIFAR-10 berisi 60.000 citra berwarna berukuran 32 x 32 piksel dengan tiga channel, yaitu merah, hijau, dan biru. Citra tersebut masuk ke sepuluh kelas seperti pesawat, mobil, burung, kucing, dan seterusnya. Kita pakai dataset ini karena ukurannya kecil, tetapi tetap menuntut model belajar pola visual yang nyata.
Arsitektur CNN pada contoh ini dibentuk menjadi blok. Satu blok terdiri dari layer konvolusi, fungsi aktivasi ReLU, dan layer pooling. Berikut susunan lengkapnya.
- Input. Tensor 32 x 32 x 3.
- Blok 1. Conv1 dengan 32 filter, ReLU, lalu max pooling 2 x 2.
- Blok 2. Conv2 dengan 64 filter, ReLU, lalu max pooling 2 x 2.
- Flatten. Tensor tiga dimensi diubah menjadi vektor.
- Fully connected. 512 neuron dengan ReLU.
- Output. 10 neuron dengan softmax.

Konvolusi: perkalian elemen lalu dijumlahkan
Layer konvolusi pertama memakai 32 filter. Setiap filter adalah kernel berukuran 3 x 3, tetapi karena input punya tiga channel, ukuran sebenarnya adalah 3 x 3 x 3. Kernel bergeser dengan stride 1 dan padding 1, sehingga resolusi gambar tetap 32 x 32.
Operasi konvolusi bekerja seperti ini. Kernel ditempelkan ke satu area input, setiap nilai kernel dikalikan dengan nilai input yang sejajar, lalu semua hasil dijumlahkan menjadi satu angka. Angka itu mengisi satu sel feature map.

Pada input tiga dimensi, cara kerjanya sama. Kernel berbentuk seperti balok 3 x 3 x 3. Ia meluncur di sepanjang tinggi dan lebar input, kemudian untuk setiap posisi dilakukan perkalian dan penjumlahan sekaligus pada seluruh kedalaman channel.

Satu filter yang selesai meluncur menghasilkan satu feature map. Karena kita memakai 32 filter, proses meluncur diulang 32 kali. Hasilnya ditumpuk menjadi tensor 32 x 32 x 32. Nilai di dalam kernel adalah parameter yang bisa berubah saat training, dan awalnya sering diinisialisasi secara acak.
ReLU: membuang nilai negatif
Setelah konvolusi, tensor masuk ke fungsi aktivasi ReLU. Untuk setiap angka di dalam tensor, ReLU menghitung max(0, x). Nilai negatif menjadi nol, sedangkan nilai positif tetap. Fungsi ini menambah nonlinearitas agar CNN bisa belajar pola yang tidak hanya linier.
Max pooling: mengambil nilai terbesar
Pooling tidak menambah parameter. Ia hanya merangkum area kecil. Pada contoh ini kita memakai max pooling dengan jendela 2 x 2 dan stride 2. Dari setiap jendela, diambil nilai maksimumnya. Hasilnya, tinggi dan lebar tensor menjadi setengahnya, dari 32 x 32 menjadi 16 x 16.
Perhatikan perbedaannya dengan konvolusi. Kernel konvolusi menembus seluruh kedalaman input. Pooling justru bekerja per feature map. Jendela 2 x 2 diulang secara terpisah untuk masing-masing dari 32 feature map. Karena itu kedalaman tetap 32, dan output blok pertama berukuran 16 x 16 x 32.

Blok 2: memperdalam representasi
Blok kedua mengulang proses yang sama, tetapi dengan 64 filter. Kernel tetap 3 x 3, dan karena input sekarang memiliki kedalaman 32, ukuran kernel menjadi 3 x 3 x 32. Konvolusi dengan stride 1 dan padding 1 mempertahankan ukuran 16 x 16, lalu pooling menurunkannya menjadi 8 x 8.
Dengan 64 filter, kita mendapatkan 64 feature map. Setelah max pooling, output blok kedua adalah tensor 8 x 8 x 64. Pada titik ini CNN sudah memegang representasi yang lebih dalam dan lebih abstrak dari citra awal.
Flatten: mengubah tensor menjadi vektor
Sebelum masuk ke jaringan fully connected, tensor tiga dimensi harus diratakan. Layer flatten menyusun semua elemen menjadi satu vektor. Ukuran vektor sama dengan jumlah elemen pada tensor, yaitu 8 x 8 x 64 = 4.096.
Secara umum, ukuran vektor dihitung dengan mengalikan jumlah feature map dengan tinggi dan lebarnya. Angka 4.096 inilah yang menjadi jumlah neuron input pada fully connected layer.

Fully connected: perkalian matriks
Fully connected layer di contoh ini memiliki 512 neuron. Matriks bobot berukuran 512 x 4.096, dan bias berukuran 512 x 1. Vektor hasil flatten yang berukuran 4.096 dikalikan dengan matriks bobot, lalu ditambahkan bias. Outputnya berupa vektor berukuran 512.
Setelah itu, ReLU diterapkan sekali lagi. Inilah transformasi yang sama seperti pada multilayer perceptron, tempat CNN menafsirkan kombinasi fitur yang sudah ditemukan oleh blok konvolusi.
Output layer dan softmax
Layer terakhir menghubungkan 512 neuron ke 10 kelas. Matriks bobotnya berukuran 10 x 512, dan biasnya berukuran 10. Perkalian dan penjumlahan matriks menghasilkan vektor berukuran 10, satu angka untuk setiap kelas.
Vektor tersebut kemudian dilewatkan ke softmax. Softmax mengubah skor mentah menjadi distribusi probabilitas, sehingga angka-angka itu berjumlah satu dan mudah dibaca. Kelas dengan probabilitas tertinggi menjadi prediksi CNN untuk citra tersebut.

Setelah forward propagation
Satu forward propagation selesai ketika sebuah citra berhasil menjadi prediksi kelas. Proses ini diulang untuk semua citra dalam satu batch. Setelah itu, loss dihitung dari perbedaan antara prediksi dan label, lalu backpropagation memperbarui parameter. Kernel konvolusi ikut berubah selama proses ini, dan di situlah CNN benar-benar belajar.
Ukuran tensor di setiap layer bisa dilacak dari operasi sebelumnya. Setiap operasi punya alasan, mulai dari menangkap pola lokal sampai menggabungkan fitur menjadi keputusan akhir.
Artikel ini diadaptasi dari AI But Simple Issue #20 karya Edwin Dong. Versi aslinya bisa dibuka di newsletter.aibutsimple.com.
Jalankan konvolusi pada matriks piksel sendiri
Edit pixel, pilih kernel, lalu lihat feature map dihitung langsung di kanvas.
Buka Lab CNN →