b belajar.myudak

Loss PPO yang dipotong

Implementasikan objektif clipped surrogate PPO sebagai loss (untuk diminimalkan):

L=−1N∑min⁡(rtAt,  clip(rt,1−ε,1+ε) At),rt=πbaru(at∣st)πlama(at∣st)L = -\frac1N\sum \min\Bigl(r_t A_t,\; \text{clip}(r_t, 1-\varepsilon, 1+\varepsilon)\,A_t\Bigr), \qquad r_t = \frac{\pi_\text{baru}(a_t|s_t)}{\pi_\text{lama}(a_t|s_t)}
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:

advantagerasioefek clip
A>0A > 0r>1+εr > 1 + \varepsilongradien 0: sudah cukup dinaikkan
A<0A < 0r<1−εr < 1 - \varepsilongradien 0: sudah cukup diturunkan
lainnyagradien 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=+2r = 1.5,\ A = +2: min⁡(3,2.4)=2.4\min(3, 2.4) = 2.4. Keuntungan dipotong di 1.2×21.2 \times 2.
  • r=0.5, A=+2r = 0.5,\ A = +2: min⁡(1,1.6)=1\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=−2r = 1.5,\ A = -2: min⁡(−3,−2.4)=−3\min(-3, -2.4) = -3. Kerugian tidak dipotong.
  • r=0.5, A=−2r = 0.5,\ A = -2: min⁡(−1,−1.6)=−1.6\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
rlppoloss
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).

Python 3.14 · NumPy

Pengaturan editor

Ukuran font
Ukuran huruf di editor.
Ukuran tab
Lebar indentasi. Otomatis: 2 spasi untuk TypeScript, 4 untuk Python.
Key bindings
Ganti ke mode Vim.
Nomor baris relatif
Nomor baris dihitung dari posisi kursor (berguna untuk gerakan Vim).
Word wrap
Baris panjang dilipat agar muat di lebar editor.
IntelliSense
Saran kode otomatis saat mengetik (Ctrl+Spasi tetap bisa dipakai saat mati).

Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.