Loss PPO yang dipotong
Implementasikan objektif clipped surrogate PPO sebagai loss (untuk diminimalkan):
L=−N1∑min(rtAt,clip(rt,1−ε,1+ε)At),rt=πlama(at∣st)πbaru(at∣st)ratio = 1.5, adv = 2, ε = 0.2 → −min(3.0, 2.4) = −2.4 // keuntungan dibatasi
Masalah yang dipecahkan PPO
Policy gradient biasa memakai setiap batch data sekali lalu membuangnya, karena setelah kebijakan berubah, datanya sudah “basi”. Memakai data yang sama berulang kali (beberapa epoch) bisa membuat kebijakan melompat terlalu jauh dan runtuh.
PPO mengizinkan beberapa epoch per batch, tetapi memotong insentif untuk menjauh dari kebijakan lama:
| advantage | rasio | efek clip |
|---|---|---|
| A>0 | r>1+ε | gradien 0: sudah cukup dinaikkan |
| A<0 | r<1−ε | gradien 0: sudah cukup diturunkan |
| lainnya | gradien normal |
min memastikan clip hanya membatasi keuntungan, tidak pernah menyembunyikan kerugian. Di lab cart-pole, metrik rasio terpotong menunjukkan berapa persen sampel yang terkena clip.
Penjelasan
Yang diminta. Satu float.
Langkah di kode: surr1 = ratio * adv, surr2 = np.clip(ratio, 1-eps, 1+eps) * adv, lalu -np.minimum(surr1, surr2).mean().
Empat kasus satu sampel (ε = 0,2, |A| = 2):
- r=1.5, A=+2: min(3,2.4)=2.4. Keuntungan dipotong di 1.2×2.
- r=0.5, A=+2: min(1,1.6)=1. Rasio kecil tidak dipotong: kebijakan baru justru mengurangi aksi yang bagus, dan itu tetap dihukum penuh.
- r=1.5, A=−2: min(−3,−2.4)=−3. Kerugian tidak dipotong.
- r=0.5, A=−2: min(−1,−1.6)=−1.6. Sudah cukup diturunkan, jadi dipotong.
Polanya: min selalu memilih nilai yang lebih pesimis.
Yang dikembalikan: float (loss = minus objektif).
Topik
Petunjuk 1
surr1 = ratio · adv; surr2 = clip(ratio, 1 − ε, 1 + ε) · adv.
Petunjuk 2
Ambil np.minimum(surr1, surr2) per elemen, rata-ratakan, lalu beri tanda minus (karena kita meminimalkan loss).
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.