- Backpropagation adalah inti dari pelatihan jaringan saraf, tetapi jika cara kerja internalnya tidak dipahami, dapat muncul kesalahan tak terduga karena ia merupakan struktur "abstraksi yang bocor (leaky abstraction)"
- Fungsi aktivasi sigmoid atau tanh dapat menyebabkan vanishing gradient sehingga pelatihan berhenti jika inisialisasi bobot salah
- ReLU dapat memicu fenomena dead ReLU, yaitu neuron menjadi nonaktif secara permanen saat input bernilai 0 atau kurang
- Pada RNN, perkalian matriks yang berulang dapat menyebabkan exploding gradient, sehingga perlu menggunakan gradient clipping atau LSTM untuk mencegahnya
- Jika tidak memahami cara kerja backpropagation, meskipun framework menanganinya secara otomatis, kemampuan debugging dan perbaikan model akan sangat menurun
Mengapa backpropagation perlu dipahami
- Dalam kuliah CS231n di Stanford, tugas dirancang agar mahasiswa mengimplementasikan forward pass dan backpropagation secara langsung
- Sebagian mahasiswa mengeluh karena menganggap itu tidak perlu, sebab framework seperti TensorFlow menghitung backpropagation secara otomatis
- Namun, backpropagation adalah abstraksi yang bocor, bukan abstraksi yang sepenuhnya tertutup, sehingga tanpa memahami cara kerjanya, sulit mengetahui penyebab kegagalan pelatihan
- Sikap seperti “framework akan mengurusnya sendiri” pada akhirnya menurunkan kemampuan desain model dan debugging
Vanishing gradient pada sigmoid
- Fungsi nonlinier sigmoid atau tanh akan memasuki kondisi saturasi (saturation) ketika nilai input besar, sehingga output mendekati 0 atau 1
- Pada saat itu, gradien lokal z(1-z)* menjadi 0, sehingga propagasi gradien terhenti saat backpropagation
- Gradien maksimum sigmoid adalah 0,25, sehingga setiap kali melewati lapisan, sinyal menyusut menjadi 1/4 atau kurang
- Akibatnya, kecepatan belajar lapisan bawah menjadi jauh lebih lambat dibanding lapisan atas
- Karena itu, saat menggunakan lapisan sigmoid, perlu perhatian khusus pada inisialisasi bobot dan preprocessing data
Masalah dead ReLU
- ReLU adalah fungsi yang membuat output menjadi 0 saat input 0 atau kurang
- Jika output neuron bernilai 0 pada forward pass, maka saat backpropagation gradiennya juga menjadi 0, sehingga neuron tersebut dapat menjadi nonaktif permanen
- Selama pelatihan, update bobot yang besar atau learning rate yang tinggi dapat membuat neuron terkunci dalam "keadaan mati"
- Setelah pelatihan, ada juga kasus ketika sebagian besar neuron dalam jaringan menghasilkan 0
- Karena itu, saat menggunakan ReLU, penyesuaian learning rate dan strategi inisialisasi sangat penting
Exploding gradient pada RNN
- Dalam RNN sederhana, matriks hidden state (Whh) yang sama dikalikan berulang pada setiap time step
- Saat backpropagation, gradien akan menuju 0 atau membesar tanpa batas tergantung pada besar eigenvalue matriks tersebut
- Jika |b| < 1, terjadi vanishing gradient; jika |b| > 1, terjadi exploding gradient
- Untuk mencegahnya, praktik umum adalah menerapkan gradient clipping atau menggunakan arsitektur LSTM
Contoh clipping yang salah dalam kode DQN
- Dalam implementasi DQN berbasis TensorFlow, ditemukan kode yang langsung melakukan clipping pada delta (error Q) dengan
tf.clip_by_value
- Pendekatan ini membuat gradien menjadi 0 ketika delta berada di luar rentang, sehingga pelatihan berhenti
- Karena yang dimaksud sebenarnya adalah gradient clipping, seharusnya digunakan Huber loss sebagai gantinya
- Dalam contoh kode, Huber loss diimplementasikan secara kondisional dengan menggabungkan
tf.square dan tf.abs
- Masalah ini dilaporkan sebagai isu di GitHub dan langsung diperbaiki
Kesimpulan
- Backpropagation bukan sekadar alat otomatisasi, melainkan sistem credit assignment yang dapat menimbulkan konsekuensi kompleks
- Tanpa memahami cara kerjanya, kita akan menghadapi ketidakstabilan model, kegagalan pelatihan, dan keterbatasan debugging
- Backpropagation tidak sulit secara matematis, dan dapat dipelajari secara intuitif melalui kuliah dan tugas CS231n
- Dengan memahami backpropagation, kemampuan merancang jaringan saraf dan memecahkan masalah akan meningkat pesat
- Daripada hanya mengandalkan fitur autodiff dari framework, yang penting adalah memahami aliran backpropagation yang sebenarnya
Belum ada komentar.