วิธีมอนเต คาร์โล

Reinforcement Learning with Gymnasium ใน Python

Fouad Trad

Machine Learning Engineer

ทบทวน: การเรียนรู้แบบอิงโมเดล

 

  • อาศัยความรู้เกี่ยวกับไดนามิกส์ของสภาพแวดล้อม
  • ไม่มีการโต้ตอบกับสภาพแวดล้อม

ภาพแสดงไดอะแกรมของอัลกอริทึม policy iteration และ value iteration ที่เคยเห็นในวิดีโอก่อนหน้า

Reinforcement Learning with Gymnasium ใน Python

การเรียนรู้แบบไม่อิงโมเดล

 

  • ไม่อาศัยความรู้เกี่ยวกับไดนามิกส์ของสภาพแวดล้อม
  • เอเจนต์โต้ตอบกับสภาพแวดล้อม
  • เรียนรู้นโยบายผ่านการลองผิดลองถูก
  • เหมาะกับการใช้งานจริงมากกว่า

ภาพหุ่นยนต์กำลังโต้ตอบกับสภาพแวดล้อมหมากรุก

Reinforcement Learning with Gymnasium ใน Python

วิธีมอนเต คาร์โล

  • เทคนิคแบบไม่อิงโมเดล
  • ประมาณค่า Q-value จาก episode

ภาพแสดงโครงสร้างของ episode ที่เก็บรวบรวม ประกอบด้วย state, action, reward และ return

Reinforcement Learning with Gymnasium ใน Python

วิธีมอนเต คาร์โล

  • เทคนิคแบบไม่อิงโมเดล
  • ประมาณค่า Q-value จาก episode

ภาพแสดงขั้นตอนที่สองของการประมาณค่า Q-value และลักษณะของ Q-table ที่มีจำนวนแถวเท่ากับจำนวน state และจำนวนคอลัมน์เท่ากับจำนวน action

Reinforcement Learning with Gymnasium ใน Python

วิธีมอนเต คาร์โล

  • เทคนิคแบบไม่อิงโมเดล
  • ประมาณค่า Q-value จาก episode

ภาพแสดงขั้นตอนสุดท้ายของการหานโยบายที่เหมาะสมที่สุด ซึ่งระบุการกระทำที่ดีที่สุดในแต่ละ state

  • สองวิธี: first-visit, every-visit
Reinforcement Learning with Gymnasium ใน Python

Grid world แบบกำหนดเอง

ภาพ grid world แบบกำหนดเองที่มี 6 state แบ่งเป็น 2 แถว 3 คอลัมน์ หมายเลข 0 ถึง 5 จากซ้ายบนไปขวาล่าง เอเจนต์อยู่ใน state 3 มีภูเขาใน state 4 และเป้าหมายอยู่ใน state 5

Reinforcement Learning with Gymnasium ใน Python

การเก็บ episode สองชุด

ภาพแสดง episode แรกที่เก็บรวบรวม ประกอบด้วย state, action, reward และ return

ภาพแสดง episode ที่สองที่เก็บรวบรวม ประกอบด้วย state, action, reward และ return

Reinforcement Learning with Gymnasium ใน Python

การประมาณค่า Q-value

ภาพแสดง state, action, reward และ return ที่เก็บรวบรวมจากทั้งสอง episode

  • Q-table: ตารางสำหรับเก็บค่า Q-value

ภาพแสดง Q-table ว่างที่ต้องกรอกข้อมูล

Reinforcement Learning with Gymnasium ใน Python

Q(4, left), Q(4, up) และ Q(1, down)

ภาพแสดง state, action, reward และ return ที่เก็บรวบรวมจากสอง episode โดยไฮไลต์ (4, left), (4, up) และ (1, down)

  • (s,a) ปรากฏครั้งเดียว -> กรอกด้วยค่า return

Q-table ที่กรอกค่าของ (4, left), (4, up) และ (1, down) แล้ว

