Convolutional neural network, atau CNN, adalah jaringan saraf yang mencari pola-pola lokal kecil lalu menggabungkannya menjadi pola yang lebih besar. Pada gambar, layer awal sering mendeteksi tepi atau sudut, layer tengah mendeteksi tekstur atau bagian, dan layer yang lebih dalam memakai sinyal itu untuk mendukung prediksi akhir.

Gagasan utamanya adalah weight sharing. Alih-alih mempelajari bobot terpisah untuk setiap pasangan lokasi piksel, CNN menggunakan kembali filter kecil yang sama di banyak posisi. Ini membuatnya jauh lebih murah daripada dense layer pada gambar mentah dan membantu mendeteksi jenis pola yang sama di lebih dari satu tempat.

Apa yang dilakukan convolutional neural network

Dalam fully connected layer, setiap output bisa bergantung pada semua nilai input sekaligus. CNN lebih terstruktur. CNN menggunakan kernel kecil, yang sering disebut filter, yang melihat satu patch lokal pada satu waktu.

Untuk input satu kanal xx dan kernel k×kk \times k bernama KK, satu entri output dapat ditulis sebagai

yi,j=m=0k1n=0k1Km,nxi+m,j+n.y_{i,j} = \sum_{m=0}^{k-1} \sum_{n=0}^{k-1} K_{m,n} x_{i+m,j+n}.

Ini adalah gagasan jumlah berbobot lokal di balik convolutional layer. Dalam banyak library machine learning, operasi yang diimplementasikan secara teknis adalah cross-correlation, bukan konvolusi matematis yang dibalik, tetapi intuisi praktisnya sama: kernel memindai input dan menghasilkan feature map.

Feature map memberi tahu Anda di mana pola yang dipelajari muncul dengan kuat.

Mengapa filter bersama membantu

Jika tepi vertikal yang sama muncul di dekat sudut kiri atas gambar atau di dekat tengah, biasanya kita ingin model tetap menyadarinya. CNN mendukung hal itu dengan menggunakan kembali parameter filter yang sama di berbagai posisi.

Ini memiliki dua efek praktis:

  • Ini mengurangi jumlah parameter yang dipelajari dibandingkan dense layer pada gambar mentah.
  • Ini mendorong jaringan untuk mendeteksi pola lokal yang berulang, bukan menghafal satu lokasi tetap.

Penggunaan ulang itu adalah salah satu alasan CNN menjadi efektif untuk tugas-tugas gambar.

Seperti apa arsitektur dasar CNN

CNN dasar sering mengikuti pola ini:

  1. convolution layer
  2. aktivasi seperti ReLU
  3. pooling atau downsampling opsional
  4. lebih banyak blok konvolusi
  5. layer prediksi akhir

Layer awal biasanya menangkap struktur lokal yang sederhana. Layer yang lebih dalam menggabungkan respons tersebut menjadi fitur yang lebih besar dan lebih spesifik terhadap tugas.

Pooling tidak wajib, tetapi ketika digunakan, pooling memperkecil dimensi spasial sehingga layer berikutnya dapat bekerja dengan representasi yang lebih ringkas. Contoh yang umum adalah max pooling, yang mempertahankan nilai terbesar di setiap wilayah kecil.

Jika stride adalah 11 dan padding adalah 00, maka input n×nn \times n dengan kernel k×kk \times k menghasilkan output (nk+1)×(nk+1)(n-k+1) \times (n-k+1). Aturan ukuran ini berguna saat Anda memeriksa apakah sebuah contoh hitungan masuk akal.

Contoh lengkap: bagaimana feature map CNN dibuat

Ambil gambar input 4×44 \times 4 ini:

X=[3300330000330033]X = \begin{bmatrix} 3 & 3 & 0 & 0 \\ 3 & 3 & 0 & 0 \\ 0 & 0 & 3 & 3 \\ 0 & 0 & 3 & 3 \end{bmatrix}

Gunakan kernel 2×22 \times 2 ini:

K=[1111]K = \begin{bmatrix} 1 & 1 \\ 1 & 1 \end{bmatrix}

Asumsikan stride 11 dan tanpa padding. Karena input berukuran 4×44 \times 4 dan kernel berukuran 2×22 \times 2, output harus berukuran 3×33 \times 3. Setiap entri output adalah jumlah dari satu patch 2×22 \times 2 karena setiap entri kernel bernilai 11.

Nilai output kiri atas adalah

y1,1=3(1)+3(1)+3(1)+3(1)=12.y_{1,1} = 3(1) + 3(1) + 3(1) + 3(1) = 12.

Patch satu langkah ke kanan adalah

[3030],\begin{bmatrix} 3 & 0 \\ 3 & 0 \end{bmatrix},

