IT General
น้องๆ เคยเล่นเกมแล้วค่อยๆ เก่งขึ้นไหม? Reinforcement Learning (RL) ก็คล้ายๆ กันเลยครับ แต่เป็นระบบที่ให้คอมพิวเตอร์เรียนรู้ที่จะตัดสินใจว่าจะทำอะไร เพื่อให้ได้รางวัล (reward) สูงสุด
สมัยผมทำร้านเน็ต SiamCafe.net เนี่ย เกมออนไลน์บูมมาก! ถ้ามี AI ที่เล่นเกมเก่งๆ มาช่วยลูกค้าเก็บเลเวลได้ คงดีไม่น้อย (หัวเราะ) RL นี่แหละคือพื้นฐานของ AI ที่ฉลาดๆ แบบนั้น
ทำไมมันถึงสำคัญ? ลองคิดดูว่าถ้าเราสามารถสร้างระบบที่เรียนรู้ที่จะควบคุมหุ่นยนต์ให้ทำงานอันตรายแทนคน หรือช่วยในการวางแผนการลงทุนที่ดีที่สุดได้ มันจะเจ๋งขนาดไหน!
ก่อนจะไปต่อ เราต้องรู้จักศัพท์พื้นฐานกันก่อนนะ
Environment คือโลกที่ agent ของเราอาศัยอยู่ครับ มันอาจจะเป็นเกม, ตลาดหุ้น, หรือแม้แต่ห้องที่เรากำลังจะให้หุ่นยนต์ดูดฝุ่นก็ได้
Agent คือตัวละครของเรานั่นเอง มันคือโปรแกรมที่ตัดสินใจว่าจะทำอะไรในแต่ละสถานการณ์
Action คือสิ่งที่ agent สามารถทำได้ในแต่ละสถานการณ์ เช่น เดินหน้า ถอยหลัง ยิง หรือซื้อหุ้น
Reward คือคะแนนที่ agent ได้รับเมื่อทำ action บางอย่าง Reward จะเป็นตัวบอกว่า action นั้นดีหรือไม่ดี
State คือข้อมูลเกี่ยวกับ environment ที่ agent มองเห็นได้ ณ ขณะนั้น
Policy คือแผนการที่ agent ใช้ในการตัดสินใจว่าจะทำ action อะไรในแต่ละ state พูดง่ายๆ คือสมองของ agent นั่นเอง
การเริ่มต้น Reinforcement Learning ไม่ยากอย่างที่คิดครับ มีเครื่องมือและไลบรารีมากมายให้เราเลือกใช้
สมัยผมทำร้านเน็ต ผมต้องลง Windows ใหม่ให้ลูกค้าบ่อยมาก ถ้ามี AI ที่ทำตรงนี้แทนได้คงสบาย (หัวเราะ) RL นี่แหละอาจจะเป็นคำตอบ!
เลือก environment ที่เหมาะสมกับปัญหาที่เราต้องการแก้ อาจจะเป็นเกมง่ายๆ อย่าง CartPole หรือ MountainCar ที่มีอยู่ใน OpenAI Gym ก็ได้
สร้าง agent ที่สามารถ interact กับ environment ได้ เราอาจจะใช้ไลบรารีอย่าง TensorFlow หรือ PyTorch เพื่อสร้าง neural network ที่เป็น policy ของ agent
ตัวอย่าง code (Python + OpenAI Gym):
import gym
env = gym.make('CartPole-v1')
state = env.reset()
for _ in range(100):
action = env.action_space.sample() # สุ่ม action
state, reward, done, info = env.step(action)
env.render()
if done:
state = env.reset()
env.close()
Train agent โดยให้มัน interact กับ environment ซ้ำๆ และปรับปรุง policy ของมันโดยใช้ algorithm อย่าง Q-learning หรือ SARSA
ถ้าเราทำร้านเน็ต แล้วมี agent ที่ช่วย optimize การจัดเรียงเครื่องคอมพิวเตอร์ให้ลูกค้าได้ใช้เครื่องที่แรงที่สุดก่อน ก็คงจะเพิ่มรายได้ให้ร้านได้เยอะเลย
Evaluate agent เพื่อดูว่ามันทำงานได้ดีแค่ไหน เราอาจจะวัดประสิทธิภาพของ agent โดยดูจาก reward ที่มันได้รับ
Reinforcement Learning ไม่ใช่ทุกสิ่งทุกอย่าง ยังมี Machine Learning แบบอื่นๆ ที่อาจจะเหมาะสมกับปัญหาของเรามากกว่า
สมัยผมทำร้านเน็ต ผมเคยเจอลูกค้าที่อยากจะสร้างระบบแนะนำเกมให้ลูกค้าคนอื่นๆ ถ้าเป็นสมัยนี้ เราอาจจะใช้ Collaborative Filtering แทน RL ก็ได้
| Algorithm | จุดเด่น | จุดด้อย | เหมาะกับ |
|---|---|---|---|
| Reinforcement Learning | เรียนรู้จากการลองผิดลองถูก, เหมาะกับปัญหาที่ต้องตัดสินใจต่อเนื่อง | ต้องการข้อมูลจำนวนมาก, อาจจะใช้เวลานานในการ train | เกม, หุ่นยนต์, การวางแผน |
| Supervised Learning | แม่นยำสูง, train ได้เร็ว | ต้องการข้อมูลที่มี label, ไม่สามารถเรียนรู้จากประสบการณ์ได้ | การจำแนกภาพ, การทำนาย |
| Unsupervised Learning | ไม่ต้องใช้ข้อมูลที่มี label, สามารถค้นหารูปแบบที่ซ่อนอยู่ได้ | ตีความผลลัพธ์ได้ยาก | การจัดกลุ่มลูกค้า, การลดจำนวนมิติ |
ลองเข้าไปอ่านบทความอื่นๆ ที่ SiamCafe Blog ดูนะครับ มีเรื่อง IT ที่น่าสนใจอีกเยอะเลย!
หวังว่าน้องๆ จะเข้าใจ Reinforcement Learning มากขึ้นนะครับ ถ้ามีคำถามอะไร ถามมาได้เลย!
อย่าลืมแวะไปดูบทความอื่นๆ ที่ SiamCafe Blog นะครับ!
เอาล่ะ มาถึงส่วนที่สำคัญที่สุด นั่นคือเคล็ดลับที่ผมสั่งสมมาจากการทำร้านเน็ตตั้งแต่ยุคบุกเบิก ซึ่งสามารถเอาไปประยุกต์ใช้กับการเรียนรู้แบบเสริมกำลังได้นะ
สมัยผมทำร้านเน็ต สิ่งที่สำคัญที่สุดคือ "การทดลอง" และ "การปรับตัว" เพราะเทคโนโลยีมันเปลี่ยนเร็วมาก วันนี้ใช้ได้ พรุ่งนี้อาจจะไม่ได้แล้ว ดังนั้น อย่ากลัวที่จะลองผิดลองถูก
เหมือนกับการเล่นเกม สมัยก่อนเกมมันก็ไม่ได้ซับซ้อนขนาดนี้ เริ่มจากเกมง่ายๆ ก่อน แล้วค่อยๆ เพิ่มความยากขึ้นเรื่อยๆ Reinforcement Learning ก็เหมือนกัน เริ่มจาก environment ที่มัน simple ก่อน แล้วค่อยๆ เพิ่ม complexity เข้าไป
เคยเจอเคสที่น้องๆ อยากจะทำ AI เล่นเกม Dota 2 เลยตั้งแต่เริ่ม ผมบอกเลยว่ายากเกินไป เริ่มจากเกมง่ายๆ อย่าง Atari Breakout หรือ CartPole ก่อนดีกว่าเยอะ
Reward function คือหัวใจของการเรียนรู้แบบเสริมกำลัง ถ้า reward function มันไม่ดี agent มันก็จะเรียนรู้ในทิศทางที่ผิดๆ ยกตัวอย่างง่ายๆ สมมติว่าเราตั้ง reward ให้ agent เก็บเหรียญในเกม Mario แต่มันดันไปหาวิธี hack เกม เพื่อให้ได้เหรียญเยอะๆ โดยที่ไม่ต้องเล่นเกมเลย แบบนี้คือ reward function มัน fail
สมัยผมทำร้านเน็ต ผมจะคอยสังเกตพฤติกรรมของลูกค้าตลอดเวลา ถ้าลูกค้าเล่นเกมแล้วมีความสุข ผมก็จะให้ reward โดยการแถมชั่วโมงให้ หรือไม่ก็จัดโปรโมชั่นให้เล่นฟรี แบบนี้คือการสร้าง reward function ที่ดี
Exploration คือการที่ agent มันลองทำอะไรใหม่ๆ ที่มันไม่เคยทำมาก่อน บางทีการ explore อาจจะทำให้ agent ค้นพบวิธีที่ดีกว่าเดิมก็ได้ สมัยผมทำร้านเน็ต ผมจะคอยอัพเดทเกมใหม่ๆ อยู่เสมอ ถึงแม้ว่าบางเกมมันจะไม่ฮิต แต่ก็เป็นการเปิดโอกาสให้ลูกค้าได้ explore อะไรใหม่ๆ
ในทาง RL มันจะมี concept ที่เรียกว่า "Exploration vs. Exploitation" ซึ่งหมายถึงการ balance ระหว่างการลองทำอะไรใหม่ๆ กับการใช้ประโยชน์จากสิ่งที่เรารู้แล้ว ซึ่งเป็น challenge ที่สำคัญมากๆ
การ visualize ข้อมูลต่างๆ จะช่วยให้เราเข้าใจการทำงานของ agent ได้ดีขึ้น เช่น การ plot reward function, Q-value, policy หรืออื่นๆ ที่เกี่ยวข้อง สมัยผมทำร้านเน็ต ผมจะคอยสังเกตสถิติการใช้งานของลูกค้า ว่าลูกค้าชอบเล่นเกมอะไร ช่วงเวลาไหน เพื่อนำข้อมูลมาปรับปรุงบริการให้ดีขึ้น
ลองนึกภาพว่าเรากำลังดู graph ที่แสดงให้เห็นว่า agent ของเรากำลังเรียนรู้อะไรอยู่ มันจะทำให้เราเห็นภาพรวมได้ดีกว่าการดูตัวเลขเฉยๆ เยอะเลย
ตอบ: มันก็ไม่ได้ยากขนาดนั้น แต่ก็ไม่ง่ายเหมือนปอกกล้วยเข้าปาก (ศัพท์โบราณเลยนะเนี่ย) มันต้องใช้ความเข้าใจในคณิตศาสตร์และ programming พอสมควร แต่ถ้าเราเริ่มจากอะไรง่ายๆ แล้วค่อยๆ เรียนรู้ไปเรื่อยๆ ก็ทำได้แน่นอน
ตอบ: ภาษา Python คือพระเอกของงานนี้ เพราะมี library ที่เกี่ยวข้องเยอะมาก เช่น TensorFlow, PyTorch, OpenAI Gym แต่ถ้าใครถนัดภาษาอื่น ก็สามารถใช้ได้นะ แต่ Python จะสะดวกกว่าเยอะ
ตอบ: พื้นฐานคณิตศาสตร์ (linear algebra, calculus, probability) และ programming (Python) จะช่วยได้เยอะ แต่ถ้าไม่มีพื้นฐานเลย ก็ไม่ต้องกังวล เริ่มจากเรียนรู้พื้นฐานไปพร้อมๆ กับการเรียนรู้ RL ก็ได้
ตอบ: เยอะแยะมากมาย ตั้งแต่เล่นเกม, ควบคุมหุ่นยนต์, บริหารจัดการ stock, optimize advertising campaign, personalized medicine และอื่นๆ อีกมากมาย ลองไปค้นหาดู แล้วจะพบว่ามันมีประโยชน์กว่าที่เราคิดเยอะเลย iCafeForex อาจจะใช้ RL ในการเทรดก็ได้นะ ใครจะรู้
Reinforcement Learning เป็น field ที่น่าสนใจมากๆ และมี potential ที่จะเปลี่ยนแปลงโลกได้ในอนาคต ถึงแม้มันจะดูยาก แต่ถ้าเรามีความตั้งใจ และเรียนรู้อย่างสม่ำเสมอ เราก็สามารถเข้าใจและนำมันไปประยุกต์ใช้ได้แน่นอน
อย่าลืมว่าการเรียนรู้คือการเดินทาง ไม่ใช่จุดหมายปลายทาง สนุกกับการเรียนรู้ และอย่าท้อแท้ถ้าเจอปัญหา
หวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนที่สนใจ Reinforcement Learning นะครับ SiamCafe Blog มีบทความอื่นๆ ที่น่าสนใจอีกเยอะ ลองเข้าไปอ่านดูนะครับ