Convolutional Neural Network

Created onDibuat pada
Last updated onTerakhir diperbarui
15 min read15 menit baca
IDCNNdeep-learningdata-science
ContributorsKontributor
Razi Rachman Widyadhana - @zirachw

Convolutional Neural Network (CNN) adalah jenis artificial neural network yang menggunakan operasi konvolusi (bukan perkalian matriks umum) pada setidaknya satu layer-nya. CNN dirancang khusus untuk data dengan topologi seperti grid (grid-like topology), seperti gambar.

#Link to this headingWhy CNN?

#Link to this headingAI, Machine Learning, dan Deep Learning

Hierarki: AI ⊃ Machine Learning ⊃ Deep Learning
Hierarki: AI ⊃ Machine Learning ⊃ Deep Learning
  • Artificial Intelligence: program yang dapat merasakan, bernalar, bertindak, dan beradaptasi.
  • Machine Learning: algoritma yang performanya meningkat seiring lebih banyak data.
  • Deep Learning: subset ML di mana jaringan saraf berlapis banyak belajar dari data dalam jumlah besar.

Deep Learning sekarang berkembang pesat karena tiga faktor: dataset yang lebih besar, hardware yang lebih baik (biaya per GB turun dari $1000 (1995) ke $0.02 (2017)), dan algoritma yang lebih cerdas.

#Link to this headingCurse of Dimensionality

Jumlah konfigurasi yang mungkin terjadi meningkat secara eksponensial seiring bertambahnya jumlah variabel/fitur. Ini menjadi masalah besar saat memproses gambar beresolusi tinggi dengan ANN biasa.

Curse of dimensionality: jumlah konfigurasi eksponensial terhadap dimensi
Curse of dimensionality: jumlah konfigurasi eksponensial terhadap dimensi

#Link to this headingUniversal Approximator Theorem

Satu hidden layer sudah cukup untuk merepresentasikan fungsi apapun, tetapi tidak efisien untuk mempelajarinya:

  • Shallow network mungkin membutuhkan lebar yang eksponensial
  • Shallow network lebih mudah overfit

Model yang lebih dalam (deeper) memberikan generalisasi lebih baik dibanding model yang lebih lebar (shallower) dengan jumlah parameter yang sama.

#Link to this headingJenis-Jenis Model Deep Learning

ModelKegunaan Utama
Convolutional NN (CNN)Visi komputer, klasifikasi gambar
Recurrent NN (RNN)Data sekuensial, teks, time-series
TransformersNLP, terjemahan, generasi teks
Generative Adversarial Network (GAN)Generasi gambar sintetis
AutoencoderKompresi, denoising, deteksi anomali

#Link to this headingSejarah CNN

CNN memiliki lima era perkembangan:

  1. Asal-usul: terinspirasi dari korteks visual biologis
  2. Stagnansi: kesulitan training (vanishing gradient, kurangnya data)
  3. Kebangkitan: AlexNet (2012) menang ImageNet Challenge
  4. Kebangkitan CNN: inovasi arsitektur pesat (VGG, GoogLeNet, ResNet)
  5. Akselerasi pesat: CNN menjadi algoritma deep learning paling luas digunakan

#Link to this headingCNN adalah ANN

CNN tetap merupakan ANN dengan:

  • Layer: input, hidden, output
  • Forward propagation: menghitung output
  • Neuron dengan learnable weights dan bias
  • Learning algorithm: backpropagation

Perbedaannya: CNN menggunakan operasi konvolusi (bukan perkalian matriks umum) di beberapa layer-nya, dengan local connectivity dan parameter sharing.

#Link to this headingTantangan ANN untuk Klasifikasi Gambar

ANN tradisional menghadapi dua masalah utama saat digunakan untuk klasifikasi gambar:

  1. Jumlah parameter sangat besar: Setiap piksel menjadi input terpisah. Gambar 224×224×3 menghasilkan ~150.000 input, jumlah parameter explodes.
  2. Kehilangan fitur spasial: Proses flattening n-dimensi ke 1-dimensi menghilangkan informasi tata letak spasial yang penting.