jadi

y1,2=3+0+3+0=6.y_{1,2} = 3 + 0 + 3 + 0 = 6.

Jika dihitung untuk semua posisi yang valid, diperoleh

Y=[12606660612].Y = \begin{bmatrix} 12 & 6 & 0 \\ 6 & 6 & 6 \\ 0 & 6 & 12 \end{bmatrix}.

Output ini adalah feature map. Nilai yang besar menunjukkan di mana kernel menemukan kecocokan yang kuat. Di sini filter merespons paling kuat di tempat muncul blok terang penuh berukuran 2×22 \times 2.

Jika sekarang Anda menerapkan ReLU, tidak ada yang berubah karena semua entri sudah nonnegatif. Jika kemudian Anda menggunakan max pooling 2×22 \times 2 dengan stride 11, output hasil pooling menjadi

[126612].\begin{bmatrix} 12 & 6 \\ 6 & 12 \end{bmatrix}.

Ini tidak menciptakan informasi baru. Operasi ini mempertahankan respons terkuat yang berdekatan dan mengurangi grid spasial.

Contoh ini sederhana, tetapi menunjukkan mekanisme intinya dengan jelas: sebuah filter bergeser, menghitung jumlah berbobot lokal, dan membuat peta tentang di mana suatu pola muncul.

Apa yang dipelajari CNN selama pelatihan

Kernel di atas dipilih secara manual, tetapi dalam CNN nyata nilai filter dipelajari dari data. Pelatihan menyesuaikan nilai-nilai itu agar feature map yang dihasilkan menjadi berguna untuk tugas yang dikerjakan.

Jika tugasnya adalah klasifikasi gambar, jaringan mempelajari filter yang membantu memisahkan kelas. Jika tugasnya adalah segmentasi atau deteksi, layer berikutnya dilatih untuk output tersebut. Mekanisme dasarnya tetap sama: forward pass, loss, backpropagation, pembaruan parameter.

Kesalahan umum saat mempelajari CNN

Mengira CNN hanya berarti "pengklasifikasi gambar"

Gambar adalah contoh standar, tetapi CNN sebenarnya berkaitan dengan struktur lokal dan filter bersama. Jika nilai-nilai yang berdekatan itu penting, gagasan yang sama bisa berguna di luar gambar.

Menganggap pooling selalu diperlukan

Pooling itu umum, bukan universal. Beberapa arsitektur mengurangi ukuran spasial dengan konvolusi ber-stride, dan beberapa mempertahankan lebih banyak detail spasial lebih lama.

Mengabaikan stride dan padding

Ukuran feature map bergantung pada pilihan ini. Jika Anda mengubah stride atau padding, Anda mengubah bukan hanya bentuk output, tetapi juga lingkungan lokal mana yang bisa dilihat setiap unit.

Menganggap layer ini hanya sebagai rumus

Rumus konvolusi memang penting, tetapi arsitekturnya juga penting. CNN bekerja karena konvolusi, aktivasi, penumpukan layer, dan pelatihan semuanya bekerja bersama.

Kapan convolutional neural network berguna

CNN banyak digunakan dalam tugas computer vision seperti klasifikasi gambar, deteksi objek, dan segmentasi. CNN juga muncul dalam beberapa pengaturan pemrosesan sinyal dan sekuens ketika pola lokal memiliki makna.

CNN sangat berguna ketika input memiliki struktur grid atau lingkungan bertetangga yang terurut dengan jelas. Jika kondisi itu lemah, arsitektur lain mungkin lebih cocok.

Model mental yang membuat CNN lebih mudah dipahami

Bayangkan CNN sebagai pendeteksi pola yang mulai dari hal kecil lalu menjadi lebih abstrak seiring bertambahnya kedalaman. Satu layer bertanya, "Apakah pola kecil ini muncul di sini?" Layer berikutnya bertanya, "Apakah pola-pola sederhana ini bergabung menjadi sesuatu yang lebih bermakna?"

Itulah sebabnya CNN lebih mudah dipahami ketika Anda fokus pada feature map, bukan hanya pada kata "convolution".

Coba versi Anda sendiri

Pertahankan input yang sama, tetapi ubah kernel menjadi

[1111].\begin{bmatrix} 1 & -1 \\ 1 & -1 \end{bmatrix}.

Hitung ulang feature map dan lihat wilayah mana yang sekarang menghasilkan respons positif atau negatif yang besar. Perubahan kecil itu membuat jauh lebih jelas bagaimana filter yang berbeda mendeteksi pola yang berbeda.

Butuh bantuan mengerjakan soal?

Unggah pertanyaanmu dan dapatkan solusi terverifikasi langkah demi langkah dalam hitungan detik.

Buka GPAI Solver →