Lensa ML

Cara CNN Melihat Dunia

Langkah 1 dari 6: Gambar Hanyalah Angka

Setiap pixel adalah nilai intensitas dalam grid yang bisa dibaca network

Resolusi grid: 8x8
4x48x8
8x8 grayscale008020022018030002018012080240120000004022010000040160240180200000030200140002060020220120008020014018020040000601802006000
Resolusi
8x8
Total pixel
64
Arahkan ke pixel
--
0
Hitam
128
Abu-abu sedang
255
Putih

Network membaca gambar sebagai grid angka: setiap pixel adalah intensitas dari 0 (hitam) sampai 255 (putih). Geser slider untuk melihat pengaruh resolusi pada detail gambar.

Geser slider Resolusi grid dari 4x4 ke 8x8 dan arahkan kursor ke pixel untuk membaca nilainya. Digit ini terdiri dari 8 × 8 = 64 angka. Foto berwarna punya tiga channel (merah, hijau, biru), jadi gambar seukuran ImageNet 224 × 224 berisi 224 × 224 × 3 = 150.528 angka. Dense layer yang menghubungkan semua angka itu ke 1.000 hidden unit butuh sekitar 150 juta weight. Convolution menghindari biaya itu dengan memakai ulang satu set kecil weight di seluruh gambar.

Langkah 2 dari 6: Filter yang Bergeser

Kernel kecil menyapu seluruh gambar dan menghitung dot product di setiap posisi

Posisi kernel: (0, 0), sel 1/36
Input (8x8)008020022018030002018012080240120000004022010000040160240180200000030200140002060020220120008020014018020040000601802006000xKernel 3x3-1-1-1000+1+1+1=-80setiap posisi mengisi satu sel di bawahFeature map (6x6)-8000000000000000000000000000000000000
Posisi
(0,0)
Dot product
-80
Sel terisi
1

Kernel 3x3 bergeser melintasi gambar, satu pixel setiap kali. Di setiap posisi, kernel mengalikan lalu menjumlahkan 9 nilai yang bertumpuk (dot product). Geser slider untuk memindahkan kernel, atau tekan Putar.

Geser slider Posisi kernel melewati ke-36 posisi, atau pakai Putar dan tombol langkah. Ukuran output adalah (input − kernel) / stride + 1. Gambar 8x8 dengan kernel 3x3 dan stride 1 menghasilkan (8 − 3) / 1 + 1 = 6, jadi ukuran map-nya 6x6. Padding berisi nol di tepi membuat ukuran output sama dengan input. 9 weight yang sama dipakai di setiap posisi (weight sharing). Library deep learning sebenarnya menghitung cross-correlation: kernel tidak dibalik seperti pada definisi convolution di buku teks.

Langkah 3 dari 6: Apa yang Dilihat Filter

Kernel yang berbeda mendeteksi tepi, sudut, dan tekstur, dan masing-masing menghasilkan satu feature map

Kernel-1-1-1000111→MentahReLU→Setelah ReLU0000011000601400000001020400000140280420490290500016036020000
Jumlah mentah
-340
Jumlah ReLU
2770
Sel aktif
15/36
ReLU(x) = max(0, x): nilai negatif dipangkas menjadi nol, yang tersisa hanya aktivasi positif

Setiap kernel adalah detektor feature. Klik pilihan di atas untuk membandingkan feature map yang dihasilkan. ReLU mengubah nilai negatif menjadi nol: di tempat filter tidak cocok, neuron tetap diam.

Klik Tepi Horiz, Tepi Vert, Pertajam, dan Buram, lalu bandingkan jumlah Sel aktif. Keempat kernel ini dirancang manual. Pada CNN yang sudah dilatih, tidak ada yang mengisi nilainya: kernel mulai dari nilai acak dan dipelajari lewat gradient descent. Layer sungguhan menjalankan puluhan atau ratusan kernel sekaligus, dan setiap kernel mencakup semua channel input, jadi kernel 3x3 pada gambar RGB punya 3 × 3 × 3 = 27 weight ditambah satu bias. 96 kernel layer pertama AlexNet akhirnya sangat mirip dengan detektor tepi dan bercak warna yang ditampilkan di sini.

