b belajar.myudak

Gradien log π terhadap logits

Untuk kebijakan kategorikal π=softmax(z)\pi = \text{softmax}(z), hitung gradien log-probabilitas aksi yang diambil terhadap logits:

∂log⁡π(a)∂z∈RK\frac{\partial \log\pi(a)}{\partial z} \in \mathbb{R}^K
z = [0, 0], a = 0  →  [0.5, -0.5]

Hasilnya harus stabil untuk logits besar.

Arah yang didorong policy gradient

log⁡π(a)=za−log⁡∑jezj⇒∂log⁡π(a)∂zk=1[k=a]−πk\log\pi(a) = z_a - \log\sum_j e^{z_j} \quad\Rightarrow\quad \frac{\partial\log\pi(a)}{\partial z_k} = \mathbb{1}[k=a] - \pi_k

Dikalikan advantage AA, update REINFORCE/PPO pada logits adalah A (onehot(a)−π)A\,(\text{onehot}(a) - \pi):

  • Logit aksi yang diambil naik sebesar A(1−πa)A(1 - \pi_a).
  • Logit aksi lain turun sebanding peluangnya.
  • Jika πa≈1\pi_a \approx 1, gradiennya hampir nol: tidak ada lagi yang perlu dipelajari dari aksi yang sudah pasti.

Bentuk “onehot − softmax” ini sama persis dengan gradien cross-entropy terhadap logits, tetapi dengan tanda terbalik. Policy gradient pada dasarnya adalah klasifikasi yang dibobot advantage.

Penjelasan

Yang diminta. Vektor (K,).

Langkah di kode: softmax stabil (kurangi max), buat one-hot untuk a, lalu kembalikan onehot - p.

Cek case 2. softmax([1,2,3])=[0.090,0.245,0.665]\text{softmax}([1, 2, 3]) = [0.090, 0.245, 0.665]. Untuk a=2a = 2: [−0.090,−0.245,0.335][-0.090, -0.245, 0.335]. Jumlah komponennya selalu 0, karena peluang total tetap 1: menaikkan satu aksi berarti menurunkan yang lain.

Case logits besar. [100, 0, 0] dengan a=0a = 0: π0≈1\pi_0 \approx 1, jadi gradiennya ≈0\approx 0. Tanpa pengurangan max, exp(100) sudah sangat besar dan rawan overflow.

Yang dikembalikan: array (K,).

Topik
rlpolicy gradientsoftmaxgradien
Petunjuk 1

log π(a) = z_a − log Σ_j exp(z_j). Turunkan terhadap z_k untuk k = a dan k ≠ a.

Petunjuk 2

Hasilnya: 1 − π_a untuk k = a, dan −π_k untuk lainnya. Dengan kata lain onehot(a) − softmax(z).

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.