Loss REINFORCE dengan baseline
Hitung loss REINFORCE dengan baseline rata-rata return:
L=−N1t∑logπ(at∣st)(Gt−b),b=N1t∑Gtlogp dan returns berbentuk (N,). Kembalikan satu angka.
Teorema policy gradient
Gradien return yang diharapkan terhadap parameter kebijakan θ:
∇θJ=E[∇θlogπθ(a∣s)G]Artinya: naikkan log-probabilitas aksi sebanding dengan seberapa bagus hasilnya. Di kode, kita meminimalkan −logπ⋅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 b membuat aksi yang lebih buruk dari rata-rata diturunkan. Hasilnya tetap tidak bias (karena E[∇logπ⋅b]=0), tetapi variansnya jauh lebih kecil.
Baseline terbaik bergantung pada state: 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]. Loss =−2(−0.1)(5)+(−2)(−5)=−4.75. Saat diminimalkan, peluang aksi pertama (return 10) naik dan peluang aksi kedua turun.
Yang dikembalikan: float.
Topik
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.
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.