ANN kehilangan fitur spasial setelah flattening, jumlah parameter meledak
ANN kehilangan fitur spasial setelah flattening, jumlah parameter meledak

#Link to this headingMengapa CNN Unggul?

AspekANNCNN
Ekstraksi fitur spasialTidak bisa (flattening)Ya, otomatis melalui kernel
Skalabilitas untuk gambarTidak (param explosion)Ya (local connectivity + param sharing)
GeneralisasiLebih mudah overfitLebih baik
Feature extractionManual (perlu feature engineering)Otomatis (kernel dipelajari selama training)

#Link to this heading02: Local Connectivity & Parameter Sharing

#Link to this headingDampak terhadap Akurasi (LeCun, 1989)

Eksperimen LeCun (1989) pada data tulisan tangan menunjukkan dampak signifikan dari kedua teknik ini:

ArsitekturAkurasiJumlah Bobot
FFNN biasa87,0%3.240
Locally connected (tanpa sharing)88,5%1.226
Local + weight sharing98,4%1.060

Local connectivity + parameter sharing memberikan akurasi jauh lebih tinggi sekaligus jumlah parameter lebih sedikit.

#Link to this headingLocal/Sparse Connectivity

Pada ANN: setiap output unit berinteraksi dengan semua input unit, setiap pasangan input-output memiliki parameter tersendiri.

Pada CNN: setiap output unit hanya berinteraksi dengan sebagian kecil input unit melalui receptive field. Contoh: s3s_3 dengan kernel lebar 3 hanya bergantung pada x2,x3,x4x_2, x_3, x_4.

Local connectivity: s3 hanya dipengaruhi 3 input (receptive field), bukan semua input
Local connectivity: s3 hanya dipengaruhi 3 input (receptive field), bukan semua input

#Link to this headingInspirasi Biologis: Receptive Field

Hubel & Wiesel (1959) menemukan bahwa sel-sel pada korteks visual hanya sensitif terhadap area visual tertentu (receptive field), dan semua neuron ini terorganisasi dalam arsitektur kolumnar yang bersama-sama menghasilkan persepsi visual.

Receptive field biologis: neuron korteks visual sensitif terhadap area tertentu
Receptive field biologis: neuron korteks visual sensitif terhadap area tertentu

Untuk data berbentuk grid (gambar), setiap neuron pada CNN merespons kernel 3×3 piksel di sekitar posisinya, mengikuti prinsip receptive field ini.

#Link to this headingOperasi Konvolusi: Tanpa Parameter Sharing

Tanpa parameter sharing, setiap posisi dalam feature map memiliki kernel tersendiri. Contoh: input 5×55 \times 5, kernel 3×33 \times 3:

Konvolusi tanpa sharing: setiap posisi output punya kernel berbeda
Konvolusi tanpa sharing: setiap posisi output punya kernel berbeda

Contoh perhitungan (kernel di posisi tertentu):

a=252×1+246×0+207×(−1)+242×1+236×0+144×(−1)+…=44a = 252 \times 1 + 246 \times 0 + 207 \times (-1) + 242 \times 1 + 236 \times 0 + 144 \times (-1) + \ldots = 44

Jumlah bobot (tanpa sharing):

=Nneurons×(F×F×din+1)= N_\text{neurons} \times (F \times F \times d_\text{in} + 1)

Untuk 9 neuron output, filter 3×3×13 \times 3 \times 1: 9×(3×3×1+1)=909 \times (3 \times 3 \times 1 + 1) = 90 bobot.

#Link to this headingOperasi Konvolusi: Dengan Parameter Sharing

Dengan parameter sharing, satu kernel yang sama digeser ke seluruh posisi spasial input:

Konvolusi dengan sharing: kernel yang sama digunakan di semua posisi
Konvolusi dengan sharing: kernel yang sama digunakan di semua posisi