Reinforcement Learning with Gymnasium ใน Python

Q(4, right)

ภาพแสดง state, action, reward และ return ที่เก็บรวบรวมจากสอง episode โดยไฮไลต์ (4, right) ใน episode ทั้งสอง

  • (s,a) ปรากฏ episode ละครั้ง -> หาค่าเฉลี่ย

Q-table ที่กรอกค่าของ (4, right) ด้วยค่าเฉลี่ย return จากทั้งสอง episode

Reinforcement Learning with Gymnasium ใน Python

Q(3, right) - มอนเต คาร์โลแบบ first-visit

ภาพแสดง state, action, reward และ return ที่เก็บรวบรวมจากสอง episode โดยไฮไลต์เฉพาะการปรากฏครั้งแรกของ (3, right) ในแต่ละ episode

  • หาค่าเฉลี่ยจากการเยี่ยมครั้งแรกของ (s,a) ใน episode

Q-table ที่กรอกค่าของ (3, right) ด้วยค่าเฉลี่ย return จากแถวที่ไฮไลต์ (การปรากฏครั้งแรกของ (3, right))

Reinforcement Learning with Gymnasium ใน Python

Q(3, right) - มอนเต คาร์โลแบบ every-visit

ภาพแสดง state, action, reward และ return ที่เก็บรวบรวมจากสอง episode โดยไฮไลต์ทุกการปรากฏของ (3, right) ใน episode ทั้งสอง

  • หาค่าเฉลี่ยจากทุกการเยี่ยมของ (s,a) ใน episode

Q-table ที่กรอกค่าของ (3, right) ด้วยค่าเฉลี่ย return จากแถวที่ไฮไลต์ (ทุกการปรากฏของ (3, right))

Reinforcement Learning with Gymnasium ใน Python

การสร้าง episode

def generate_episode():
    episode = []
    state, info = env.reset()

terminated = False while not terminated: action = env.action_space.sample()
next_state, reward, terminated, truncated, info = env.step(action)
episode.append((state, action, reward)) state = next_state
return episode
Reinforcement Learning with Gymnasium ใน Python

มอนเต คาร์โลแบบ first-visit

def first_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))

for i in range(num_episodes): episode = generate_episode() visited_states_actions = set()
for j, (state, action, reward) in enumerate(episode):
if (state, action) not in visited_states:
returns_sum[state, action] += sum([x[2] for x in episode[j:]])
returns_count[state, action] += 1 visited_states_actions.add((state, action))
nonzero_counts = returns_count != 0
Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts] return Q
Reinforcement Learning with Gymnasium ใน Python

มอนเต คาร์โลแบบ every-visit

def every_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))    

    for i in range(num_episodes):
        episode = generate_episode()  

        for j, (state, action, reward) in enumerate(episode):

            returns_sum[state, action] += sum([x[2] for x in episode[j:]])
            returns_count[state, action] += 1


    nonzero_counts = returns_count != 0
    Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts]
    return Q
Reinforcement Learning with Gymnasium ใน Python

การหานโยบายที่เหมาะสมที่สุด

def get_policy():
    policy = {state: np.argmax(Q[state]) for state in range(num_states)}    
    return policy
Reinforcement Learning with Gymnasium ใน Python

รวมทุกอย่างเข้าด้วยกัน

Q = first_visit_mc(1000)

policy_first_visit = get_policy()
print("First-visit policy: \n", policy_first_visit)
Q = every_visit_mc(1000)
policy_every_visit = get_policy()
print("Every-visit policy: \n", policy_every_visit)
First-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

Every-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

ภาพแสดงนโยบายที่เหมาะสมที่สุด พร้อม action ที่ดีที่สุดในแต่ละ state ในรูปแบบลูกศร

Reinforcement Learning with Gymnasium ใน Python

มาฝึกกันเถอะ!

Reinforcement Learning with Gymnasium ใน Python

Preparing Video For Download...