Belajar AI #12: Backpropagation — Cara Jaringan Saraf Belajar dari Error

Nama “backpropagation” dulu terdengar seperti materi doktoral yang sebaiknya saya hindari. Saya menunda mempelajarinya berminggu-minggu, puas memakai library tanpa paham apa yang terjadi di balik layar. Ketika akhirnya berani menghadapinya, temuan saya mengejutkan: backpropagation hanyalah aturan rantai (chain rule) dari kalkulus SMA, diotomatisasi dan dijalankan mundur dari output ke input. Episode ini catatan cara saya akhirnya paham — lewat analogi, bukan lewat deretan rumus.

Training Adalah Optimasi Parameter

Pakai kerangka yang sudah kita sepakati: model adalah fungsi f(x; θ) dengan parameter θ, dan training adalah proses mencari θ yang mengecilkan loss. Loss adalah angka tunggal yang mengukur seberapa salah prediksi model. Gradient descent adalah cara mengecilkan angka itu: hitung arah penurunan paling tajam (gradien), lalu melangkah sedikit ke arah sana. Secara simbol: θ baru = θ lama dikurangi learning rate dikali gradien loss.

Pertanyaan kuncinya satu: bagaimana menghitung gradien loss terhadap setiap parameter, padahal parameter itu tersembunyi di dalam tumpukan layer yang panjang? Di situlah backpropagation masuk.

Analogi: Rantai Dampak

Bayangkan menghitung gaji bersih lewat beberapa langkah: gaji pokok dikurangi potongan pajak, dikurangi cicilan, dikurangi iuran. Sekarang pertanyaannya: kalau gaji pokok naik satu rupiah, berapa rupiah gaji bersih naik? Jawabannya bukan satu langkah, tapi perkalian pengaruh setiap tahap: berapa dampak gaji pokok ke pajak, dikali dampak pajak ke subtotal, dikali dampak subtotal ke bersih. Persis seperti itu cara kerja chain rule: turunan terhadap variabel di hulu dihitung dengan mengalikan turunan-turunan di sepanjang rantai.

Dalam neural network, rantainya: loss bergantung pada output, output bergantung pada aktivasi layer terakhir, yang bergantung pada layer sebelumnya, dan seterusnya sampai bobot paling awal. Backpropagation menghitung ∂L/∂w dengan mengalikan turunan lokal di sepanjang jalur itu, dari belakang ke depan. Karena gradien layer awal bisa dipakai ulang hasil perhitungan layer belakang, total biayanya efisien — ini alasan metode ini revolutiner.

Lihat Langsung di PyTorch

Framework modern seperti PyTorch mengotomatiskan semuanya lewat autograd. Anda cukup definisikan perhitungan maju, panggil backward, dan gradien semua parameter terisi:

import torch

w = torch.tensor([2.0], requires_grad=True)
x = torch.tensor([3.0])

y = w * x                 # forward pass
loss = (y - 10) ** 2      # loss = (wx - 10)^2

loss.backward()           # backward pass
print(w.grad)             # dL/dw = 2*(wx - 10)*x = -24.0

Cek manualnya: y = 2 × 3 = 6, loss = (6 − 10)² = 16. Turunan loss terhadap w adalah 2 × (6 − 10) × 3 = −24. Angka yang dicetak PyTorch persis sama. Gradien negatif artinya: naikkan sedikit nilai w, loss akan turun. Itulah arah yang diambil optimizer.

Masalah Nyata: Vanishing Gradient

Di sinilah teori bertemu sakit kepala saya yang pertama. Karena gradien dihitung dengan perkalian berantai, jika tiap faktornya kecil, hasilnya menyusut eksponensial menuju nol. Turunan sigmoid maksimal hanya 0,25 — kalikan beberapa layer, gradien di layer awal praktis nol, artinya layer awal nyaris tidak pernah belajar. Fenomena ini bernama vanishing gradient, dan menjadi salah satu alasan ReLU menggantikan sigmoid di hidden layer, serta alasan lahirnya trik seperti residual connection dan normalisasi.

Optimizer: Cara Melangkah

  • SGD: gradient descent murni dengan mini-batch. Sederhana, tapi langkahnya bising dan bisa lambat di lembah yang sempit.
  • Momentum: menumpuk sebagian arah langkah sebelumnya, seperti bola yang menggelinding dan menembus dataran kecil.
  • Adam: menyesuaikan learning rate per-parameter berdasarkan riwayat gradien. Default aman untuk mulai eksperimen.

Penutup yang jujur: Anda bisa produktif tanpa pernah menghitung gradien manual, karena autograd mengerjakannya. Tapi begitu training Anda macet — loss stagnan, gradien meledak, model tidak belajar — pemahaman backpropagation adalah pembeda antara menebak-nebak dan mendiagnosis. Luangkan waktu untuknya. Saya menyesal sudah menunda lama.

Sumber

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses