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

ປ່ຽນພາສາ

ສະກຸນເງິນ

ໜ້າທຳອິດ
ບົດຄວາມ
ບໍລິການ
ບົດ 04 · RL ແບບຕາຕະລາງ

ຊັ່ງການສຳຫຼວດ ແລະ ການໃຊ້ປະໂຫຍດ

ເຄື່ອງ slot ຫຼາຍເຄື່ອງ ເລືອກເຄື່ອງໃດດີ?

ເມື່ອບໍ່ຮູ້ MDP, agent ເຫັນພຽງຕົວເລກລາງວັນ ເຊັ່ນ +1, −4. ມັນຈຶ່ງບໍ່ຮູ້ວ່າຍັງມີທາງເລືອກທີ່ດີກວ່າຊ້ອນຢູ່ຫຼືບໍ່.

ນີ້ແມ່ນບັນຫາ exploration vs exploitation: ລອງສິ່ງໃໝ່ (ອາດເສຍໂອກາດ) ຫຼື ເລືອກສິ່ງທີ່ຮູ້ວ່າດີ (ອາດພາດສິ່ງທີ່ດີກວ່າ). ລາງວັນທີ່ເສຍໄປເພາະບໍ່ໄດ້ເລືອກທາງທີ່ດີທີ່ສຸດ ເອີ້ນວ່າ regret.

ໃນໂຄດ: greedy ລ້ວນໆ ຕິດຢູ່ກັບເຄື່ອງທີ່ພົບກ່ອນ, UCB ໃຊ້ຄວາມບໍ່ແນ່ນອນຊ່ວຍເລືອກ ຈຶ່ງໃກ້ຄ່າສູງສຸດກວ່າ.

ວິທີແນວຄິດ
ε-greedyສ່ວນຫຼາຍເລືອກອັນທີ່ດີທີ່ສຸດ, ມີໂອກາດ ε ສຸ່ມເລືອກ
Decaying ε-greedyສຳຫຼວດຫຼາຍໃນຕອນຕົ້ນ ແລ້ວຫຼຸດ ε ລົງເລື້ອຍໆ
Optimistic initializationຕັ້ງ Q ເລີ່ມຕົ້ນສູງໆ ເພື່ອບັງຄັບໃຫ້ລອງທຸກທາງ
Softmaxສຸ່ມຕາມສັດສ່ວນຂອງຄ່າ Q
UCBບວກ "ໂບນັດຄວາມບໍ່ແນ່ນອນ" ໃຫ້ທາງທີ່ລອງໜ້ອຍ
Thompson samplingສຸ່ມຈາກການກະຈາຍຄວາມເຊື່ອ (Bayesian) ຂອງແຕ່ລະທາງ

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

  • ບໍ່ສຳຫຼວດ = ອາດຕິດຢູ່ກັບທາງເລືອກທີ່ບໍ່ດີ. ສຳຫຼວດຫຼາຍໂພດ = ເສຍລາງວັນ
  • ວິທີທີ່ດີມັກໃຊ້ຂໍ້ມູນ "ຄວາມບໍ່ແນ່ນອນ" ບໍ່ແມ່ນສຸ່ມແບບຕາບອດ
deep-rl-ep04-bandits.py
import numpy as np

rng = np.random.default_rng(0)
true_means = rng.normal(0, 1, size=10)     # ເຄື່ອງ slot 10 ເຄື່ອງ (ບໍ່ຮູ້ຄ່າຈິງ)

def run(strategy, steps=1000):
    Q, N, total = np.zeros(10), np.zeros(10), 0.0
    for t in range(1, steps + 1):
        a = strategy(Q, N, t)
        r = rng.normal(true_means[a], 1)
        N[a] += 1
        Q[a] += (r - Q[a]) / N[a]          # ຄ່າສະເລ່ຍແບບ incremental
        total += r
    return total / steps

def epsilon_greedy(Q, N, t, eps=0.1):
    return rng.integers(10) if rng.random() < eps else int(np.argmax(Q))

def ucb(Q, N, t, c=2.0):
    if (N == 0).any():
        return int(np.argmin(N))           # ລອງທຸກເຄື່ອງກ່ອນ
    return int(np.argmax(Q + c * np.sqrt(np.log(t) / N)))

print(f"ຄ່າສູງສຸດທີ່ເປັນໄປໄດ້ : {true_means.max():.3f}")
print(f"greedy (eps=0)        : {run(lambda Q, N, t: epsilon_greedy(Q, N, t, 0)):.3f}")
print(f"epsilon-greedy (0.1)  : {run(epsilon_greedy):.3f}")
print(f"UCB                   : {run(ucb):.3f}")

ຜົນລັບ

ຄ່າສູງສຸດທີ່ເປັນໄປໄດ້ : 1.304
greedy (eps=0)        : 0.642
epsilon-greedy (0.1)  : 1.039
UCB                   : 1.195
  • #DeepRL
  • #ReinforcementLearning
  • #PythonສຳລັບຄົນLaos
  • #AI
  • #ບອກຕໍ່ຄວາມຮູ້