Lensa ML

Cara Kerja Skip Connection

Langkah 1 dari 6: Masalah Deep Network

Kenapa menambah layer justru menurunkan kinerja

Kedalaman Network: 20 layer
0%10%20%30%40%50%60%EpochError %Train (20L)Test (20L)Acuan 20L

Kedalaman

20L

Train err

4.8%

Test err

6.7%

Degradasi

0.0%

Dengan 20 layer atau kurang, training berjalan baik. Training error dan test error sama-sama turun ke nilai yang rendah. Ini titik acuannya.

Geser slider Kedalaman Network dari 10 ke 56 layer. Kurvanya mengikuti Gambar 1 dari He et al. (2015): plain network 56 layer punya training error dan test error lebih tinggi pada CIFAR-10 dibanding yang 20 layer. Argumen makalah itu berupa konstruksi: salin network 20 layer, jadikan 36 layer tambahannya identity mapping, dan network yang lebih dalam akan menyamai yang dangkal. Jadi solusi yang setidaknya sama bagusnya itu ada, tetapi gradient descent gagal menemukannya. Plain network tersebut sudah memakai batch normalization, jadi vanishing gradient saja tidak menjelaskan selisih ini.

Langkah 2 dari 6: Skip Connection

F(x) + x: ide utamanya

Input x: 0.50
xF(x)identity (skip)+F(x) + x= 1.200= 0.700

Input x

0.50

F(x)

0.700

F(x) + x

1.200

Skip connection menambahkan x langsung ke F(x). Walaupun F(x) tidak mempelajari apa pun yang berguna, output-nya tetap x: identity mapping.

Geser slider Input x dari 0 ke 2, lalu bandingkan F(x) dengan F(x) + x. Di ResNet sungguhan, x adalah satu feature map utuh dan F terdiri dari dua atau tiga convolution layer dengan batch normalization dan ReLU. Penjumlahannya per elemen, jadi F(x) harus berukuran sama dengan x. Ketika sebuah block membagi dua ukuran spasial atau menggandakan channel, shortcut-nya memakai convolution 1x1 dengan stride 2 agar ukurannya cocok. Ini disebut projection shortcut. Identity skip sama sekali tidak menambah parameter.

Langkah 3 dari 6: Residual Learning

Mempelajari selisihnya lebih mudah

Output target: 1.00
1.00Target0.80Identity (x)0.20ResidualF(x) = target − xF(x) = 0.20(residual kecil!)

Target

1.00

Identity (x)

0.80

Residual

0.20

Network hanya perlu mempelajari selisih kecil (residual) antara target dan identity. Mempelajari koreksi kecil jauh lebih mudah daripada mempelajari seluruh pemetaan.

Geser slider Output target dari 0 ke 2. Input-nya tetap x = 0.8, jadi target 1,0 hanya butuh F(x) = 0.2. Weight dimulai dari nilai kecil, jadi F(x) mulai mendekati nol dan residual block yang baru berperilaku hampir seperti identity. Setiap block lalu hanya perlu mempelajari koreksi. Beberapa resep training melangkah lebih jauh: skala batch norm terakhir di tiap block diatur ke nol, sehingga setiap block benar-benar menjadi identity di awal. Cara ini mempercepat training ResNet yang sangat dalam. Residual stream di Transformer mengikuti alasan yang sama.

Langkah 4 dari 6: Gradient Highway

Kenapa gradient tetap bertahan di ResNet

Kedalaman Network: 8 layer
Tanpa skipDengan skip1234567812345678

Kedalaman

8

Grad (tanpa skip)

0.0037

Grad (skip)

0.7021

Perhatikan gradient menghilang tanpa skip (kiri), tetapi tetap sehat dengan skip (kanan). Skip connection menyediakan gradient highway: jalur langsung bagi gradient untuk mengalir mundur lewat operasi +.

Geser Kedalaman Network dari 2 ke 20, lalu bandingkan kedua diagram batang. Matematikanya adalah chain rule. Untuk y = x + F(x), ∂y/∂x = 1 + ∂F/∂x, jadi gradient yang sampai ke layer awal adalah hasil kali suku (1 + ∂F/∂x), bukan hasil kali ∂F/∂x saja. Jika hasil kali itu dijabarkan, muncul penjumlahan yang selalu memuat suku langsung bernilai 1. Veit et al. (2016) menunjukkan bahwa ResNet berperilaku seperti ensemble dari banyak jalur yang lebih dangkal, dan sebagian besar gradient mengalir lewat jalur yang panjangnya hanya 10 sampai 34 layer.

Langkah 5 dari 6: Block ResNet

Arsitektur basic vs. bottleneck

Jenis Block: Basic
input3x3 ConvBatchNormReLU3x3 ConvBatchNorm+ReLUskip

Parameter (basic)

1180K

Parameter (bottleneck)

70K

Kompresi

94%

Basic block memakai dua convolution 3x3 dengan skip connection. Block yang dipakai di ResNet-18 dan ResNet-34 ini sederhana dan efektif untuk arsitektur yang lebih dangkal.

Geser slider Jenis Block dari Basic ke Bottleneck. Pada 256 channel, dua convolution 3x3 butuh 2 × 256 × 256 × 9 ≈ 1,18 juta weight. Versi bottleneck (1x1 turun ke 64, 3x3 pada 64, 1x1 kembali ke 256) butuh 16.384 + 36.864 + 16.384 = 69.632. Makalah lanjutan dari penulis yang sama (He et al., 2016) memindahkan batch normalization dan ReLU ke sebelum tiap convolution. Dalam desain pre-activation ini, shortcut-nya murni identity dari input sampai output, dan mereka berhasil melatih ResNet 1.001 layer.