Contoh perhitungan (kernel [1,0,−1;1,0,−1;1,0,−1][1, 0, -1; 1, 0, -1; 1, 0, -1]):

284=251×1+246×0+207×(−1)+242×1+236×0+144×(−1)+244×1+228×0+102×(−1)284 = 251 \times 1 + 246 \times 0 + 207 \times (-1) + 242 \times 1 + 236 \times 0 + 144 \times (-1) + 244 \times 1 + 228 \times 0 + 102 \times (-1)

494=228×1+102×0+43×(−1)+214×1+59×0+52×(−1)+201×1+44×0+54×(−1)494 = 228 \times 1 + 102 \times 0 + 43 \times (-1) + 214 \times 1 + 59 \times 0 + 52 \times (-1) + 201 \times 1 + 44 \times 0 + 54 \times (-1)

Jumlah bobot (dengan sharing):

=K×(F×F×din+1)= K \times (F \times F \times d_\text{in} + 1)

Untuk 1 feature map, filter 3×3×13 \times 3 \times 1: 1×(3×3×1+1)=101 \times (3 \times 3 \times 1 + 1) = 10 bobot.

#Link to this headingParameter Sharing: Formula Lengkap

KondisiFormulaContoh (Net3, filter 3×3 ke 8×8 output, filter 5×5 ke 4×4 output)
Tanpa sharingNneurons×(F×F×din+1)N_\text{neurons} \times (F \times F \times d_\text{in} + 1)64×10+16×26+17×10=122664 \times 10 + 16 \times 26 + 17 \times 10 = 1226
Dengan sharingK×(F×F×din+1)K \times (F \times F \times d_\text{in} + 1)1×10+1×26+17×10=2061 \times 10 + 1 \times 26 + 17 \times 10 = 206

Di mana FF = ukuran filter, dind_\text{in} = kedalaman input, KK = jumlah filter/kernel.

#Link to this headingEfisiensi Komputasi

Perbandingan deteksi tepi pada gambar 320×280320 \times 280 dengan kernel 1×21 \times 2:

MetodeJumlah Operasi
FFNN (matrix multiplication)320×280×319×280>8×109320 \times 280 \times 319 \times 280 > 8 \times 10^9
Konvolusi kernel 1×21 \times 2319×280×3=267.960319 \times 280 \times 3 = 267.960

Konvolusi sekitar 60.000× lebih efisien dibanding FFNN untuk task yang sama.

#Link to this headingConvolutional Layer

#Link to this headingTerminologi

Satu convolutional layer (terminologi kompleks) terdiri dari tiga tahap yang bekerja berurutan:

Complex layer: Input → Convolution stage → Detector stage → Pooling stage → Next layer
Complex layer: Input → Convolution stage → Detector stage → Pooling stage → Next layer
TerminologiStruktur
Complex layerConv + Detector + Pooling = 1 layer
Simple layerConv, Detector, Pooling = 3 layer terpisah

#Link to this headingTahap Konvolusi (Convolution Stage)

Kernel bergerak melintasi input sehingga semua area tercakup. Kernel mengekstrak fitur spasial dari input (tepi, tekstur, pola) dan hasilnya disebut feature map.

Stride dan Padding:

Stride: jumlah piksel yang dilompati kernel, Padding: lapisan nol di tepi input
Stride: jumlah piksel yang dilompati kernel, Padding: lapisan nol di tepi input
  • Stride (SS): jumlah piksel yang dilompati kernel setiap langkah. Stride lebih besar menghasilkan output lebih kecil.
  • Padding (PP): lapisan nol yang ditambahkan di tepi input. Padding = 1 dengan stride = 1 mempertahankan ukuran spatial output sama dengan input.

Rumus dimensi output:

V=⌊W−F+2PS⌋+1V = \left\lfloor \frac{W - F + 2P}{S} \right\rfloor + 1

Di mana: WW = lebar/tinggi input, FF = ukuran kernel, PP = padding, SS = stride.

