Ainsteinx Logo
Ainsteinx
👤
ຍິນດີຕ້ອນຮັບສູ່ Ainsteinx
ເຂົ້າສູ່ລະບົບ

ປ່ຽນພາສາ

ສະກຸນເງິນ

ໜ້າທຳອິດ
ບົດຄວາມ
ບໍລິການ
ບົດ 12 · Policy ແລະ Actor-Critic

Actor-Critic ຂັ້ນສູງ: DDPG, TD3, SAC, PPO

4 algorithm ທີ່ໃຊ້ຫຼາຍທີ່ສຸດໃນງານຈິງ.

DDPG ແລະ TD3 ຮຽນ policy ແບບ deterministic ສຳລັບ action ຕໍ່ເນື່ອງ, SAC ເພີ່ມ entropy ໃຫ້ policy ຫຼາກຫຼາຍ ແລະ PPO ຈຳກັດການປ່ຽນ policy ຕໍ່ຄັ້ງໃຫ້ໝັ້ນຄົງ.

ໃນໂຄດ: ເມື່ອ π_new = 0.9 (ratio = 1.8 ເກີນ 1.2) action ທີ່ advantage ເປັນບວກ gradient ກາຍເປັນ 0 (ຖືກ clip) ແຕ່ action ທີ່ advantage ເປັນລົບ ຍັງມີ gradient ດຶງກັບ. PPO ຈຶ່ງລະມັດລະວັງໃນທິດທາງທີ່ຖືກຕ້ອງ.

AlgorithmPolicyການຮຽນຈຸດເດັ່ນ
DDPGDeterministicOff-policyDQN ສຳລັບ action ຕໍ່ເນື່ອງ. ເພີ່ມ Gaussian noise ເພື່ອສຳຫຼວດ
TD3DeterministicOff-policy① Twin Q ② ໃສ່ noise ໃຫ້ target action ③ ອັບເດດ policy ຊ້າກວ່າ critic
SACStochasticOff-policyເພີ່ມ entropy ເຂົ້າເປົ້າໝາຍ: ລາງວັນສູງ ດ້ວຍ policy ທີ່ຫຼາກຫຼາຍທີ່ສຸດ
PPOStochasticOn-policyClipped objective ຈຳກັດການປ່ຽນ policy ຈຶ່ງໃຊ້ຂໍ້ມູນຊຸດດຽວອັບເດດໄດ້ຫຼາຍຮອບ
SAC : J(π) = E[ Σ γᵗ ( rₜ + α·H(π(·|sₜ)) ) ] PPO : rₜ(θ) = πθ(aₜ|sₜ) / πθ_old(aₜ|sₜ) L = E[ min( rₜ·Âₜ , clip(rₜ, 1−ε, 1+ε)·Âₜ ) ]

ສິ່ງທີ່ຄວນຈື່

  • Action ຕໍ່ເນື່ອງ + ຢາກໃຊ້ຂໍ້ມູນຄຸ້ມ → TD3 ຫຼື SAC
  • ຢາກໄດ້ວິທີທີ່ໝັ້ນຄົງ ແລະ ໃຊ້ໄດ້ກວ້າງ → PPO (ຈຸດເລີ່ມຕົ້ນທີ່ດີສຳລັບໂປຣເຈັກໃໝ່)
deep-rl-ep12-ddpg-td3-sac-ppo.py
import torch

def ppo_clip_loss(logp_new, logp_old, advantages, clip=0.2):
    ratio = torch.exp(logp_new - logp_old)                 # π_new / π_old
    unclipped = ratio * advantages
    clipped = torch.clamp(ratio, 1 - clip, 1 + clip) * advantages
    return -torch.min(unclipped, clipped).mean()           # ເລືອກຄ່າທີ່ລະມັດລະວັງກວ່າ

logp_old = torch.log(torch.tensor([0.5, 0.5]))
adv = torch.tensor([1.0, -1.0])
for p_new in (0.5, 0.6, 0.9):
    logp_new = torch.log(torch.tensor([p_new, p_new])).requires_grad_()
    loss = ppo_clip_loss(logp_new, logp_old, adv)
    loss.backward()
    print(f"π_new={p_new}: loss={loss.item():+.3f}  grad={logp_new.grad.numpy().round(3)}")

ຜົນລັບ

π_new=0.5: loss=-0.000  grad=[-0.5  0.5]
π_new=0.6: loss=-0.000  grad=[-0.3  0.3]
π_new=0.9: loss=+0.300  grad=[0.  0.9]
  • #DeepRL
  • #ReinforcementLearning
  • #PythonສຳລັບຄົນLaos
  • #AI
  • #ບອກຕໍ່ຄວາມຮູ້