Langkah 4 dari 6: Perkecil ke Intinya

Max pooling menyimpan sinyal terkuat dan membuang sisanya

Stride: 2, output: 3x3
Stride 1 (bertumpuk)Stride 2 (tidak bertumpuk)
Posisi pool: (0, 0), sel 1/9
Feature map 6x60000011000601400000001020400000140280420490290500016036020000->Window 2x20000=0max(0, 0, 0, 0)nilai maks tiap area 2x2 mengisi satu sel di bawah3x3 setelah pooling014011040014042049050
Ukuran input
6x6
Ukuran output
3x3
Pengurangan
75%

Max pooling menggeser window 2x2 dan hanya menyimpan nilai maksimum. Stride 1 membuat window bertumpuk (6x6 menjadi 5x5); stride 2 membagi dua ukuran map (6x6 menjadi 3x3). Nilai maksimum tetap bertahan saat ada pergeseran kecil di dalam window.

Atur slider Stride ke 1, lalu 2, dan telusuri setiap window. Pooling tidak punya weight untuk dipelajari, jadi biayanya hampir nol. Window 2x2 dengan stride 2 menyimpan satu dari empat nilai, sehingga layer berikutnya bisa melihat area gambar asli yang lebih luas dengan biaya komputasi yang sama. Average pooling mengambil rata-rata, bukan nilai maksimum. Banyak network modern, salah satunya ResNet, melakukan downsampling terutama dengan strided convolution dan diakhiri global average pooling, yang meringkas setiap feature map menjadi satu angka.

Langkah 5 dari 6: Layer Membangun Makna

Tepi → tekstur → bagian → objek: setiap layer melihat lebih banyak

Kedalaman network: 4 layer
1 layer4 layer
Tepi & garis32x32Layer 1tepi horizontaltepi vertikaldiagonalTekstur16x16Layer 2sudutlengkungpolaBagian8x8Layer 3matatelingarodaObjek4x4Layer 4wajah kucingras anjingjenis mobildari sederhana ke rumit: setiap layer dibangun di atas layer sebelumnya
Kedalaman
4
Feature map
256
Ukuran map
4x4
Kompleksitas
Penuh

CNN menumpuk blok conv + ReLU + pool. Geser slider untuk menambah layer: layer awal mendeteksi tepi sederhana, layer yang lebih dalam menggabungkannya menjadi tekstur, bagian, dan objek utuh.

Geser slider kedalaman dari 1 ke 4, atau klik salah satu layer. Angka dalam demo ini, 32 map berukuran 32x32 yang naik sampai 256 map berukuran 4x4, mengikuti aturan desain yang umum: gandakan jumlah channel setiap kali ukuran spasial menjadi separuh. Setiap layer juga melihat area gambar yang lebih luas, yang disebut receptive field. Dua convolution 3x3 yang ditumpuk mencakup area 5x5, dan tiga mencakup 7x7, dengan weight lebih sedikit daripada satu kernel besar. Itulah ide di balik VGG. Zeiler dan Fergus (2013) memvisualisasikan layer yang sudah dilatih dan menemukan urutan dari tepi ke bagian objek ini.

Langkah 6 dari 6: Dari Map ke Makna

Flatten map terakhir, lalu biarkan dense network memutuskan: gambar apa ini?

Feature mapFlatten1DDenseDensesoftmaxPrediksiKucing91%Anjing5%Burung3%Ikan1%
Kucing
91%
Anjing
5%
Burung
3%
Ikan
1%
Feature conv
Flatten 1D
Klasifikasi dense
Probabilitas softmax

Ganti input di atas untuk melihat prediksinya berubah. Feature map terakhir di-flatten, diteruskan ke dense layer, lalu softmax mengubah skor menjadi probabilitas. Nilai tertinggi adalah jawaban network: Kucing (91%).

Klik Foto Kucing, Foto Anjing, dan Foto Burung untuk mengganti input. Pada tumpukan layer di langkah sebelumnya, flatten 256 map berukuran 4x4 menghasilkan 4 × 4 × 256 = 4.096 angka untuk dense layer. Softmax mengubah skor akhir z menjadi probabilitas dengan e^(z_i) / Σ e^(z_j). Training meminimalkan cross-entropy, yaitu log negatif dari probabilitas untuk kelas yang benar, sehingga skor kucing 91% berbiaya −ln(0.91) ≈ 0.09. AlexNet memenangi ImageNet 2012 dengan top-5 error 15,3%, dan hasil itu memulai peralihan ke CNN dalam untuk computer vision.