Contoh 1: Input 3×3×33 \times 3 \times 3, K=1K=1 filter 2×2×32 \times 2 \times 3, S=1S=1, P=0P=0:

V=3−2+01+1=2⇒Output: 2×2×1V = \frac{3 - 2 + 0}{1} + 1 = 2 \quad \Rightarrow \text{Output: } 2 \times 2 \times 1

Contoh 2: Input 3×3×23 \times 3 \times 2, K=3K=3 filter 2×2×22 \times 2 \times 2, S=1S=1, P=0P=0:

V=3−2+01+1=2⇒Output: 2×2×3V = \frac{3 - 2 + 0}{1} + 1 = 2 \quad \Rightarrow \text{Output: } 2 \times 2 \times 3

Contoh 3: Input 32×32×332 \times 32 \times 3, K=10K=10 filter 5×5×35 \times 5 \times 3, S=1S=1, P=0P=0:

V=32−5+01+1=28⇒Output: 28×28×10V = \frac{32 - 5 + 0}{1} + 1 = 28 \quad \Rightarrow \text{Output: } 28 \times 28 \times 10

Konvolusi multi-channel: Setiap kernel memiliki kedalaman sama dengan kedalaman input. Hasil konvolusi tiap channel dijumlahkan (bukan dipisah), lalu ditambah bias sehingga menghasilkan satu feature map per kernel.

Konvolusi input 2-channel dengan 3 filter 2×2×2: output 2×2×3
Konvolusi input 2-channel dengan 3 filter 2×2×2: output 2×2×3

Multi-filter: Semakin banyak convolutional layer, semakin kompleks fitur yang diekstrak, layer awal menangkap tepi/warna, sedangkan layer dalam menangkap pola/objek abstrak.

Multi-filter: lebih banyak conv layer mengekstrak fitur yang semakin kompleks
Multi-filter: lebih banyak conv layer mengekstrak fitur yang semakin kompleks

#Link to this headingTahap Detector (Detector Stage)

Menerapkan fungsi aktivasi non-linear (biasanya ReLU) pada hasil konvolusi. Tujuan: memperkenalkan non-linearitas karena konvolusi hanyalah operasi linear.

ReLU(x)=max⁡(0,x)\text{ReLU}(x) = \max(0, x)

Detector stage: hasil konvolusi negatif di-nol-kan oleh ReLU
Detector stage: hasil konvolusi negatif di-nol-kan oleh ReLU
Nilai KonvolusiSetelah ReLU
−9-900
32323232
−6-600
14141414

Di masa lalu digunakan tanh dan sigmoid, tetapi ReLU terbukti bekerja jauh lebih baik pada CNN modern.

#Link to this headingTahap Pooling (Pooling Stage)

Downsampling: mereduksi ukuran spasial feature map. Tujuan:

  • Mengurangi jumlah parameter dan koneksi
  • Mencegah overfitting
  • Membuat representasi lebih robust terhadap pergeseran kecil

Jenis pooling: max pooling (paling umum), average pooling, L2-norm pooling.

Rumus dimensi output:

V=⌊W−F+2PS⌋+1V = \left\lfloor \frac{W - F + 2P}{S} \right\rfloor + 1

Max pooling 2×2 dengan stride 2: setiap region 2×2 diambil nilai maksimumnya
Max pooling 2×2 dengan stride 2: setiap region 2×2 diambil nilai maksimumnya

Contoh: Max pooling 2×22 \times 2, stride=2 pada feature map 4×44 \times 4 menghasilkan output 2×22 \times 2 (setiap region non-overlap diambil nilai maksimumnya).

#Link to this headingCNN Architecture

#Link to this headingStruktur Umum

Input → [Conv + ReLU + Pooling]× → Flatten → [FC]× → Output

Setelah serangkaian convolutional layer, feature map di-flatten menjadi vektor 1D, kemudian diproses oleh fully connected (FC) layers untuk klasifikasi.

Arsitektur umum CNN: Conv+ReLU+Pooling layers diikuti Flatten dan FC layers
Arsitektur umum CNN: Conv+ReLU+Pooling layers diikuti Flatten dan FC layers

