Reinforcement Learning: สอน AI ด้วย Q-Learning กันดีกว่า
สำหรับใครที่เข้ามาอ่านบทความนี้ แล้วสงสัยว่า Reinforcement Learning คืออะไร แนะนำให้ลองกลับไปอ่านบทความ “มาทำความรู้จักกับ Reinforcement Learning แบบเบาๆกันเถอะ” ก่อนได้นะครับ
วันนี้เราจะมาลองเขียนโปรแกรมอย่างง่ายให้ AI ของเราเล่นเกมส์กัน และอัลกอริทึมที่เราจะใช้กันก็คือ Q-Learning ซึ่งนำเอาสมการทางคณิตศาสตร์ที่เรียกว่า Bellman Equation มาช่วย
Q(s,a) = r + γ(max(Q(s’,a’))
พูดถึง Q-Learning อย่างง่ายๆ ก็คือการที่เรามีตารางที่คอยบอกว่า ถ้าเราอยู่ state (s) นี้ เราทำ action (a) นี้ แล้วเล่นอย่างดีที่สุดจนจบเกมส์ จะได้ reward (r) เท่าไหร่ โดยมีการ discount reward (γ)
Simple Q-learning algorithm Process
เนื่องจากเป็น simple q-learning ขอ implement ในรูปแบบที่ เรารู้จำนวน state และ action ทั้งหมด เพื่อให้ง่ายต่อการเรียนรู้
Step 1: Initialize Q-table
สำหรับขั้นแรก ก็คือการสร้าง ตารางที่มีขนาดเท่ากับ จำนวน n แถว ( n = จำนวน state ที่เป็นไปได้ ) และ m หลัก ( m = จำนวน action ที่เป็นไปได้ ) ซึ่งเราจะให้ค่าทั้งหมด เป็น 0
Step 2: Choose an action
ก่อนที่เราจะเลือกว่าจะทำ action อะไร สำหรับ state ต่างๆ นั้นก็จะทำให้เกิดคำถามว่า
- เริ่มต้นเราเริ่มจากไม่รู้อะไรเลย เราจะรู้ได้ยังไงว่า เลือก action ไหนแล้วจะดี ?
- แล้วถ้าเรารู้ว่า action ไหนได้ผลลัพธ์ดีในระดับนึงแล้ว เราคิดว่ามันดีที่สุดรึยังจาก state ตอนนี้ ?
ทำให้เกิดสิ่งที่จะมาช่วยเราก็คือ Epsilon greedy โดยหน้าที่ของมันก็คือการบอกว่า เราควรตัดสินใจเลือกระหว่าง การค้นหารูปแบบใหม่ (explore) หรือจะเลือกทำแบบที่คิดว่าดีอยู่แล้ว (exploit)
ส่วนมากเขามักจะให้ค่าของ epsilon อยู่ในช่วง 0–1 โดย 1 หมายถึง ให้ explore 100% และยิ่งมีค่าน้อยลงก็หมายถึง explore ให้น้อยลงนั่นเอง
ลองนึกกันดูว่าถ้าเราเล่นหมากรุก ก่อนที่เราจะรู้ว่ากลยุทธ์แบบไหนดี ล้วนเกิดจากการลองผิดลองถูกก่อน อะไรดีเราก็นำมาปรับใช้
Step 3–4: Perform action & Measure reward
หลังเราเลือกแล้วว่า state นี้ เราจะ action อะไร เราก็นำสิ่งที่เราเลือกไปใช้กับ environment ซึ่ง environment ก็จะบอกเราว่า หลังจากทำ action นี้ เราจะไปอยู่ที่ state ไหนต่อไป (s’) และเราได้ reward (r) มาเท่าไหร่หลังจากทำ action นั้น
Step 5: Update Q-Table
มาถึงพระเอกของเราแล้ว ก็คือการอัพเดทความรู้ให้ตัว ตารางของเรา ไม่ยากอย่างที่คิดครับ มีแค่สมการเดียวเลยก็คือ
แล้วก็จะวนทำขั้นตอนที่ 2–5 ไปเรื่อยๆ จนกว่าเราจะพอใจ ยิ่งมากก็ยิ่งดีนั่นเอง ~
Implement Q-Learning
ทฤษฎีกันมาพอสมควรแล้ว เรามาลองทำจริงกันเลยดีกว่า สำหรับเกมส์ที่เราจะนำมาเล่นกันก็คือ FrozenLake
เป็นเกมส์ง่ายๆที่จากรูปข้างบน จะเห็นว่า มีตัวอักษร 4 ตัวก็คือ S, F, H และ G เป้าหมายของเกมส์ คือการเดินจากจุด S ไปตามทางเดิน F เพื่อไปถึงเป้าหมายคือจุด G แต่ระหว่างทางจะมีอุปสรรค์ก็คือ H ที่หมายถึงตกหลุม เมื่อเราตกหลุมก็จะแพ้ โดยเราเลือกเดินได้ 4 ทิศ คือ บน-ล่าง-ซ้าย-ขวา
ก็จบไปแล้วสำหรับ Algorithm สุด basic ก็หวังว่าจะเป็นประโยชน์กับคนที่กำลังสนใจไม่มากก็น้อย แล้วพบกันใหม่ในบทความต่อไปครับผม
สำหรับคนที่สนใจเป็นพิเศษ ก็ขอแนะนำหนังสือ Reinforcement Learning: An Introduction