Apa itu convolutional neural network (CNN)?

Convolutional neural network (CNN) adalah neural network yang mengolah data berbentuk grid, misalnya gambar, dengan menggeser filter kecil hasil belajar di atas input. Setiap filter menghitung dot product di setiap posisi dan menghasilkan feature map yang menandai tempat polanya muncul. Dengan menumpuk layer convolution, ReLU, dan pooling, network membangun pemahaman dari tepi sampai objek utuh, sebelum dense layer membuat prediksi akhir.

CNN adalah model standar untuk klasifikasi gambar, object detection, segmentation, dan pencitraan medis, dan juga dipakai pada spektrogram audio dan time series. Kekuatannya datang dari dua batasan: setiap filter hanya melihat area lokal yang kecil, dan weight filter yang sama dipakai ulang di setiap posisi. Dibanding dense network, jumlah weight berkurang berkali-kali lipat, dan sebuah pola bisa terdeteksi di mana pun ia muncul dalam gambar.

Ide utama

  • Convolution menggeser kernel kecil di atas input dan menghitung dot product di setiap posisi.
  • Weight sharing berarti satu kernel bisa mendeteksi polanya di mana saja dalam gambar.
  • Nilai kernel dipelajari lewat gradient descent, bukan dirancang manual.
  • ReLU mempertahankan respons positif dan mengubah sisanya menjadi nol.
  • Pooling mengecilkan feature map dan menambah toleransi terhadap pergeseran kecil.
  • Layer yang lebih dalam menggabungkan feature sederhana menjadi bagian dan objek, lalu dense layer melakukan klasifikasi.

Pertanyaan umum

Apa bedanya CNN dengan neural network biasa?

Layer biasa (fully connected) menghubungkan setiap input ke setiap output, sehingga mengabaikan posisi pixel satu sama lain. Convolutional layer menghubungkan setiap output hanya ke area lokal kecil dan memakai ulang weight yang sama di semua posisi. Jumlah parameternya jauh lebih sedikit, dan asumsi bahwa pixel yang berdekatan saling berkaitan sudah tertanam di dalamnya.

Untuk apa convolution 1x1?

Convolution 1x1 mencampur channel di setiap pixel tanpa melihat tetangganya. Ini dipakai untuk mengecilkan atau memperbesar jumlah channel dengan biaya murah, misalnya di bottleneck block ResNet dan modul Inception. Cara kerjanya seperti dense layer kecil yang diterapkan di setiap posisi.

Apakah CNN masih dipakai setelah ada vision transformer?

Ya. Vision transformer menyamai atau mengalahkan CNN kalau dilatih pada dataset yang sangat besar, tetapi CNN masih umum pada dataset yang lebih kecil, di ponsel dan perangkat embedded, dan sebagai backbone untuk detection dan segmentation. Banyak model saat ini menggabungkan keduanya, dengan convolution di layer awal dan attention di layer berikutnya.

Apakah CNN bisa dipakai untuk data selain gambar?

Bisa. Convolution 1D bergeser di sepanjang sequence, jadi cocok untuk gelombang audio, pembacaan sensor, dan teks. Convolution 3D menambahkan sumbu waktu atau kedalaman untuk video dan pemindaian medis. Data apa pun yang nilai-nilai berdekatannya saling berkaitan cocok untuk CNN.

Penjelasan terkait

Referensi

  1. LeCun, Bottou, Bengio & Haffner (1998), "Gradient-Based Learning Applied to Document Recognition", Proc. IEEE
  2. Krizhevsky, Sutskever & Hinton (2017), "ImageNet Classification with Deep Convolutional Neural Networks", Communications of the ACM
  3. Zeiler & Fergus (2013), "Visualizing and Understanding Convolutional Networks"
  4. Stanford CS231n, "Convolutional Neural Networks"

Terakhir diperbarui