#Link to this headingFlattening

Flattening mengubah feature map multidimensi menjadi vektor 1D agar dapat diproses oleh FC layer.

Flattening: feature map 3D di-reshape menjadi vektor 1D untuk input FC layer
Flattening: feature map 3D di-reshape menjadi vektor 1D untuk input FC layer

Contoh: Feature map 4×4×164 \times 4 \times 16 diubah menjadi vektor panjang 4×4×16=2564 \times 4 \times 16 = 256.

#Link to this headingContoh: LeNet-5 (LeCun, 1998)

LeNet-5 adalah arsitektur CNN awal untuk pengenalan digit tulisan tangan (MNIST).

Arsitektur LeNet-5: Input 32×32 → C1 → S2 → C3 → S4 → FC → Output
Arsitektur LeNet-5: Input 32×32 → C1 → S2 → C3 → S4 → FC → Output

Layer C1: Convolution Stage:

LeNet-5 C1: 6 filter 5×5, feature map 28×28×6, 156 trainable parameters
LeNet-5 C1: 6 filter 5×5, feature map 28×28×6, 156 trainable parameters
  • K=6K=6 filter 5×55 \times 5, S=1S=1, P=0P=0
  • V=32−5+01+1=28⇒V = \frac{32 - 5 + 0}{1} + 1 = 28 \Rightarrow feature map 28×28×628 \times 28 \times 6
  • Parameter: 6×(5×5+1)=1566 \times (5 \times 5 + 1) = \mathbf{156}
  • Koneksi: 28×28×(5×5+1)×6=122.30428 \times 28 \times (5 \times 5 + 1) \times 6 = 122.304

Layer S2: Pooling Stage:

LeNet-5 S2: avg pool 2×2 stride=2, feature map 14×14×6, 0 parameter (Keras)
LeNet-5 S2: avg pool 2×2 stride=2, feature map 14×14×6, 0 parameter (Keras)
  • Avg pool 2×22 \times 2, S=2S=2, P=0P=0 (non-overlapping)
  • V=28−2+02+1=14⇒V = \frac{28 - 2 + 0}{2} + 1 = 14 \Rightarrow feature map 14×14×614 \times 14 \times 6
  • Parameter: 00 (Keras) / 6×2=126 \times 2 = 12 (metode LeCun, ada learnable scale+bias per channel)
  • Koneksi: 14×14×(2×2+1)×6=5.88014 \times 14 \times (2 \times 2 + 1) \times 6 = 5.880

Layer C3: Convolution Stage:

LeNet-5 C3: 16 filter 5×5×6, feature map 10×10×16, 2416 atau 1516 parameter
LeNet-5 C3: 16 filter 5×5×6, feature map 10×10×16, 2416 atau 1516 parameter
  • K=16K=16 filter 5×55 \times 5, S=1S=1, P=0P=0
  • V=14−5+01+1=10⇒V = \frac{14 - 5 + 0}{1} + 1 = 10 \Rightarrow feature map 10×10×1610 \times 10 \times 16
  • Parameter (semua feature map): 16×(5×5×6+1)=241616 \times (5 \times 5 \times 6 + 1) = \mathbf{2416}
  • Parameter (subset LeCun, setiap filter menerima subset 3–4 dari 6 channel): 5×5×(6×3+9×4+1×6)+16=15165 \times 5 \times (6 \times 3 + 9 \times 4 + 1 \times 6) + 16 = \mathbf{1516}

Ringkasan LeNet-5:

LeNet-5 model summary: jumlah parameter per layer
LeNet-5 model summary: jumlah parameter per layer
LayerDetailFeature Map#Param (Keras)
C1 (Conv)6 filter 5×55 \times 5, S=1S=1, P=0P=028×28×628 \times 28 \times 6156156
S2 (Pool)Avg pool 2×22 \times 2, S=2S=214×14×614 \times 14 \times 600
C3 (Conv)16 filter 5×55 \times 5, S=1S=1, P=0P=010×10×1610 \times 10 \times 1624162416
S4 (Pool)Avg pool 2×22 \times 2, S=2S=25×5×165 \times 5 \times 1600
Flatten40040000
FC (120)(400+1)×120(400 + 1) \times 12048.12048.120
FC (84)(120+1)×84(120 + 1) \times 8410.16410.164
Output (10)(84+1)×10(84 + 1) \times 10850850

Implementasi (Keras):

from keras.models import Sequential
from keras import layers
 
model = Sequential()
model.add(layers.Conv2D(filters=6, kernel_size=(5,5), activation='relu', input_shape=(32,32,1)))
model.add(layers.AveragePooling2D(pool_size=(2,2)))
model.add(layers.Conv2D(filters=16, kernel_size=(5,5), activation='relu'))
model.add(layers.AveragePooling2D(pool_size=(2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(units=120, activation='relu'))
model.add(layers.Dense(units=84, activation='relu'))
model.add(layers.Dense(units=10, activation='softmax'))

#Link to this headingArsitektur Umum Lainnya

Timeline arsitektur CNN: LeNet-5 (1998) → AlexNet (2012) → VGG → ResNet → dst.
Timeline arsitektur CNN: LeNet-5 (1998) → AlexNet (2012) → VGG → ResNet → dst.

Perkembangan arsitektur CNN dari 1989 hingga sekarang: LeNet, AlexNet, VGG, GoogLeNet/Inception, ResNet, dan seterusnya.

#Link to this headingVGG16 (Simonyan & Zisserman, 2015)

Arsitektur VGG16: 13 conv layer 3×3, 3 FC layer, 16 layer total berbobot
Arsitektur VGG16: 13 conv layer 3×3, 3 FC layer, 16 layer total berbobot

VGG16 menggunakan 13 conv layer berukuran 3×33 \times 3 (dengan padding=same untuk mempertahankan dimensi) dan 3 FC layer. Total: 138 juta parameter.

model = Sequential()
model.add(Conv2D(input_shape=(224,224,3), filters=64, kernel_size=(3,3),
                 padding="same", activation="relu"))
model.add(Conv2D(filters=64, kernel_size=(3,3), padding="same", activation="relu"))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))
model.add(Conv2D(filters=128, kernel_size=(3,3), padding="same", activation="relu"))
model.add(Conv2D(filters=128, kernel_size=(3,3), padding="same", activation="relu"))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))
# ... (dst: 256x3, 512x3, 512x3 conv blocks + 3 FC)

#Link to this headingBackpropagation for CNN

Backpropagation CNN mengikuti prinsip yang sama dengan FFNN, tetapi menyesuaikan untuk operasi konvolusi, ReLU, dan max-pooling.

#Link to this headingGambaran Umum

Backpropagation CNN: forward → hitung error → backward → update K dan W
Backpropagation CNN: forward → hitung error → backward → update K dan W

Forward propagation:

net_c=X∗KH=fc(net_c)net=HWO=f(net)E=12∑k(tk−ok)2\text{net\_c} = X * K \qquad H = f_c(\text{net\_c}) \qquad \text{net} = HW \qquad O = f(\text{net}) \qquad E = \frac{1}{2} \sum_k (t_k - o_k)^2

Update bobot kernel KK dan bobot FC ww:

K←K−η∂Ed∂K=K−η[∂Ed∂netj⋅∂netj∂H⋅∂H∂net_c⋅∂net_c∂K]K \leftarrow K - \eta \frac{\partial E^d}{\partial K} = K - \eta \left[ \frac{\partial E^d}{\partial \text{net}_j} \cdot \frac{\partial \text{net}_j}{\partial H} \cdot \frac{\partial H}{\partial \text{net\_c}} \cdot \frac{\partial \text{net\_c}}{\partial K} \right]