Langkah 6 dari 6: Makin Dalam

Dari 18 sampai 101 layer

Arsitektur: ResNet-18
7x7conv2_x×2conv3_x×2conv4_x×2conv5_x×2FCResNet-18 (basic)

Block

8

Parameter

11.7M

Akurasi top-1

69.8%

ResNet-18 memakai basic block (masing-masing dua convolution 3x3). Dengan 11,7 juta parameter, model ini cepat dan sering dijadikan acuan. Skip connection membuat ResNet yang "dangkal" ini pun bisa di-train dengan andal.

Geser slider Arsitektur dari ResNet-18 ke ResNet-101, lalu perhatikan BLOCK, PARAMETER, dan AKURASI TOP-1. ResNet-152, model ImageNet terdalam di makalah itu, menjadi bagian ensemble yang memenangi tantangan klasifikasi ImageNet 2015 dengan top-5 error 3,57%. Skip connection kemudian menyebar jauh melampaui klasifikasi. DenseNet menggabungkan feature map sebelumnya lewat concatenation, bukan penjumlahan, U-Net menghubungkan layer encoder dan decoder yang berpasangan untuk segmentation, dan setiap block Transformer membungkus attention serta feed-forward layer-nya dalam residual connection.

Apa itu skip connection (residual connection)?

Skip connection adalah jalan pintas yang menambahkan input sebuah block layer langsung ke output-nya, sehingga block itu menghitung F(x) + x, bukan F(x). Dengan begitu, layer-layer di dalamnya hanya perlu mempelajari residual F(x), yaitu selisih antara output yang diinginkan dan input. Penjumlahan sederhana ini menjadi inti residual network (ResNet), yang diperkenalkan He et al. pada 2015.

Skip connection membuat network yang sangat dalam bisa di-train. Berkat skip connection, ResNet bisa melewati 100 layer pada klasifikasi gambar. Teknik ini juga muncul di U-Net untuk segmentation, di backbone untuk detection, dan di setiap block Transformer, tempat attention dan feed-forward layer masing-masing berada di dalam residual connection. Tanpa skip connection, menumpuk lebih banyak layer sering kali membuat training error makin buruk, bukan makin baik.

Ide utama

  • Skip connection menghitung F(x) + x, jadi layer-layer-nya hanya mempelajari residual F(x).
  • Training error plain network makin buruk seiring bertambahnya kedalaman, bahkan dengan batch normalization.
  • Karena ∂(x + F(x))/∂x = 1 + ∂F/∂x, gradient selalu punya jalur langsung untuk kembali.
  • Block dengan F(x) mendekati nol bertindak sebagai identity, jadi menambah block berisiko kecil.
  • Bottleneck block memakai convolution 1x1 untuk memangkas parameter di ResNet yang dalam.
  • Residual connection dipakai di ResNet, U-Net, dan setiap block Transformer.

Pertanyaan umum

Apa bedanya skip connection dan residual connection?

Skip connection adalah jalur apa pun yang membawa input sebuah layer melewati satu layer atau lebih. Residual connection adalah jenis khusus yang menjumlahkan input ke output, seperti di ResNet. Skip connection juga bisa berupa concatenation, seperti di DenseNet dan U-Net, atau melewati gate yang dipelajari, seperti di highway network.

Apakah skip connection mengurangi overfitting?

Tidak secara langsung. Fungsi utamanya memperbaiki masalah optimasi: plain network yang lebih dalam gagal mencocokkan data training sekalipun. Overfitting tetap ditangani dengan data augmentation, weight decay, dan regularization lainnya. ResNet yang lebih dalam memang melakukan generalization dengan baik dalam praktik, tetapi itu berawal dari fakta bahwa ia bisa di-train.

Apa itu highway network?

Highway network (Srivastava et al., 2015) adalah desain yang lebih awal, dengan gate T(x) yang dipelajari untuk mencampur output layer dan input: y = T(x) · H(x) + (1 − T(x)) · x. Desain ini membuat network dengan sekitar 100 layer bisa di-train. ResNet membuang gate itu dan selalu menjumlahkan input, yang lebih sederhana dan bekerja lebih baik pada skala besar.

Apa arti angka pada ResNet-50?

Angka itu menghitung layer dengan weight yang dipelajari di sepanjang jalur utama: convolution 7x7 pertama, convolution di semua residual block, dan fully connected layer terakhir. ResNet-50 punya 16 bottleneck block yang masing-masing berisi 3 convolution, jadi 1 + 48 + 1 = 50. Shortcut, pooling, dan batch normalization tidak dihitung.

Penjelasan terkait

Referensi

  1. He, Zhang, Ren & Sun (2015), "Deep Residual Learning for Image Recognition", CVPR 2016
  2. He, Zhang, Ren & Sun (2016), "Identity Mappings in Deep Residual Networks", ECCV
  3. Veit, Wilber & Belongie (2016), "Residual Networks Behave Like Ensembles of Relatively Shallow Networks", NeurIPS
  4. Srivastava, Greff & Schmidhuber (2015), "Highway Networks"

Terakhir diperbarui