Pooling

Downsampling dan toleransi translasi yang diberikannya.

Daftar isi

Pooling adalah operasi yang mengecilkan peta fitur dengan mengganti setiap jendela lokal menjadi satu nilai ringkasnya, dan pooling maksimum adalah bentuk yang paling umum. Topik ini menjelaskan cara kerjanya, alasan ia memberi toleransi terhadap pergeseran, serta posisinya pada arsitektur modern yang kini sebagian digantikan konvolusi ber-stride. Setelah selesai, pilihan antara pooling dan stride dapat dibuat dengan memahami harga masing-masing.

Cara kerja pooling maksimum#

Pooling membagi peta fitur menjadi jendela yang tidak saling menumpuk, misalnya jendela 2x2 dengan lompatan 2, lalu mengeluarkan satu nilai per jendela. Pooling maksimum memilih nilai terbesar dalam jendela, yang berarti sel yang dilalui fitur terkuat tetap tercatat, sedangkan pooling rata-rata mengambil nilai rata-ratanya dan lebih menengahkan jawaban. Tidak ada parameter yang dipelajari di dalamnya, sehingga jumlah parameter jaringan tidak bertambah meskipun operasinya berguna.

Contoh numerik berikut menghitung keduanya pada peta fitur 4x4 yang sama, sehingga efek pengecilan beserta pilihan nilainya terlihat langsung.

python Contoh: pooling maksimum dan rata-rata pada peta 4x4
import torch
import torch.nn.functional as F

peta = torch.tensor([[1., 5., 2., 0.],
                     [3., 2., 1., 4.],
                     [0., 1., 8., 2.],
                     [2., 0., 3., 1.]]).reshape(1, 1, 4, 4)
maks = F.max_pool2d(peta, kernel_size=2)
rata = F.avg_pool2d(peta, kernel_size=2)
print("peta 4x4 -> 2x2")
print("maksimum :", maks.squeeze().tolist())
print("rata-rata:", [round(v, 3) for v in rata.squeeze().flatten().tolist()])
text Keluaran
peta 4x4 -> 2x2
maksimum : [[5.0, 4.0], [2.0, 8.0]]
rata-rata: [2.75, 1.75, 0.75, 3.5]

Jendela kiri atas memuat nilai 1, 5, 3, dan 2, dan pooling maksimum menyimpan 5, yaitu respons terkuatnya, sedangkan pooling rata-rata menyimpan 2,75. Angka 5 tersebut dibaca sebagai ada atau tidaknya fitur di wilayah itu, dan pembacaan kehadiran inilah yang membuat maksimum lebih populer pada deteksi pola.

Toleransi terhadap pergeseran#

Nilai yang dikeluarkan pooling maksimum tidak bergantung pada posisi tepat fitur di dalam jendelanya, melainkan hanya pada keberadaannya. Fitur yang bergeser satu piksel ke kiri atau ke bawah tetap jatuh di jendela yang sama dan menghasilkan nilai yang sama, sehingga peta keluarannya tidak berubah. Sifat ini disebut toleransi terjemahan lokal (translation tolerance), dan ia menambah invarian yang sudah ditanamkan pembagian bobot konvolusi.

Pengaruhnya bersifat bertingkat ketika ditumpuk. Jendela 2x2 memberi toleransi sekitar satu piksel per layer, dan tiga layer pooling berurutan memberi toleransi yang tumbuh menjadi beberapa piksel pada skala masukan. Di ujung jaringan, peta fitur yang sudah kecil membuat keputusan akhir hampir tidak peka pada posisi kecil objek, dan itulah keinginan yang wajar untuk klasifikasi. Kehendak yang berbeda, misalnya segmentasi yang harus menunjuk posisi tepat, justru merugikan oleh terlalu banyak pooling, dan arsitekturnya menahan jumlah pengecilannya.

Harga yang dibayar dan penggantinya#

Pooling membuang informasi posisi secara sadar, dan harga itu terbayar dengan dua kerugian yang perlu diketahui. Pertama, peta yang mengecil dua kali di tiap arah membuat sisa jaringan lebih murah, tetapi detail yang terbuang tidak pernah kembali pada jalur maju biasa, sehingga tugas yang membutuhkan detail harus menambahkan jalur pemulihnya. Kedua, pooling maksimum yang agresif mengecilkan ukuran terlalu cepat pada citra kecil, sehingga jaringan untuk masukan 28x28 biasanya hanya menahan satu atau dua layer pooling.

Jaringan modern sering mengganti pooling dengan layer konvolusi ber-stride 2, yang mengecilkan peta dengan cara yang sama tetapi pembagiannya dipelajari dari data. Kompromi yang lazim adalah memakai pooling maksimum pada layer awal, misalnya satu layer setelah konvolusi pertama, lalu menyerahkan pengecilan lanjutan kepada konvolusi ber-stride. Resep tersebut pada topik Arsitektur klasik memperlihatkan kedua gaya tersebut dalam wujud bersejarahnya, yaitu LeNet yang kaya pooling dan keluarga yang mengikutinya.

Ringkasan#

  • Pooling mengganti setiap jendela 2x2 menjadi satu nilai, dengan maksimum menyimpan respons terkuat dan tanpa parameter yang dipelajari.
  • Nilai maksimum tidak berubah ketika fitur bergeser di dalam jendelanya, sehingga pooling memberi toleransi terjemahan yang menumpuk antar layer.
  • Harganya adalah hilangnya informasi posisi dan detail, sehingga tugas yang peka posisi menahan jumlah pooling.
  • Konvolusi ber-stride 2 menjadi pengganti modern yang dapat dipelajari, dan pooling maksimum bertahan pada layer-layer awal.

Referensi#