b belajar.myudak

Loss REINFORCE dengan baseline

Hitung loss REINFORCE dengan baseline rata-rata return:

L=−1N∑tlog⁡π(at∣st) (Gt−b),b=1N∑tGtL = -\frac{1}{N}\sum_t \log\pi(a_t|s_t)\,\bigl(G_t - b\bigr), \qquad b = \frac1N\sum_t G_t

logp dan returns berbentuk (N,). Kembalikan satu angka.

Teorema policy gradient

Gradien return yang diharapkan terhadap parameter kebijakan θ\theta:

∇θJ=E[∇θlog⁡πθ(a∣s)  G]\nabla_\theta J = \mathbb{E}\Bigl[\nabla_\theta \log \pi_\theta(a|s)\; G\Bigr]

Artinya: naikkan log-probabilitas aksi sebanding dengan seberapa bagus hasilnya. Di kode, kita meminimalkan −log⁡π⋅G-\log\pi \cdot G dengan autograd, dan gradiennya otomatis sama dengan rumus di atas.

Kenapa baseline

Jika semua return positif (misalnya cart-pole: +1 per langkah), semua aksi didorong naik, hanya kecepatannya berbeda. Gradiennya sangat berisik. Mengurangi baseline bb membuat aksi yang lebih buruk dari rata-rata diturunkan. Hasilnya tetap tidak bias (karena E[∇log⁡π⋅b]=0\mathbb{E}[\nabla \log\pi \cdot b] = 0), tetapi variansnya jauh lebih kecil.

Baseline terbaik bergantung pada state: b=V(s)b = V(s). Itulah langkah menuju actor-critic.

Penjelasan

Yang diminta. Satu float.

Langkah di kode: advantage = returns - returns.mean(), lalu -(logp * advantage).mean().

Case 2: semua return sama. Advantage semuanya 0, jadi loss 0: tidak ada aksi yang lebih baik dari yang lain, sehingga tidak ada yang perlu diubah. Tanpa baseline, semua aksi akan didorong naik.

Cek case 1. Rata-rata return 5, advantage [5,−5][5, -5]. Loss =−(−0.1)(5)+(−2)(−5)2=−4.75= -\frac{(-0.1)(5) + (-2)(-5)}{2} = -4.75. Saat diminimalkan, peluang aksi pertama (return 10) naik dan peluang aksi kedua turun.

Yang dikembalikan: float.

Topik
rlpolicy gradientreinforcebaseline
Petunjuk 1

Advantage = G − mean(G): positif untuk aksi yang lebih baik dari rata-rata, negatif untuk yang lebih buruk.

Petunjuk 2

Loss = −mean(logp · advantage). Tanda minus karena kita ingin MENAIKKAN logp aksi ber-advantage positif.

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.