wji←wji−η∂Ed∂wji=wji−η[∂Ed∂oj⋅∂oj∂netj⋅∂netj∂wji]w_{ji} \leftarrow w_{ji} - \eta \frac{\partial E^d}{\partial w_{ji}} = w_{ji} - \eta \left[ \frac{\partial E^d}{\partial o_j} \cdot \frac{\partial o_j}{\partial \text{net}_j} \cdot \frac{\partial \text{net}_j}{\partial w_{ji}} \right]

#Link to this headingBackpropagation untuk ReLU

Backpropagation ReLU: gradient diteruskan jika input > 0, dinolkan jika input ≤ 0
Backpropagation ReLU: gradient diteruskan jika input > 0, dinolkan jika input ≤ 0

Turunan ReLU:

∂ReLU(x)∂x={1jika x>00jika x≤0\frac{\partial \text{ReLU}(x)}{\partial x} = \begin{cases} 1 & \text{jika } x > 0 \\ 0 & \text{jika } x \leq 0 \end{cases}

Error yang di-backprop melalui ReLU: diteruskan jika input aslinya > 0, dinolkan jika input aslinya ≤ 0.

#Link to this headingBackpropagation untuk Max-Pooling

Backpropagation max-pooling: gradient diteruskan hanya ke posisi nilai maksimum
Backpropagation max-pooling: gradient diteruskan hanya ke posisi nilai maksimum

Max-pooling meneruskan gradient hanya ke posisi yang nilai-nya diambil (nilai maksimum dalam window). Posisi lain mendapat gradient = 0.

∂pool(x)∂xi={1jika xi=max⁡(window)0lainnya\frac{\partial \text{pool}(x)}{\partial x_i} = \begin{cases} 1 & \text{jika } x_i = \max(\text{window}) \\ 0 & \text{lainnya} \end{cases}

Ini diimplementasikan dengan argmax mask yang dicatat saat forward pass dan digunakan saat backward pass.

#Link to this headingContoh: Arsitektur CNN Lengkap

Untuk arsitektur: Input →conv\xrightarrow{\text{conv}} ReLU →max pool\xrightarrow{\text{max pool}} Flatten →W2\xrightarrow{W_2} ReLU →W3\xrightarrow{W_3} Softmax ke Output

Forward propagation:

X1=X∗W1+B1⇒ReLU1=ReLU(X1)X_1 = X * W_1 + B_1 \quad \Rightarrow \quad \text{ReLU}_1 = \text{ReLU}(X_1) X2=MaxPool(ReLU1)⇒X3=X2,flat⋅W2+B2⇒ReLU2=ReLU(X3)X_2 = \text{MaxPool}(\text{ReLU}_1) \quad \Rightarrow \quad X_3 = X_{2,\text{flat}} \cdot W_2 + B_2 \quad \Rightarrow \quad \text{ReLU}_2 = \text{ReLU}(X_3) X4=ReLU2⋅W3+B3⇒Output=Softmax(X4)X_4 = \text{ReLU}_2 \cdot W_3 + B_3 \quad \Rightarrow \quad \text{Output} = \text{Softmax}(X_4)

Backward propagation dengan softmax + cross-entropy loss E=−log⁡(ptarget)E = -\log(p_\text{target}):

∂Ed∂netj=pj−1[j=target]\frac{\partial E^d}{\partial \text{net}_j} = p_j - \mathbf{1}[j = \text{target}]

Di mana pjp_j adalah probabilitas output softmax untuk kelas jj. Gradient ini kemudian di-backprop:

  1. Melalui FC layer W3W_3: ∂E∂W3\frac{\partial E}{\partial W_3}
  2. Melalui ReLU: masker berdasarkan tanda
  3. Melalui FC layer W2W_2: ∂E∂W2\frac{\partial E}{\partial W_2}
  4. Melalui flatten: reshape gradient
  5. Melalui max-pooling: masker argmax
  6. Melalui ReLU konvolusi: masker berdasarkan tanda
  7. Ke kernel W1W_1: ∂E∂W1\frac{\partial E}{\partial W_1}